一、微服务落地与挑战
CSDN今年发布的中国开发者报告显示,有 40% 的云原生开发者专注于微服务领域,其中有不少开发者非常关注服务编排、服务治理,这也符合阿里云典型用户上云过程的特点。
云上部署作为第一阶段,主要解决的是如何将 IDC 内传统应用平滑迁移至云上。此阶段一般关注计算资源,应用往往不会做任何修改。用户上云以后,为了能够更好地利用云上强大的调度、弹性、容错能力,会进行云原生化改造,将原先虚机的部署方式转为容器化部署。
随着业务发展,传统单体应用已经无法满足业务需求。用户需要进行微服务化改造,进一步提升开发迭代的效率。但随着微服数量越来越多,调用链路越发复杂,用户需要进入第四阶段:服务治理。从开发联调到上线发布,从流量管控到错误故障排查,进行全方位的服务治理,进一步提升效率、稳定和安全性。
众所周知,微服务并不是银弹,从微服务的开发、测试到运行,用户会面临各种问题和挑战。在开发阶段,如果微服务没有很好地进行拆分,所带来的问题可能会超过微服务架构本身带来的红利。开发人员需要非常规范的 API接口以及统一的配置管理才能提高开发迭代效率。而微服务之间的调用链路非常复杂,会带来很多不确定因素,排查故障也愈发困难。因此,我们需要有可靠的微服务组件以及专业的治理能力来提高整个系统的性能和稳定性,并且需要为用户建立可观测以及故障排查能力。
通过服务集团内部项目以及外部商业化客户,阿里针对此类挑战积累了大量丰富的经验,同时也开源了比如Dubbo、SpringCloudAlibaba、Nacos、Sentinel、Arthas等优秀的开源项目。
二、微服务引擎 MSE 3.0 发布
微服务引擎 MSE正是结合了阿里云微服务开源项目、商业化方案以及双 11 大规模落地的最佳实践,提供了面向业界主流的开源微服务生态一站式平台,包含了云原生网关、注册配置中心和微服治理三大能力。
用户可以自由选择一个或多个能力,并与其他云产品结合构建自己的微服架构。业务应用无论是部署在 ECS 还是容器服务上,或是托管在EDAS、SAE等PaaS平台上,都可以使用云原生网关作为统一的服务出口。再利用监控服务、日志服务等可观测组件,获取从网关入口到业务应用的全链路可观测数据。注册配置中心解决了微服务间同步调用的注册发现以及配置管理的需求。异步逻辑通过消息队列实现。微服务治理,则支持了 SpringCloud 、Dubbo 近五年的版本,用户无需修改任何一行业务代码,即可获得全链路的流量控制能力,提升微服务系统的稳定性和安全性。
2020年初,阿里云发布了MSE商业化服务。1.0 版本提供了注册中心,主要解决服务间的注册发现以及通信问题,帮助用户快速构建应用。2.0版本新增了配置中心以及服务治理的基本功能,比如服务查询以及无损下线,帮助用户快速提升开发、运维效率,落地企业级能力。
今年,阿里云推出了 MSE3.0,包括云原生网关以及全新的服务治理中心。注册配置中心也全面升级,让用户享受到云原生时代下微服务的最佳实践。
注册配置中心提供了 Nacos以及ZooKeeper 的商业化托管服务,并且兼容Eureka协议。在微服务场景下,除了服务的注册发现,Nacos还能集中管理分布式架构的环境配置信息,降低用户的管理配置成本。也有很多用户使用ZooKeeper托管服务,在大数据场景下比如HBase 、Kafka、Hadoop、Flink集群中,使用专业的ZooKeeper组件实现稳定、高性能的分布式协调、分布式锁。
全新的注册配置中心基于阿里巴巴DragonWell 构建,且进行了深度调优,性能较开源自建提升 40% 以上。可观测方面,我们开放了 70 多个资源和业务监控指标,让用户对整个系统的运行了如指掌,且可与用户自建 Grafana 大盘进行对接,并且提供服务推送以及配置变更推送的轨迹查询能力。如果用户遇到了服务发现或配置变更没有生效等问题,可以通过白屏化的方式快速进行问题排查,提升效率。
另外,在日常运维中,很多用户在实例的容量、节点配置以及客户端、服务端版本方面均存在不少问题。最新推出的健康自检功能能够对风险点进行自动评估,并将优化建议推送给用户,使用户的实例处于健康状态。
MSE3.0提供了全新的白屏化迁移工具,使 Nacos、Eureka和ZooKeeper一键热迁移至托管实例,整个过程无需停机,避免对业务应用造成影响。
MSE3.0推出的云原生网关,兼容了 K8s ingress 标准,将负责南北向路由的流量网关、东西向调度的微服网关以及安全网关三合一。集成了 13 种阿里云产品,包括数字证书服务、web应用防火墙、AHAS流量防护、IDaaS、SLS、ARMS等,从安全、高可用、可观测方面提供了全方位的能力。支持8种服务来源,无论是容器服务上的 service ,还是注册在Nacos、ZooKeeper 上的微服务,亦或是托管在EDAS、SAE上的各种应用,甚至是传统通过固定地址暴露的服务,都可以一键导入至云原生网关中做统一管理,非常适合各种应用架构、部署方式并存的场景。
性能方面,云原生网关经过了阿里双 11 高流量洪峰的检验,可以轻松应对数十万笔/秒的交易,相比于自建 NGINX Ingress的 TPS 高出90%,相比于微服网关 ZUUL高出400%。通过硬件加速能力,HTTPS请求的RT会进一步下降50%。
通过插件市场的机制,用户可以做多语言扩展,满足用户在安全、流量管控以及请求响应方面的个性化需求。而且插件的更新以及安全路由策略的更新均毫秒级生效,对业务应用无感。
目前在阿里云 EDAS以及容器服务 ACK 控制台上, ingress 入口选型中已经提供了 MSE 云原生网关的选择。需要特别提出的是,云生网关兼容Nginx ingress 核心注解,用户已有的Nginx ingress 路由规则无需更改,云原生网关可以自动监听,并在网关侧生效,实现几乎零成本的平滑迁移。
我们的客户费芮互动原来使用的 Nginx ingress 与业务应用混部,有稳定性问题,而且缺少TLS版本设置、IP黑名单等功能,通过上述平滑迁移方式更换成云原生网,关完美解决了这些问题,高效支撑了大规模业务。
微服务规模发展到一定阶段,用户会出现服务治理的需求。但相关技术实现较复杂,是困扰开发和运维同学的难题。
以变更发布为例,很多IT 从业者都会有熬夜做新版本上线发布的经历。这种方式一方面对开发运维人员的工作带来了极大不便,另一方面也无法满足业务快速迭代的需求。CNDN 的报告也显示,有 44% 用户需要做不定时发布,更有甚者一周需要做上百次发布。如此频繁发布下前提下,应用启停会对线上流量造成巨大影响,另外如果新版本有 bug 引发大面积生产故障也是灾难性的事故。
而微服务治理无损上下线和全链路灰度可以完美解决上述问题。阿里在微服务治理方面积累了近十年的经验,我们将微服务治理能力产品化,产品基于 Java agent 且全面兼容开源,拥抱 K8s 。用户无需修改业务代码,也无需担心被厂商锁定,只需在 K8S 集群中安装组件,就可以针对命名空间或应用开启治理。
微服务治理覆盖了微服务开发、测试到运行的整个生命周期,提供了数十种功能。技术同学无需再花费大量精力自己实现相关功能,帮助开发测试提效50%,微服落地周期降低30%。
三、利用 MSE 落地微服务最佳实践
生产环境的绝大多数故障来自于变更发布,阿里提出的安全生产三板斧包括可灰度、可观测、可回滚,首要是可灰度。在微服务数量众多的情况下,如果为每一个新版本都构建一套独立的灰度环境,需要付出巨大的运维成本和资源成本。而现在,通过 MSE的全链路灰度能力,只用部署一套稳定的基线环境,再针对有新版本的服务,额外部署对应的实例节点并进行打标,同时对灰度流量进行特征规则设置。灰度流量经由云原生网关可以动态路由至对应版本的实例节点,并向下传递。如果没有新版本,则选择基线环境,再往后传递,最终形成了一条一条逻辑隔离的流量泳道。该方案支持了多种网关,SpringCloud、Dubbo微服务框架,以及RocketMQ 和数据库组件,用户能够快速低成本地验证自己的新版本,消除 80% 以上的变更风险。来电科技使用 MSE构建了全链路灰度能力,大幅提高了发布效率和稳定性,降低了运维成本。
除了线上灰度发布,流量治理也可以拓展至开发环境隔离的场景。在微服务开发环节,feature 变更点可能分散在不同的微服务应用,涉及不同的开发团队,多个 feature 可能同时进行开发测试,所以需要非常好地进行协同,又不互相干扰。最简单的办法是为每个feature提供一套独立的物理资源,但成本过高。
与全链路灰度发布同理,在开发测试环境中只用部署一套稳定的基线环境,再单独部署各 feature需要改动的应用。通过打标及流量特征设置,让不同流量能够在不同 feature 环境和基线环境中正确地流转。对于开发人员而言,这与独立环境的效果相差无几。
致景科技正是利用云原生网关和微服务治理构建开发测试环境,将构建周期从天级降至分钟级,开发测试的资源使用量降低80%,实现了其数智化综合服务平台的快速迭代。
稳定性治理方面, MSE覆盖了从云原生网关到应用层、缓存、数据库以及第三方依赖的全方位高可用防护。比如通过服务预热以及无损上线,对于新启动的应用节点,可以实现流量渐进递增,避免了应用在启动时因为来不及初始化被大流量击垮。通过无损下线的主动通知能力,使得服务提供方停止时不会再被调用,防止流量受损。
在大流量场景下,通过网关层的粗粒度规则设置以及应用层接口级细粒度的防护规则,可以进行整体的流量防护。对于慢 SQL 以及不稳定的第三方应用,可以快速识别隔离,避免 DB 连接池打满、线程资源无法释放等各种问题。
万师傅和云货优选使用 MSE的无损上下线以及流量防护能力,实现了应用发布以及扩缩容时流量无损,大促业务高峰期保证系统的稳定性。
零信任安全也是现在企业越发关注的问题。MSE在原生网关入口层面,支持了从入口以及出口后端的 TLS 双向认证。在认证鉴权上,除了JWT、OIDC等标准认证服务,也支持用户自定义鉴权,且集成了 IDaaS,可支持第三方认证机制。对于恶意流量,云原生网关集成了阿里云web应用防火墙,可以实现路由级别细粒度的安全防护。通过插件市场,可以选用数十种安全插件或自定义插件进行能力扩展。
在应用层,用户可以在微服务治理中心配置服务间的调用策略,进一步降低应用内部的安全风险。注册配置中心支持 RAM 鉴权以及基于 KMS 的配置加密,可以防止应用实例信息、配置信息等敏感数据被恶意篡改和访问。
四、拥抱开源 贡献开源
MSE产品全面拥抱开源,近期重磅发布了两个开源新项目OpernSergo和Higress。
在微服务治理领域,各家企业更多的是在落地解决一个又一个的问题,而最终能够实现的能力和边界,业界并没有统一的标准,这也使得开发人员在沟通和理解上存在一定的成本。而且,微服务领域存在很多组件以及开源框架,不同框架的配置和规则下发逻辑不兼容,导致各种组件和框架无法进行统一治理和协调。
OpenSergo 旨在提供一套开放通用、面向云原生服务、覆盖微服务上下游组件的治理标准与实现。
在控制面,用户可以通过 CRD 方式查询更新服务治理的配置,并下发管控规则至数据面。OpenSergo Spec规定了控制面和数据面的通信约定,确保用户使用一种 Spec 即可描述不同框架、不同协议、不同语言的微服务架构。在数据面,无论用户是通过 SDK 、Java agent 还是Sidecar的方式接入OpenSergo,都可以正确接收到控制面下发的治理规则,进而应用在自己的业务流量中,最终实现异构微服务之间的相互通信以及统一治理。
阿里已经联合了字节、B 站等多家企业、多个社区一起合作,共同建立开放标准,计划覆盖网关、服务框架、消息、数据库、缓存等更多开源组件。我们也欢迎更多微服务领域的开源方加入我们,丰富OpenSergo的覆盖范围,帮助更多企业落地微服治理。
本次云栖大会也重磅开源了云原生网关 Higress 。
Higress从阿里内部孵化、开发,到电商交易等核心场景进行大规模生产验证,到MSE进行商业化,至今已有两年半的历程。Higress以开源 Istio和 Envoy为核心,除了兼容 K8s ingress ,也遵循了社区正在推进的新一代 Gateway API ,可以通过 K8S CRD 方式管理实例的生命周期,进行规则以及策略的配置和更新,也支持OpenKruise Roolout灰度发布。
Higress将流量网关 + 微服务网关 + 安全网关三合一,能够极大的降低网关的部署及运维成本。通过支持开源注册中心,限流降级,以及监控组件,它可以统一订阅广泛的服务来源,并提供完善的大流量防护和可观测能力。Higress的插件市场,提供丰富的默认插件,包括WAF防护、认证鉴权、协议转换等,方便用户在安全、服务管理等方面进行扩展。除了Wasm、Lua插件,它还将支持进程外插件扩展机制,让用户可以用自己熟悉的语言编写插件。很多开源网关做配置变更,需要reload 引起流量抖动。Higress的路由、安全规则,WASM 插件都支持热更新,规则变更毫秒级生效且业务无感知。
上述所有特点均经过生产验证,让Higress有了很好的起点。也欢迎感兴趣的小伙伴加入我们,一起将Higress不断迭代演进。最后,也希望通过MSE产品的持续演进,微服务开源项目的社区共建,以及用户们的支持和参与,将互联网应用架构推向新的阶段。