数字化时代带来了大规模的软件生产需求,企业原有的开发模式受到冲击,云原生技术及理念其革新软件生产模式的优势获得了广泛的关注与认同。作为一套复杂的技术体系,云原生包含了容器、微服务、服务网格、不可变基础设施和声明式API等众多核心元素,实践挑战重重,不同企业探索进展相差较大。
为推动云原生软件生产力普惠化,促进行业数字化创新发展,“升级!数字化转型下的架构实践”网易数帆技术线上沙龙于近日举办,来自网易数帆的三位资深技术专家,结合网易及其服务外部企业的实践经验,提出了“垂直构架,水平推进”的云原生架构演进策略,并就智能网格管理、网络数据面加速等针对落地痛点的核心技术创新做了重点诠释。这两项技术也采用开源路线,是当前云原生开源技术生态的有益补充。
网易数帆轻舟事业部资深架构师王翦从云原生理念出发,以容器化、微服务、服务网格等多个角度剖析企业核心系统架构升级面临的问题、核心关注点。他介绍,想要获得核心系统云原生化带来的性能、响应速度、规模支持、简化运维、提高效率和资源利用率等好处,企业需要克服各种技术挑战,仅仅服务网格,就涉及到了Istio/Envoy等新技术体系掌控,易落地性,大规模集群性能稳定性支撑,以及引入Sidecar带来的质量、排障、运维保障、运行时分发等支撑体系构建等众多难题。
在网易及外部客户核心业务云原生化的实践中,轻舟团队已形成完整的策略来应对这些挑战。王翦基于基于架构维度和业务维度的洞察,提出了一个两位一体的演进路线:垂直构架,各层击破;水平推进,平滑稳定。“垂直构架,各层击破”即从容器基础设施、微服务框架到服务网格的层次逐步解决,除了核心框架的研发,还要考虑一系列配套工具的建设,以保障系统落地,由架构团队实施。事实上,这也是网易轻舟云原生软件生产力平台不断迭代的历程:先解决CICD和Kubernetes平台能力,再引入微服务框架、API网关解决治理等问题,最后引入服务网格,同时也构建日志、监控、告警、事件等平台来保障这三层稳定运行。
“水平推进,平滑稳定”即从存量服务到混合模式再到完全云原生化的过程,包括微服务的拆分,容器化的改造,一定要平滑稳定,其间每一步都涉及周边改造,有各种要点和规范需要遵循。王翦认为,容器层面,要持续构建高效、稳定的容器接入基建和平台,将云原生容器化带来的红利最大化。微服务层面,要简化微服务基建在业务中的作用,使之更为轻量,主体逻辑均逐步下沉到服务网格。服务网格层面,要持续承载更多原生通用能力的建设,具备更加稳定、灵活的“云”组件能力。
Istio的接口扩展性和易用性是横亘在生产落地前的两道门槛,Istio社区成员、Istio社区成员,网易数帆轻舟事业部架构师于禁表示,要跨越这两道门槛,可在Istio之上在构建一层智能管理器,既可以将一些复杂的IstioCR转换为便于管理的新接口,使运维管理更为高效;也可以结合监控信息自动调整IstioCR,使流量管理更为智能。
类比服务运维将IstioCR运维也分为3个阶段。如果把istio的CRD看作BasicConfig,智能管理器就是针对IstioCR的AutoPilot。Slime组件的提出,正是对这一角色的一次尝试。
基于以上想法,Slime架构设计为slime-boot、slime-controller、slime-metric和slime-builder四大块。其中slime-boot是部署slime-module的operator组件;slime-controller是slime-module的核心线程,负责将SlimeCRD转换为IstioCRD;slime-metric是slime-module的监控获取线程,用于感知服务状态,slime-controller会根据服务状态动态调整服务治理规则;slime-builder尚在计划中,后文再谈。
Slime已开放配置懒加载、HTTP插件管理和自适应限流等三个模块。以配置懒加载为例,于禁表示,破局思路是根据拓扑图自动生成配置依赖信息,但是拓扑的生成依赖一次成功调用,如何在缺乏服务发现信息时依然能调用成功时实现配置懒加载的关键。Slime引入另一个global-sidecar(拥有全量的配置和服务发现信息),服务首次调用时会通过兜底路由访问global-sidecar,由global-sidecar代理到被调用服务,同时依赖信息被上报并生成新的SidecarScope,实现配置懒加载。
对于服务网格的流量管理,于禁认为,Istio的CRD本质是一套定义流量行为的规则,但基于监控制定治理策略动态调整服务规则是一条更为高效的道路。Slime旨在通过治理策略的抽象降低人为感知服务状态的运维负担,减少人为判断服务状态的错误率,服务异常发生时的治理规则响应也能更为及时。
此外,由于IstioCR无法满足不同的流量治理场景的特定需求,于禁表示,Slime团队将在V0.2版本中推出slime-module的代码生成工具slime-builder,以便Istio使用者快速编写出能够实现动态服务治理的slime-module。
网易数帆轻舟事业部系统开发专家虎啸分析并诊断了微服务及服务网格的网络数据面全链路,介绍了网易轻舟微服务网络数据面优化实践,以及轻舟微服务网络数据面加速开源项目MeshEngine。他表示,服务网格实践中,Sidecar的引入使得整个通信路径拉长,且通信路径上通常要经过多次内核协议栈,这将带来时延的大幅增加,严重影响微服务业务的性能。不过,物理网络、虚拟网络、容器网络的时延,并不是服务网格化引入的,这也意味着巨大的优化空间。
在网易轻舟的实践中,容器网络层采用用户态OVS+VF加速,充分利用VF二层交换的能力,结合DPDK技术加速。主机网络则采用eBPF加速和用户态协议栈优化多管齐下的方式。采用eBPF加速Service和Sidecar之间的通信路径,基于Sockmap和sk redirect技术,绕过内核协议栈。用户态协议栈优化,整个方案基于SR-IOV容器网络方案,用户态协议栈独立部署到VPP进程解放Envoy的CPU,VCL库通过LD_PRELOAD劫持socket调用做到无侵入,Service容器则基于原有内核协议栈,不做改动。
网易轻舟的技术积累也催生了一个名为MeshEngine的微服务网络数据面加速项目,MeshEngine支持两种加速方式:
虎啸最后透露,MeshEngine即将开源,先支持独立加速方式,再支持绑定加速方式,后续还需开放更多功能。他表示,MeshEngine将使得集群内服务间访问时延降低1倍。