基于开源体系的云原生微服务治理实践与探索

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 2020 年,公司正式开始探索落地 Service Mesh 项目。目前,相关产品已经在生产环节正式落地,正在进行接入推广工作。

作者:董艺荃|携程服务框架负责人


携程微服务产品的发展历程


1.png


携程微服务产品起步于 2013 年。最初,公司基于开源项目 ServiceStack 进行二次开发,推出 .Net 平台下的微服务框架 CServiceStack。


2014 年,公司推出 Java 平台下同 CServiceStack 完全互通的自研微服务框架 Baiji 和第一代服务注册中心。该服务注册中心后续经历多次重构,目前使用的已是第四代产品。


2017 年,公司正式引进开源产品 Dubbo,推出整合携程治理能力的 CDubbo 框架。该框架最初基于 Dubbo 2.5.4 版本进行二次开发,经历多次版本升级后,目前使用 Dubbo 2.7.7 版本。


2020 年,公司正式开始探索落地 Service Mesh 项目。目前,相关产品已经在生产环节正式落地,正在进行接入推广工作。


2.png


携程微服务产品情况复杂,主要在于以下四点。


第一,线上同时运行着三种微服务框架产品。


第二,同时采用 HTTP 和 Dubbo 两种通信协议。


第三,采用完全自研的基础设施,包括注册中心和配置中心。


第四,现存 8000 多个线上服务,实例数超过 10 万个。


3.png


随着研发的深入,我们团队主要遇到了以下三点问题。


第一,维护多个功能类似的中间件产品工作量较大,保证产品之间功能对齐需要花费大量的精力。


第二,由于产品以 SDK 公共依赖包的形式集成在业务应用内,进行版本升级需要业务方配合,推动升级比较困难,版本长尾问题严重。


第三,由于团队工作精力和技术栈的限制,只有少数几个语言平台上存在 SDK 支持,不利于小众语言用户使用微服务产品。


携程的云原生微服务架构设计


4.png

由于线上集群已初具规模,如何平滑过度和迁移框架成为关键问题。彻底抛弃现有基础设施,一步到位实现全面云原生,不仅实施难度较大,项目周期也比较长。


因此,项目决定采用“小步快走”的方式。首先保证代码完全向后兼容,其次保证整体架构支持业务应用迁移,提升接入容错率。


5.png


项目进行架构设计时,遇到了三个关键的问题。


数据权威问题:常见的 Service Mesh 实践以 K8S 为准则,将所有的数据保存在 K8S 内,但平台现有数据大部分保存在自研的注册中心和配置中心内。


有方案提出采用两条推送路的方式,云内数据保存在 K8S 内,云外数据保存在现有注册中心里,通过外部工具或组件实现双向同步。但双向同步复杂度较高,既要保证数据的准确性和实时性,也要保证同步不成环。


因此,出于架构简便性考虑,项目最终选择保持注册中心数据权威地位不变,通过外部组件将数据写入 K8S。


边界划分问题:目前的项目部署体系是一个 Region 内包含多个 Zone,一个 Zone 内又包含多个 K8S 集群,集群之间网络互通。但由于故障隔离的需要,数据最好保持在 Zone 内收敛,使实例信息不需要进行跨 Zone 同步。


Zone 内收敛存在的问题是当调用方发起跨 Zone 调用时,需要经过网关进行中转。这种调用方式和现有的调用链路存在差异,会提高计算复杂度。


因此,项目最终选择保持现有工作模式不变,使得调用方能够获取 Region 内所有的 Zone 服务实例,保持数据在 Region 内透明。


技术选型问题:过去,项目研发产品大部分采用自研模式,通过整个团队成员协作完成开发工作,而依托开源社区能够更容易地产出优秀产品。


因此,项目最终选择基于开源产品进行二次开发。


6.png


目前所使用的 Service Mesh 架构设计,也被称为“渐进性”架构,主要有三个方面的特点。


开源方面:选择 Istio 和 Envoy 作为 Service Mesh 的基础设施。


实例和配置同步方面:由新开发的 SOA Operator 负责将存储在注册中心和配置中心中的数据写入 K8S。


同时,该程序也会把K8S集群内服务提供方的数据写入注册中心,使得 K8S 集群外用户也能够正常读取服务数据。并且,该服务不需要 SDK 支持,由 SOA Operator 直接完成注册和发现,任何语言都可以方便地接入微服务产品体系。


使用方面:K8S 集群外的应用仍然使用过去的交互方式,通过SDK和注册中心进行通信。


K8S 集群内的应用,如果使用 SDK,检测到 Sidecar 存在之后,SDK 会自动地关闭服务治理功能,使用特殊的 host 进行请求。如果不存在 SDK 支持,接入 Mesh 可以直接使用 HTTP Client,继续使用特殊的 host 发起请求。


7.png


HTTP 协议在 Service Mesh 架构上运行良好,但 Dubbo 协议在 Sidecar 网关上存些一些问题。


其一,元数据的位置:HTTP 协议中元数据位于报文最前端,而 Dubbo 协议中元数据位于报文末端,因此需要先解析报文才能定位到元数据位置。


其二,序列化问题:解析报文需要对报文进行反序列化处理,目前 Envoy 支持 Dubbo 默认序列化协议。但这种方式会产生额外开销,而且 Dubbo 服务使用的序列化器复杂,甚至还有一些团队为进一步降低报文大小,使用了压缩算法,网关解析难度大。


8.png


Dubbo 3 推出了 Triple,这是一种使用基于 HTTP/2 的 gRPC 并通过请求标头实现元数据信息传递的通信协议,也是 Dubbo 3 中推荐使用的服务通信协议。


Triple 协议适用于 Envoy 框架,且能轻松接入 Service Mesh。Dubbo 版本升级也并不复杂。


9.png


由于 gRPC 的 PB 序列化格式,Triple 协议无法直接使用。尽管 Triple 协议对 PB 兼容性较好,但 PB 要求先写契约再生成代码,而 Dubbo 要求先写代码,不存在契约,数据模型也是与 PB 对象完全不同的 POJO 格式。


为了连接 POJO 和 PB 对象,Triple 协议设计了 Wrapper。将原 POJO 对象序列化处理得到二级数据后,传入到 Wrapper 用 PB 进行序列化。


然而,这种方式不仅会导致内存占用变大,而且会引发更多的 GC。多次 GC 和重复序列化将会增大 CPU 负载。


10.png


为解决 Triple 协议带来的问题,项目给 gRPC 添加了自定义序列化器。这样不仅可以实现流式的序列化,也可以为用户提供和原生 Dubbo 一样的使用体验。


其他语言想要调用这种 gRPC 服务,只需要具备这种自定义序列化器即可,默认的自定义序列化器 JSON 可以被大部分语言解析。


11.png


治理方面,Service Mesh 使用 Istio 和 Envoy 作为基础设施,通过 Istio 读取  K8S 中 CRD 数据,并生成配置推送给 Envoy。


因此,保存在自研服务治理系统里内的实例数据、配置数据必须全部转化成 CRD 格式,同步到 K8S 以供 Istio 处理。


Operator 作为翻译机包含了大量模型转换逻辑,能够将配置模型翻译成 CRD 模型。针对一些复杂的功能,项目通过 Envoyfilter 或者 Envoy 的二次开发,添加自定义的 Envoyfilter 进行实现。


目前,所有的常用功能都已完成对齐,整体功能覆盖率超 90%。数千个线上应用完成接入,进入后续接入推广工作。


云原生微服务产品的未来发展趋势


12.png


Service Mesh 提供的都是通用能力,如分组、路由、流量控制、负载均衡等。这些功能本身没有语义,一线的业务研发和运维人员理解起来存在一定困难。


而且,该产品功能与现存治理系统的功能存在差异。为了给一线人员提供更好的微服务治理体验,需要将实际运维需求和底层控制数据联系起来。


13.png


目前,社区内 Dubbo Mesh 的研发工作也在积极进行,其做法跟携程云原生微服务治理框架类似。通过单独的控制面将配置数据写到 K8S 里,将实例数据通过 MCP 进行同步。


14.png


另外,新的开源产品 OpenSergo 也在研发中。据官方介绍,该项目力图打造一套通用的面向云原生的微服务治理标准,并且提供一系列的 API 和 SDK 实践。


目前,多家大型互联网企业和开源社区正在共同推进该项目的进行,希望能够完成从服务治理到云原生基础设施的全链路生态覆盖。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用构建高效微服务架构:后端开发的新范式
【4月更文挑战第30天】 随着企业加速其数字化进程,云原生架构已成为支撑复杂、可伸缩和灵活应用的骨干。本文探讨了云原生技术的崛起,重点分析了其在促进业务敏捷性、提高运营效率及推动创新方面的核心价值。通过深入剖析云原生生态系统的关键技术组件,如容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,揭示了企业如何利用这些技术来构建和维护高度可用且动态的IT环境。文章还提出了一个多维度的采纳框架,帮助企业评估和实施云原生解决方案,以实现真正的业务价值。 【4月更文挑战第30天】在现代软件开发的快速演变中,微服务架构已经成为一种领先的设计模式,用于构建可扩展、灵活且容错的应用程序。与传
|
2天前
|
运维 Kubernetes Cloud Native
构建未来:云原生架构下的微服务治理
【4月更文挑战第30天】 在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和容错性成为企业IT战略的核心。本文深入探讨了如何通过云原生架构实现微服务的高效治理,包括服务发现、配置管理、流量控制和故障处理等关键方面。我们将展示一系列最佳实践和工具选择,以帮助企业构建一个既可靠又灵活的服务网格,确保业务连续性并加速创新步伐。
|
2天前
|
Kubernetes 监控 Cloud Native
构建未来:云原生架构的演进与实践
【4月更文挑战第30天】 随着数字化转型的不断深入,企业对IT基础设施的要求日益提高。云原生技术以其独特的弹性、可扩展性和敏捷性成为推动现代应用开发的关键动力。本文将探讨云原生架构的核心组件、实施策略以及面临的挑战,旨在为读者提供一个关于如何有效构建和部署云原生应用的全面视角。
|
3天前
|
Cloud Native Devops 持续交付
构建未来应用:云原生架构在现代企业中的实践与挑战
【4月更文挑战第29天】 随着数字化转型的加速,企业正迅速转向云计算以支撑其业务敏捷性和创新。云原生技术,作为推动这一转型的关键因素,正在重新定义软件开发和运维模式。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps文化,并分析这些技术如何帮助企业实现弹性、可扩展和高效的应用部署。同时,我们将讨论在采纳云原生实践中所面临的挑战,包括安全性、治理和人才缺口等问题。
|
3天前
|
运维 Cloud Native Devops
构建未来应用:云原生架构的演进与实践
【4月更文挑战第29天】在数字化转型的浪潮中,企业亟需灵活、高效的技术支撑来应对市场的快速变化。云原生架构以其独特的设计理念和技术栈,成为推动这一变革的关键力量。本文深入探讨了云原生的核心概念、关键技术和实施策略,旨在为企业提供一个清晰的云原生转型蓝图,助力其构建更加动态、可扩展的应用系统。
|
3天前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与实践
【4月更文挑战第29天】 随着数字化转型的浪潮席卷各行各业,企业对于信息技术基础设施的要求日益提高。传统的IT架构已难以满足快速迭代、灵活扩展和持续创新的需求。本文聚焦于云原生架构,一种为云计算环境量身打造的设计理念和技术集合,旨在帮助企业构建更加灵活、可靠和高效的系统。通过对云原生核心组件的解析、实施策略的探讨以及成功案例的分析,我们揭示了云原生架构如何助力企业在竞争激烈的市场中保持领先地位。
|
7天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:容器化与微服务架构的融合
【4月更文挑战第24天】 随着云计算的不断演进,云原生技术已成为企业数字化转型的核心动力。本文深入探讨了如何通过容器化技术和微服务架构的融合,构建高效、可扩展且易于管理的云原生应用。我们分析了容器化带来的隔离性和可移植性优势,以及微服务架构在提升系统灵活性和促进团队协作方面的重要作用。文章还提供了实施策略,包括选择合适的容器平台、确保服务间通信的安全性以及持续集成/持续部署(CI/CD)的实践,以帮助企业实现敏捷开发和快速迭代。
|
8天前
|
人工智能 边缘计算 Cloud Native
云原生架构的未来展望与实践挑战
【4月更文挑战第24天】在数字化转型的浪潮中,云原生架构以其高度灵活、可扩展的特点成为企业技术战略的核心。本文深入探讨了云原生技术的最新发展趋势,分析了在实际部署和运维过程中面临的挑战,并提出了相应的解决方案。通过实例分析,本文旨在为企业实施云原生架构提供参考和指导。
|
8天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在现代IT架构中的演进与实践
【4月更文挑战第24天】 随着企业数字化转型的深入,云原生技术正成为推动创新和敏捷性的关键技术。本文聚焦于云原生技术的发展历程及其在现代IT架构中的应用,探讨了如何利用容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心概念来优化资源利用率,提高系统弹性,并加速产品上市时间。通过分析多个行业案例,文章揭示了云原生实践对企业竞争力的显著影响,并提出了面向未来的IT架构战略建议。
|
13天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
53 0