Skip to content

现状

不同的web服务都配套了一个nginx直接向用户提供服务,有一些问题

  • 服务运行的环境必须开放外网访问
  • 接入层杂乱,不容易定位问题,日志收集
  • 每个服务的接入都是单点,不利于扩展

目标

将nginx配置统一起来,单独运维一个接入层服务,方便管理。 该服务是无状态的,做到双节点备份。

架构

基于marathon来做运维,如图:

图片描述

  • marathon-lb 主要负责服务发现,其它小业务的分流,权限过滤等等。在完整的微服务架构中,marathon-lb直接路由到不同的服务web接口上。
  • nginx 负责集中化的URL配置处理,跟业务紧密联系的配置在这一层处理。nginx实例可以约束在指定资源类型的主机上运行,并且保持多台实例(对于无状态服务,marathon可以非常容易做伸缩)
  • 最后面的service代表现在运行的真实web服务,比如uwsgi, node等等

方法及实施过程

  1. 收集各个web服务上的配置,放在gm_deploy中,做好docker镜像的构建脚本
  2. 在marathon上配置nginx实例并启动
  3. 配置host,使用lb的ip 进行测试
  4. 修改DNS,同时将业务地址解析到腾讯云lb
  5. 测试观察一段时间
  6. 稳定之后关闭service相应主机的外网(使用防火墙处理)

nginx的配置更新及发布流程 TODO

灾难处理

  • marathon集群挂掉后如何恢复? TODO

FAQ

  • 为什么这样处理? 逐步打造自动化运维工具,无状态服务可以实现快速伸缩