背景
- 注册中心是日常使用频率很高的微服务组件,通过较低的资源溢价帮助客户缩短微服务的构建周期、提升可用性;
- 微服务治理实现了 0 门槛就能接入全链路灰度、无损上下线、限流降级、环境隔离、数据库治理等能力,轻松完成开源到稳定生产的跨越;
- 云原生网关则将网络入口的流量调度能力和后端的服务发现、服务治理能力相结合,从架构层面来提升全链路的性能和安全性。
这是 MSE 提供的三大核心产品能力之间的底层关联,产品研发团队保持每月至少迭代一次的投入,来持续提升产品竞争力。基于此,我们将 MSE 近期发布的重要能力做了一次汇总。
注册配置中心更新版本体系、升级产品能力
新增开发版,开发测试环境也能使用 Nacos2.0、ZooKeeper3.8 的引擎版本
MSE 最早提供的是基础版和专业版,但是哪个版本适用于生产、哪个版本适用于测试,并不显而易见,增加了客户选型的时间成本;基础版不支持 Nacos2.0、ZooKeeper3.8,使得使用开源 Nacos2.0、ZooKeeper3.8 的客户,在测试环境也必须购买价格更高的专业版。
在最新发布的版本中,MSE 取消基础版、上线开发版,并且开发版也支持 Nacos2.0、ZooKeeper3.8 ,这样一来,就降低了客户测试环境的使用成本,也屏蔽了测试、生产不同环境版本选型的干扰。
MSE Nacos 专业版新增推送轨迹功能,读写性能提升 40%+
是否能平滑迁移是客户选型商业化产品优先会考虑的条件之一。新版本中,MSE Nacos 提供了低版本到高版本、自建 Nacos 到 MSE Nacos 的平滑迁移方案,并且支持 Eureka 协议、ACM 协议。
注册中心的调用和配置变更都是高频使用功能,一旦出现异常,问题排查就成了用户最大的困惑,是注册和配置中心导致的,还是上下游业务自身的问题呢?新版本中,MSE Nacos 专业版提供可视化的数据观测界面和推送轨迹能力,从而非常清晰地观测到 Nacos 推送功能的履约情况,极大的提高问题的排查效率。
开源性能优化是开源自建的必修课,往往也是商业化服务会去精耕细作的能力。MSE Nacos 专业版基于阿里高性能 JDK Dragonwell 构建并且深度调优,并且 Nacos 本身基于企业级场景进行性能调优,使得 MSE Nacos2.0.4.0 版本性能比历史版本提升 40%+。
此外,与阿里云产品体系无缝对接,例如日志服务、服务治理、SSL 证书、观测、压测工具等,减少了云上的接入成本,支持注册中心 RAM 鉴权,整体支持管控策略配置,安全性也获得了全面提升。
MSE ZooKeeper 丰富可观测能力、多可用区部署,提高集群稳定性,读写性能大幅提升
开源 ZooKeeper 在可观测姓比较欠缺,这也导致较高的故障排查成本。MSE ZooKeeper 专业版和普罗米修斯进行了深度集成,并且可以免费使用,提供了 20 多个 Zookeeper 常用的观测指标,4 个核心资源观测指标,开放 70 多个 Metrics 指标,极大地提升了可观测性。
托管是起点、可观测是核心过程、保平安是最终目的。MSE ZooKeeper 专业版默认支持多可用区部署,获得更高的容灾级别,加强了最后一道防线。
MSE ZooKeeper 专业版基于阿里高性能 JDK Dragonwell 构建并且深度调优,读性能提升 1 倍,写性能提升 10% 以上,GC 时间降低 80%。
微服务治理升级流量治理、新增数据库治理和 Go 技术栈支持
限流降级全面升级为流量治理,全面增强弹性、依赖中间件的稳定性及流量调度的性能
当流量超过系统负载时,可以通过限流降级来保障应用稳定性。限流降级是流量治理范畴比较常见、使用范围较大的能力,但仅仅是限流降级并无法解决所有的应用稳定性问题。MSE 微服务治理基于开源 OpenSergo 的微服务治理标准,提供全方位的、无入侵的、零门槛的应用视角治理能力,将限流降级和灰度发布、无损上线等流量治理能力融合在一起,提供单机流量防护、集群流量防护和网关流量防护。
此外,升级后的流量治理可应用于微服务的全链路,比如在流量入口层,可通过网关方式接入、在微服务层面不仅可保护微服务自身,也可以保护微服务依赖的中间件、如缓存、数据库等三方依赖、若通过 ACK 或者 Agent 方式接入,则无需改造一行代码即可轻松接入,若有高阶流量治理的需求,如自定义埋点,可通过 SDK 方式接入。
发布数据库治理能力,加固端到端的稳定性
在分布式系统架构中,业务的流量都是端到端的。每个请求都会经过很多层处理,比如从入口网关再到 Web Server 再到服务之间的调用,再到服务访问缓存或 DB 等存储。对于我们的系统来说,数据库是非常重要的一块。因此无论是在稳定性的治理上,还是在开发提效等场景下,数据库相关的治理能力都是我们系统所需具备的能力。
- 慢 SQL 治理:MSE 提供了秒级的 SQL 调用监控,再根据 MSE 自动识别的 SQL 语句,可以对出现慢 SQL 的应用配置线程数维度的流控或降级规则,防止过多的慢 SQL 语句执行把资源耗尽。
- 连接池治理:MSE 通过提前建连、"坏"连接剔除、访问控制,来有效地提前识别系统中存在的风险。
- 数据库灰度:MSE 通过影子表的方式,用户可以在不需要修改任何业务代码的情况下,实现数据库层面全链路灰度。
- 动态读写分离:MSE 提供了一种动态数据流量治理的方案,可以在不需要修改任何业务代码的情况下,实现数据库的读写分离能力。
发布面向 Go 技术栈的限流降级能力
随着 Go 语言、云原生的广泛采用,Go 语言在微服务场景中使用的越来越广泛,对 Go 语言微服务的治理、限流降级需求也越来越强。在 Go 语言中,虽然社区提供了 http://go.uber.org/ratelimit 等限流库,但其一,对多语言支持不足,只支持 Go,其二,功能上,限流降级会细分为流控、隔离、熔断、热点等功能,也不支持动态配置,在功能支持度上不够完善。
MSE 结合 Sentinel,给 Go 语言、Java 语言应用带来微服务治理能力。在微服务应用中,限流降级主要分为三步:
- Target: 针对什么样的流量
- Strategy: 限流降级的策略
- FallbackAction: 触发后的行为
比如,针对订单创建接口(Target),我们限制请求为 1000QPS(Strategy),触发限流后,请求返回异常(FallbackAction)。在 MSE 支持通过开源 Sentinel 的方式来定义资源,并从 MSE 获取、应用限流降级规则,整体接入如下:
OpenSergo 全面覆盖流量路由、流控降级与容错等微服务治理领域
OpenSergo 是阿里巴巴、字节、bilibili 等企业一起共建的一套开放通用的、面向云原生服务、覆盖全链路异构化生态的微服务治理标准,并根据标准提供一系列的 API 与 SDK 实现。
OpenSergo 标准基于微服务治理中相关领域的实践与场景抽象,覆盖了服务元信息、流量治理、服务容错、数据库/缓存治理(微服务应用视角)、服务注册发现、配置治理等十几个关键领域,覆盖了完整的微服务生命周期(从开发态到测试态,到发布态,再到运行态)。无论我们是希望针对 Spring Cloud + Dubbo 服务链路配置流量灰度隔离,还是希望针对一个 Go gRPC 服务进行流量控制,还是希望针对服务访问数据库的慢 SQL 调用进行自动熔断,我们都可以利用 OpenSergo spec 中定义的 CRD 标准来进行统一配置,而无需关注各框架不同的声明式 API 及互不兼容的配置格式。
OpenSergo 项目涵盖服务元信息、服务注册发现、流量治理、服务容错、数据库治理、缓存治理等领域。在我们的首个版本 v1alpha1 版本中,社区一起发布了 服务契约(元数据)、流量路由、流控降级与容错、数据库治理 这几个领域的 CRD 标准。MSE 作为微服务治理的企业级产品,原生支持 OpenSergo 标准。
云原生网关升级产品能力,无缝融入 Kubernetes 生态、提效微服务上云
无缝兼容 Nginx Ingress 注解:迁移成本更低、功能与性能更高
MSE Ingress Controller 通过 List-Watch 机制获取关联的 ACK 集群中 Ingress 资源的变化,然后以热更新的方式动态更新 MSE 云原生网关的路由规则。当 MSE 云原生网关收到请求时,匹配 Ingress 转发规则转发请求到后端 Service 所对应的 Pod。
相比 Nginx Ingress Controller,MSE Ingress Controller 是以热更新的方式秒级生效监听到的 Ingress 资源,这种无需重启数据面即可生效配置的方式大大提高了集群入口网关的稳定性,有效保障了业务流量无损。更重要的是,MSE Ingress Controller 可以进行多集群管理,即同时作为多个集群的入口网关,意味着可以同时监听多个集群中的 Ingress 资源,解决用户跨 Kubernetes 集群流量调度和流量治理问题。
- 平滑迁移:兼容 Nginx Ingress 注解 80%+使用场景
- 架构安全:相比 Nginx Ingress 采用数据面、控制面分离部署且资源隔离,架构设计更安全
- 扩展丰富:相比 Nginx Ingress 提供更丰富的扩展注解,例如认证鉴权、Header 控制、限流、安全防护
- 性能强劲:支持 HTTPS 硬件加速,QPS 性能提升约 86%
支持 HTTP 转 Dubbo:帮助传统微服务用户快速上云
Dubbo 作为 RPC 服务对外提供服务,而 RPC 不适合直接暴露在公网上提供南北向流量的用户请求。通常情况下,公网上的流量都会走 HTTP 或 HTTPS,接收到公网流量后,由第一层的网关做协议转换,转为 Dubbo ,再由网关将 Dubbo 的请求分发给后端的 Dubbo provider。
云原生网关也对上述典型场景提供了支持。在 Envoy 侧插入了 Dubbo 的 Transcoder filter ,由它完成 HTTP 请求到 Dubbo 请求的协议转换。第一阶段,转换功能会支持 HTTP 转 Dubbo 2.X 版本,并支持从 Nacos 订阅 Dubbo 注册信息。后续将支持从 Zookeeper 订阅 Dubbo 注册信息,以及支持 HTTP 转 Dubbo 3.0。
此外,MSE 云原生网关集成 Sentinel 限流降级且支持一键压测,来快速提升高可用建设能力,安全防护能力也获得了大幅提升,通过信通院最高安全评测等级,并且支持版本自升级及业务服务的主动健康检测,以提升服务自治能力。
费芮移动:不改运维习惯、平滑迁移、构建更高性能和稳定性的下一代网关架构
MSE 云原生网关已经成为容器化过程中,升级网关架构、提升网关性能和稳定性的新选择。例如费芮互动每日处理粉丝交互超过 1 亿次, 电子券系统发放 6 亿+张电子券,4 万+门店使用费芮移动支付解决方案,支付系统每月处理 3000 万+ 笔。如此大规模的业务流量对网关接入层的性能和稳定性提出较大的挑战。
费芮的业务应用部署在阿里云容器服务 ACK 上,基于 Nginx 的 K8s Ingress 入口网关,与业务应用混布在同一集群中,对于突发流量的应对以及横向扩缩容能力有限,同时海量 C 端用户发起的 HTTPS 请求会产生大量的 TLS 加解密操作,对服务器的 CPU 造成了很大的压力,从而影响业务系统的稳定性。
另外,费芮在容器化改造后仍有一些传统的单体应用,服务之间通过域名方式调用,无法统一使用 K8s Service 进行统一管理。客户急需高性能、高可用的网关接入层,能够对南北向和东西向的流量进行统一管理,同时希望能平滑迁移存量路由配置,减少网关替换的工作量:
- 选用 MSE 云原生网关作为阿里云容器服务 ACK 的 Ingress 网关,可将 ACK 集群内服务一键导入与自动同步,并支持多个 ACK 集群复用同一个网关实例;
- 兼容 K8s Ingress 规范,且支持 Nginx Ingress 核心功能注解的无缝转换。通过 ack-mse-ingress-controller 组件,可自动监听、解析 K8s 集群中 Ingress 资源,将 ACK 中的 Ingress 路由直接同步至云原生网关中生效;
- 直连业务 Pod IP,不经过传统 Cluster IP,RT 更低;通过对 OS 内核参数与组件调优,QPS 比 Nginx 提升约 40%;利用硬件卸载 TLS 证书验证加速, HTTPS QPS 提升 80%;
- 利用 MSE 云原生网关的路由管理能力,既能实现南北向流量调度将服务对外暴露,也能支持东西向流量调度协助传统应用的服务间调用。丰富的负载均衡、限流降级、流量分发策略,可保证系统的稳定性,并满足业务快速迭代需求。
MSE 云原生网关作为托管型的独享实例,与部署业务应用的资源解耦,并支持过载保护、故障自愈、限流降级等功能,确保流量高峰时的稳定性。其优异的性能表现使费芮不需要高规格的资源配置即可支撑大规模的业务调用。灵活的路由策略使费芮可以对新老应用的服务调用进行统一的配置和管理,而对 Ingress 标准及 Nginx 常用注解的全面兼容,使费芮很低成本地完成了网关这个关键组件的迁移,且不需要改变平时的操作和运维方式。
本文为阿里云原创内容,未经允许不得转载。