美团张志桐:美团 HTTP 服务治理实践

2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,美团基础架构部技术专家张志桐在活动上做了《美团 HTTP 服务治理实践》的分享。

OpenResty x Open Talk 全国巡回沙龙是由 OpenResty 社区、又拍云发起,邀请业内资深的 OpenResty 技术专家,分享 OpenResty 实战经验,增进 OpenResty 使用者的交流与学习,推动 OpenResty 开源项目的发展。活动将陆续在深圳、北京、武汉、上海、成都、广州、杭州等城市巡回举办。

首先做下自我介绍,我叫张志桐,毕业于哈尔滨工业大学,2015 年加入美团,目前在美团主要负责 Oceanus 七层负载均衡网关、Mtrace 分布式链路跟踪系统以及 KMS 密钥管理服务等。

美团是 Nginx 的老用户,从创业初期就使用 Nginx,直到 2013 年迁到了阿里的 Tengine,再到今年三四月份,全站服务迁到了 OpenResty 上。从 Tengine 迁到 OpenResty 最根本的原因是升级困难,随着 Nginx 的版本迭代越来越快,导致 Tengine 很难合到官方 Nginx 最新版本上,但是使用 OpenResty 可以平滑地升级整个 Nginx 的社区版本。

Oceanus 美团七层负载均衡网关

Oceanus,单词的含义是海神。它是整个美团接入层的七层负载均衡网关,每天有千亿级别的调用量,部署了几千个服务站点,近万个注册应用服务。Oceanus 最核心的功能是提供 HTTP 服务治理功能,主要包括服务的注册与发现,健康检查,以及完全的可视化管理,同时也提供了像 Session 复用、动态 HTTPS、监控、日志、WAF、反爬虫、限流等网关功能。

这里补充一个限流方面的小问题,目前美团是通过全局 Redis Cluster 来实现的,也简单的做了一些优化,实现了完全基于 OpenResty 的 Redis Cluster,因为官方的 OpenResty 版本只支持单实例的 Redis 调用。同时我们不是每次请求都会去做 Redis Incr 的操作,每次会设置一个阈值,设置越大,本机加的代价就越小,因为不需要远程调用了,但出现的误差也会对应增大。基本的思路就是本地加一个步长,定期的把步长同步到 Redis Cluster 上来实现集群限流的功能。

上图是当前 Oceanus 的系统架构,底层的引擎核心是基于 OpenResty 的。在每个 OpenResty 节点上会部署了一个 Agent 的进程,主要是为了做逻辑的解耦,我们不希望整个 Nginx 或者是 OpenResty 上有过重的逻辑和请求无关,于是把很多的逻辑都下沉到 Agent 上,实现与 OpenResty 的解耦,比如用 MNS 拉取服务列表,再通过 Agent 灌入到 OpenResty。站点管理,落地文件配置,统一由前端管理平台 Tethys 进行管理,之后会实时落地到 mysql 里,Agent 通过 mysql 的同步,再落地到本地到 Server block 文件,通过 reload 方式实现站点的重新加载。右边是 Oceanus 体系之外的模块,第一个是 MNS,是公司内部统一的命名服务。另一个 Scanner,主要负责的是健康检查。

Nginx 配置反向代理

如上图配置 Nginx 反向代理会遇到几个问题:

  • 写死的服务地址,IP 不能变,每次变更需要改文件。
  • 每次变化需要 reload。
  • 文件化的配置容易出问题。

我们怎么解决这三个问题?第一个动态的服务注册,第二个是不需要 reload 动态配置生效,第三

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值