Microservices 播放微服务-api网关和服务发现

Microservices 播放微服务-api网关和服务发现,microservices,service-discovery,api-gateway,Microservices,Service Discovery,Api Gateway,我们计划开发一些基于play框架的微服务。他们将提供RESTAPI,其中许多人将在后台使用akka集群/集群切分 我们希望有一个api网关来公开我们内部服务的api,但我们面临一个大问题: -每个服务的多个实例将在某些ip和端口下运行。 -api网关如何知道服务实例在哪里运行? -是否有像for play这样的负载平衡器可以跟踪所有正在运行的服务 哪些解决方案可能填补“API网关”/“负载平衡器”的空缺 您所问的问题实际上与play framework无关。没有一个单一的答案可以解决你的需要 你

我们计划开发一些基于play框架的微服务。他们将提供RESTAPI,其中许多人将在后台使用akka集群/集群切分

我们希望有一个api网关来公开我们内部服务的api,但我们面临一个大问题:
-每个服务的多个实例将在某些ip和端口下运行。
-api网关如何知道服务实例在哪里运行?
-是否有像for play这样的负载平衡器可以跟踪所有正在运行的服务

哪些解决方案可能填补“API网关”/“负载平衡器”的空缺


您所问的问题实际上与play framework无关。没有一个单一的答案可以解决你的需要

你可以从阅读《阿克卡》开始,然后根据更适合你的内容做出选择

我们正在使用
akka http
构建服务,并使用
akka集群
,但使用不相关的技术公开和运行服务

退房

  • 用于API网关
  • 用于基于DNS的服务发现
  • 用于运行容器,用于负载平衡

您正在寻找以下组件

  • 服务注册表:此组件的全部目的是跟踪“哪些服务在哪些地址上运行”。这可以像一个简单的数据库一样简单,该数据库保存所有正在运行的服务及其实例的条目。通常,业务流程服务负责向service Registry注册新的服务实例。另一种选择是让实例本身通知服务注册中心它们的存在

  • 服务运行状况检查器:此组件主要负责对已注册的服务实例执行定期运行时检查,并告知Service registry是否有任何实例不工作。然后,service registry实现可以将这些实例标记为“非活动”,直到服务运行状况检查器在将来(如果有)发现它们正在工作

  • 服务解决方案:这是一个概念组件,负责让客户端以某种方式访问正在运行的服务实例

  • 上述全部组件称为服务发现

    在您的情况下,您有
    负载平衡器
    ,它可以作为服务发现的一种形式

    我认为负载平衡器不会随着时间的推移发生很大变化,除非您需要非常高级的体系结构,这样您的API网关就可以简单地“知道”所有服务的负载平衡器的url。所以,您并不真正需要服务注册层

    现在,负载平衡器本质上为实例提供了健康检查和隔离机制。因此,您不需要额外的健康检查层

    因此,唯一缺少的是向负载平衡器注册实例。这一部分您必须根据负载平衡器是什么以及它们所处的生态系统来确定


    如果您生活在AWS生态系统中,并且您的负载平衡器是ELB,那么您应该在这方面进行整理。

    根据Ivan和Sarvesh的回答,我们进行了一些研究,发现了netflix OSS项目。 可以用作与api网关良好集成的服务定位器。遗憾的是,没有太多关于配置的文档,所以我们进一步研究了

    我们现在终于选择库伯内特斯为管弦乐队成员

    • Kubernetes知道所有正在运行的容器,因此不需要像Eureka这样的外部服务定位器
    • 是一个api网关,它利用kuberentes api发现所有正在运行的微服务实例并进行负载平衡
    • 通过kubernetes api查找所有节点,并为我们执行集群引导