美洽是一家全球智能云客服服务商,提供一站式智能客服解决方案,旗下拥有在线客服、工单系统、呼叫中心、客服机器人、语音机器人、营销机器人等产品及服务。美洽成立于 2014 年,总部位于成都,目前服务企业用户已超过 40 万家,覆盖多个行业领域。美洽的客服系统支持多平台使用,包括 Web 网页端、手机客户端、PC 客户端,同时美洽也提供了开放 API 平台。
需求背景
[ol]
[/ol]
历史架构的流量拓扑图如下:
需求目标
[ol]
[/ol]
方案横向对比
通过对目前市面上流行的网关产品进行详细的横向对比,再结合美洽对统一网关的需求目标,我们从对比的表格当中,看到了 Higress 所带来的最佳对比结果。
同时美洽重点关注的几个点:K8S Ingress 支持、WebSocket 支持、Nacos 服务发现、路由配置热更新、WASM 插件都得到了很好的支持。
为什么选择 Higress
面向多云架构友好
Higress 在阿里云上有成熟的企业版产品:MSE 云原生网关,我们从 2021 年开始使用这款产品,这是一款全托管,完全免运维的 SaaS 网关产品,并且具备强劲的性能和丰富的功能,相比自建同吞吐的网关,整体成本是更低的,因此我们在阿里云上直接使用了这款产品。
美洽除了阿里云,在其他云上也有部署业务,我们希望能统一多云的统一网关技术架构,开源版 Higress 正好符合我们的需求,相比商业版,在控制台功能上,开源版目前的能力相对较少,但大部分功能也都可以通过自己定义 K8s CRD 配置的方式来实现,完全满足我们的需求。
原生支持 K8s Ingress
美洽从 2021 年便已经全面迁移到 Kubernetes 进行资源调度,遇到最大的困难是历史的网关中间件,在容器化的架构里面,各种水土不服,要么需要借助 Nginx-Ingress-Controller ,要么需要外部的 SLB 进行服务之间的负载均衡与网络通信。这导致了比容器化之前更加复杂的流量路径,一度让我们下定决心,必须、必须、必须要解决统一网关的问题,还必须云原生的。
2021 年底开始,我们开始尝试使用阿里云 MSE 网关 SaaS 产品,开始将部分服务从 Nginx 路由迁移到 MSE 网关上,很快解决了 Ngxin Configuration 配置维护复杂,故障频发的问题,尝到甜头后,我们便开始计划进一步扩大 MSE 网关的使用,结合 Nacos 和 K8S 的服务发现,将 80% 大部分容器化服务路由转发全部迁移到了云原生网关上。
这带来的收益就包括:
[ol]
[/ol]
控制面和数据面解耦的架构
控制面和数据面解耦是一种很好的设计模式,把管理控制逻辑和运行处理逻辑分开,这样可以更好地管理和扩展系统。
[ol]
[/ol]
在美洽客服自己的产品中,也大量试用了控制面和数据面分离的这种架构设计模式,在选择 Higress 统一网关的落地实践中,也更好的可以和美洽产品的架构进行配合,例如控制台采用微前端技术统一美洽运维控制台,Higress 控制台,Nacos 控制台。
容易上手的后台 Dashboard
在早期,美洽在 2021 年开始使用阿里云 MSE 云原生网关时,就已经对网关的控制台使用有了很多的经验基础,团队中 QA 同学也能熟练使用了。目前在其他云上的项目,私有化部署的开源版 Higress ,在控制台方面功能与操作和阿里云 MSE 产品的交互保持一致,团队使用很快便上手了。
插件方面,美洽使用了 JWT Auth 鉴权,Key Rate Limit 限流,HMAC Auth 请求签名,Bot Detect 和 WAF 功能有涉及。
美洽的落地实践
采用 Helm 在 K8s node 上 一键部署
helm repo add higress.io
helm install higress higress.io/higress -n higress-system --create-namespace
完全替代了 Nginx 、OpenResty 、Caddy 、SLB-Intranet
彻底解决 WebSocket 断线重连问题
美洽的智能客服产品侧试用了 WebSocket 进行长连接保持和消息通信,所以非常依赖网络的稳定,以及更新网关配置所带来的副作用。在使用 Nginx + OpenResty 方案的期间,每一次的配置变更都会带来极大的代价,断线重连风暴时常发生。一次配置变更 Pendding 或者变更失败带来的瞬时断联是及其痛苦的。
在迁移到 Higress 上之后,路由配置热更新特性,不在需要像 Nginx 一样需要 Reload Gateway ,解决配置更新 reload 带来的断线重连风暴问题。
另外,在 WebSocket Server 服务升级过程中,通过给 Pod 打上 stage 标签,在 Higress 侧通过标签路由进行新老版本无损流量切换,给产品快速迭代升级带了巨大的杠杆效应。
熔断限流
在面向 2B 的 SaaS 产品业务场景中,经常会发生某一个客户突发海量流量,占据大量带宽,影响其他客户正常使用的情况,这时我们需要针对客户规模对单个客户的 API 并发上限做灵活的动态限流,使用 Higress 的插件 Key Rate Limit 就很好的解决了这个问题,根据流量大盘随时调整限流水位红线,做到精准,灵活的限流。
经验总结
Higress 网关的落地,给企业全面落地云原生微服务架构提供强有力的支持,对我们技术人员来说,这绝对是一个杠杆级别的开源产品,另外,在阿里云上又有对等的 SaaS 产品,这样的配合,将公有云和私有化部署的统一网关一次性全部解决,对企业来说是绝对的利好。
[ol]
[/ol]
最后,我们祝愿 Higress 在云原生的道路上越走越远,大家一起用开源、开放、分享的心态将 Higress 建设地越来越好。
Higress 社区
GitHub: https://github.com/alibaba/higress
Higress 社区交流群: