玩转微服务- API网关和服务发现

4
我们计划基于play框架开发一些微服务。它们将提供rest api,其中许多api将在akka集群/集群分片下使用。
我们希望有一个api网关来公开内部服务的api,但我们面临一个大问题: - 每个服务的多个实例将在某个ip和端口下运行。 - api网关如何知道服务实例在哪里运行? - 是否有类似于负载均衡器的东西可以跟踪所有正在运行的服务?
哪种解决方案可能填补“API网关”/“负载均衡器”的职位?

enter image description here

3个回答

5
你提出的问题与Play框架并没有真正的关联,也没有单一的答案可以解决你的需求。
你可以先阅读akka的服务发现,然后根据适合你的选择进行选择。
我们正在使用akka-http构建服务,并使用akka-cluster,但使用不相关的技术来公开和运行服务。
查看以下内容:

3
您正在寻找以下组件:
1. 服务注册表: 此组件的整个目的是跟踪“哪些服务在哪些地址上运行”。这可以是一个简单的数据库,它保留所有运行服务及其实例的条目。通常编排服务负责向服务注册表注册新的服务实例。另一种选择是让实例本身通知服务注册表它们的存在。
2. 服务健康检查器: 此组件主要负责对已注册的服务实例进行定期运行时检查,并告诉服务注册表是否有任何不工作的实例。服务注册表实现可以将这些实例标记为“不活动”,直到它们被未来(如果有)的服务健康检查器发现正在工作为止。
3. 服务解析: 这是概念性组件,负责使客户端以某种方式访问运行中的服务实例。
以上所有组件被称为“服务发现”。
在您的情况下,您拥有可以充当服务发现形式的负载均衡器。
我认为,除非您需要非常先进的架构,否则负载均衡器不会经常更改,因此您的API网关可以简单地“知道”所有服务的负载均衡器的URL。因此,您不真正需要服务注册层。
现在,负载平衡器本质上提供了实例的健康检查和隔离机制。因此,您不需要额外的健康检查层。
因此,唯一缺少的部分是向负载平衡器注册实例。这部分您将根据负载均衡器及其所在生态系统来确定。
如果您处于AWS生态系统中,并且您的负载均衡器是ELB,则应在这方面解决问题。

2
根据伊万和萨维什的回答,我们进行了一些研究并发现了Netflix OSS项目。 Eureka可以用作服务定位器,与Zuul api网关集成良好。可悲的是,没有太多关于配置的文档,所以我们进一步寻找...。
我们现在最终选择了Kubernetes作为Orchestator。
  • Kubernetes知道所有正在运行的容器,因此不需要像Eureka这样的外部服务定位器。
  • Traefik是一个api网关,利用kuberentes api来发现所有正在运行的微服务实例并进行负载均衡。
  • Akka管理通过kubernetes api查找所有节点,并为我们启动集群。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接