代码之家  ›  专栏  ›  技术社区  ›  Michael

AWS ALB后微服务(ISH)设置中的健康检查路线组织

  •  0
  • Michael  · 技术社区  · 6 年前

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

    我要把我的api和数据库移到aws。在移动之前,我将monolith rest api分为四个服务:

    1. 公共api(应用程序和网站连接到的api)
    2. 管理API(用于管理网站)
    3. 消息传递API(用于与应用程序实时通信的Web套接字服务器)
    4. 工作线程(基于队列的任务处理器)

    我现在正试图找出一个好的路线组织。首先创建了两个子域名api.mydomain.com和www.mydomain.com。

    我将api子域定向到我的alb,alb仅基于路径路由通信,如下所示:

    • “/sockets”->消息传递API
    • “/admin”->管理API
    • “/”->公共API

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

    可能的解决方案:

    1。通过子域分离服务

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

    有了这个设置,我可以在每个服务中拥有a/health而不会发生冲突。

    2。通过命名分离健康检查路径

    我可以为每个服务分别命名健康检查路径,例如:

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

    建议?

    上述两个解决方案似乎都可行,但我想知道,如果其中一个解决方案稍后会咬我,例如,何时添加更多服务,或何时稍后添加GraphQLAPI。

    编辑:

    我刚碰到一个问题,解决方案是1。我的本地 dev environyment设置为 小精灵 每个服务和 恩吉克斯 用于路由请求。除此之外我还用 恩格罗克 能够 从Internet访问开发环境。

    我认为很难解决基于 子域,但我真的不需要dev中的/health路由 环境,所以我想我可以假装他们不在那里。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Michael    6 年前

    作为文档回答我自己的问题,并可能向其他人提供一些输入。

    DR: 我使用了第三个选项,通过路径中的第一个级别分离所有服务。与以前的结构不同的是,我的主api(也称为public api)已经从根目录移动到名为 应用程序 . 我还把它改名为 应用编程接口 .

    • api.mydomain.com网站/ 应用程序
    • api.mydomain.com网站/ 管理员
    • api.mydomain.com网站/ 插座
    • api.mydomain.com网站/ 奥思
    • www.mydomain.com/。

    这个解决方案给了我几个优点而没有缺点(我想)。

    赞成的意见:

    • 通过nginx在alb和本地开发环境中轻松地路由请求,而无需sni所需的额外工作
    • 子域很清楚地将api与web站点分开
    • /默认情况下,运行状况路由具有唯一的名称,因为它们位于不同的路径下。
    • 这些应用程序(web和智能手机)可以使用一个公共的api url(api.mydomain.com/),仍然可以访问所有服务,即它们不需要存储几个不同初始化的axios连接。没什么大不了的,但是……

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

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

    向上的 =响应请求, 准备好的 =所有依赖项都已连接(即数据库等)

    • 健康 返回状态200和一个描述就绪状态的json对象。

    • /健康/起来了 以200或无响应(即根本无法到达)

    • /健康/准备好了 如果所有依赖项都准备好了,则使用200响应,否则为500。

    aws中的目标群体将使用/i s ready进行健康检查,但现在它与/is up是一样的,因为我还没有实现准备测试。

    推荐文章