AWS ALB背后的微服务(ish)设置中的运行状况检查路由组织

时间:2018-06-06 19:51:27

标签: rest amazon-web-services aws-load-balancer

如何在ALB后面的几个服务中命名健康检查路径?

我正在将我的API和数据库移至AWS。在移动之前,我将我的monolith REST API分成四个服务:

  1. 公共API(应用和网站连接)
  2. 管理员API(适用于管理员网站)
  3. 消息传递API(用于与应用程序实时通信的Web套接字服务器)
  4. workers(基于队列的任务处理器)
  5. 我现在正试图找出一条良好的路线组织。最初创建了两个子域,api.mydomain.com和www.mydomain.com。

    我将api子域指向我的ALB,它只基于路径路由流量,如下所示:

    • “/套接字” - >消息传递API
    • “/ admin” - >管理员-API
    • “/” - >公共API

    现在我正在尝试实施健康检查路线。我想把它们命名为“/ health”。但健康检查需要针对每个目标群体。由于ALB仅基于我不能在多个服务器上具有/ health的路径进行路由。

    可能的解决方案:

    1。通过子域分隔服务

    我可以为每个服务创建一个子域,例如: - api.mydomain.com - sockets.mydomain.com - admin.mydomain.com

    通过这种设置,我可以在每项服务中保持健康状态而不会发生冲突。

    2。通过命名

    分隔健康检查路线

    我可以为每项服务命名健康检查路线,例如:

    • api.mydomain.com/health-public-api
    • api.mydomain.com/health-messaging-api
    • api.mydomain.com/health-admin-api

    建议?

    上述两种解决方案似乎都可行,但我想知道其中一种解决方案是否会在以后引起我的兴趣,例如添加更多服务,或者稍后我会添加graphQL API。

      

    修改

         

    我刚刚在解决方案#1中遇到了一个缺点。我的当地人   dev-enviromnemt设置了每个服务的 docker 映像    nginx 用于路由请求。除此之外,我还可以使用 ngrok   从互联网到达开发环境。

         

    我认为基于此解决服务分离很难   子域名,但我真的不需要开发中的/ health路由   enviromnent,所以我想我可以假装他们不在那里。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题作为文档,可能还有其他人的意见。

TL; DR: 我选择了第三个选项,通过路径中的第一级分隔所有服务。与我之前的结构的主要区别在于我的主api(aka public-api)已从根目录移动到名为 / app 的子路径。我还将其重命名为 app-api

  • api.mydomain.com/的应用 / ..
  • api.mydomain.com/的管理 / ..
  • api.mydomain.com/的插座 / ..
  • api.mydomain.com/的 AUTH / ..
  • www.mydomain.com /..

这个解决方案给了我一些优点,没有缺点(我认为)。

优点:

  • 通过nginx轻松在ALB和本地开发环境中路由请求,无需SNI所需的额外工作
  • 子域名非常清楚地将api与网站分开
  • / health routes默认情况下会获得唯一的名称,因为它们位于不同的路径下。
  • 应用程序(网络和智能手机)可以使用公共API(api.mydomain.com/)并仍然可以访问所有服务,即他们不需要存储多个不同的初始化Axios连接。没什么大不了的,但还是..

我还选择了使/健康更具前瞻性,并在每项服务中对以下结构进行标准化。

  • api.mydomain.com/servicename/health
  • api.mydomain.com/servicename/health/is-up
  • api.mydomain.com/servicename/health/is-ready

up =响应请求,就绪 =所有依赖关系都已连接(即数据库等)

  • / health 返回状态200以及描述准备就绪的json对象。

  • / health / is-up 以200或无响应(即根本无法访问)回复

  • 如果所有依赖项都准备就绪,则
  • / health / is-ready 以200响应,否则为500.

AWS中的目标群体将使用/准备进行健康检查,但是现在它与/ is-up是一样的,因为我尚未实施准备测试。