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

云原生环境下服务治理体系的构建与落地实践 云原生服务治理,是指在容器化和 K8s 编排体系下,以平台化方式为分布式系统提供:服务注册与发现流量路由控制(如金丝雀发布、蓝绿部署)服务熔断、限流、重试、降级访问控制与认证授权全链路可观测能力多协议与多语言适配解耦服务框架,使治理能力与语言、平台无关,实现“以平台为中心”的治理能力提供。Service Mesh 是一种基础设施层,通过 Sidecar 代理接管服务通信,实现无侵入的治理能力下沉。Sidecar 通常由 Envoy/Nginx 组成。 阅读详情

作者简介

CH3CHO,携程高级研发经理,负责微服务、网关等中间件产品的研发工作,关注云原生、微服务等技术领域。

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

334a2cbd0a53472c9c3e758403053b95.png

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

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

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

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

9da978dc9427d7e9aabc9deee3f171c8.png

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

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

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

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

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

99da755abf0dcebdfd71a3bcb810bfc5.png

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

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

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

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

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

3ad144b10c071652679c0c32584973d9.png

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

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

55c879b6790986e4b6c9f48f75a24848.png

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

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

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

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

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

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

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

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

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

682995cc950b0c00127002e2bb0de87b.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发起请求。

562d299549aec3dd93588a73bff7661c.png

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

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

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

77ffa1a96331368ae49a1171ccc61daa.png

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

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

a71113fee5fc613baae4ea703246135b.png

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

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

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

1cf7b17685fe9c5aaa75ac5414515738.png

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

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

d686653e86e7f6225b29a38892790761.png

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

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

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

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

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

6711283ae3c294c42838430ccf98d750.png

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

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

781d1bcd8ad6d13ae930abb47ea94bf3.png

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

558e5e38ca232daee41ea29e5ef8a10c.png

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

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

【推荐阅读】

0ce4721999d3e6092194e67674e62ac5.jpeg

 “携程技术”公众号

  分享,交流,成长

云原生服务治理平台系统设计与开发规划 云原生服务治理平台开发设计思路与规划。 阅读详情

相关推荐

云原生微服务治理经典套件之Spring Cloud Alibaba核心技术与实战案例

云原生的微服务治理需要结合具体业务场景和实际需要,综合考虑多方面因素,包括服务注册与发现、负载均衡、断路器、限流与降级、分布式配置管理、API网关、日志和监控等方面,制定合适的治理策略,实现服务的动态管理和优化。

Java 技术专栏,从入门到精通,熟悉企业级开发 1万+

云原生下一代-服务治理

服务治理是指通过一系列措施来管理和控制分布式系统中不同服务之间的交互,以保证系统的高可用性、高性能、高可伸缩性和高安全性。在分布式系统中,服务之间的交互非常复杂,需要处理的问题包括负载均衡、故障恢复、限流、熔断、降级、隔离等。服务治理可以帮助开发人员有效地解决这些问题,提高系统的可靠性和性能。在实现重试机制之前,需要先定义重试策略。连接错误:强制重试读超时:默认不重试写超时:默认不重试服务不可用:默认不重试。

徐小冠 1678

mini-platform:迷你平台致力于更简洁易用的轻量级微服务治理平台

小型平台轻量级微服务平台 Mini-Platform致力于打造更简洁易用的轻量级微服务治理平台,更容易实现与运维; 核心技术:SpringBoot,Spring Cloud,OAuth2(自研),MyBatis,Redis,MySQL; 核心功能:服务注册与发现,服务网关,负载均衡,统一认证,配置中心,异常处理等; mini-config-配置中心 采用Spring Cloud Config作为统一的配置中心 所有服务启动均需要重新配置,因此配置中心为第一个启动服务; 其他服务通过uri访问配置中心,当启动多个副本时,需要通过nginx等做代理达到高可用 小型发现-注册中心 采用Eureka做

6个顶级SpringCloud微服务开源项目,企业开发必备

Cloud-Platform是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。

z_ssyy的博客 4013

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

告别零碎资料!手把手教你搞定ASTER L1T数据的预处理全流程(附ENVI实操)

本文详细介绍了ASTER L1T数据的预处理全流程,包括数据获取、质量检查、ENVI实操步骤(辐射定标、大气校正、几何精校正)以及热红外波段深度处理。特别适合地信领域初学者和研究人员,帮助快速掌握ASTER L1T数据处理技巧,提升定量反演研究效率。

weixin_30385925的博客 355

服务治理的重要性在云原生架构中

1.背景介绍 在当今的数字时代,云原生技术已经成为企业和组织中不可或缺的一部分。云原生架构为企业提供了更高的灵活性、可扩展性和可靠性,使其能够更快地响应市场变化和客户需求。然而,随着微服务架构的普及,服务数量的增加和复杂性的提高,管理和协调这些服务变得越来越困难。这就是服务治理的重要性在云原生架构中得到了重视的原因。 服务治理是一种管理和协调微服务的方法,旨在提高服务的可用性、可扩展性和可靠性...

AI天才研究院 731

全网最全的AItium Designer 16下载资源与安装步骤

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。...

WQ的博客 1万+

【亲测免费】 Femas:腾讯云开源微服务治理平台

Femas:腾讯云开源微服务治理平台 1. 项目介绍 Femas 是腾讯云微服务平台 TSF 的开源版本,专注于微服务的运行状态,提供一站式的微服务管理控制能力,包括多框架统一服务发现、南北向和东西向流量管理、服务可观测性和配置管理等功能。在服务架构转型中,解决了异构框架难以复用、流量管理控制困难、故障排查恢复耗时等问题。 Femas 采用多运行时架构设计,标准化和模块化微服务的底层核心能力,通过...

gitblog_00702的博客 493

lattice Diamond Programmer程序下载

Lattice Diamond Programmer(支持Lattice FPGA与CPLD程序下载)

qq_44385725的博客 5177

EfficientNet 改进:添加混合卷积提取特征

混合卷积(Mixed Convolution)是一种在卷积神经网络(CNN)中结合多种卷积操作的策略,旨在通过融合不同卷积核大小或类型的卷积操作来提升模型的性能和灵活性。:例如标准卷积、深度可分离卷积(Depthwise Separable Convolution)、分组卷积(Grouped Convolution)等,可以在计算效率和特征提取能力之间取得平衡。混合卷积可以根据任务需求动态调整卷积操作的组合方式,适应不同的输入数据分布。:通过引入可学习的权重,动态调整不同卷积操作的贡献。

Henry的博客 660

官宣! Apache APISIX Summit ASIA 2022 重磅来袭

| 转载自:APISIX 云原生微服务网关|编辑:王玥敏| 设计:朱亿钦大会介绍Apache APISIX 自 2019 年 6 月 6 日正式开源后,就以社区的方式快速成长。短短两年多的时间,全球贡献者就已突破 400 位,且人数仍在快速增长。在此期间,Apache APISIX 社区也陆续收获了来自国内外开发者们的认可。作为开源的 API 云原生网关,Apache ...

开源社KAIYUANSHE的博客 402

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 967

万字长文分享腾讯云原生微服务治理实践及企业落地建议

在前不久举办的全球开源技术峰会上,腾讯云产品资深架构师侯诗军发表了《腾讯海量云原生微服务架构建设之路》的主题演讲,本次分享以腾讯微服务架构建设为主,介绍了 TSF、北极星(PolarisMesh)和微服务治理方面的实践经验,并和各行业内人士一起交流了企业实际开展云原生微服务架构转型的落地心得与建议。

qq_36668144的博客 1884

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2628

基于大语言模型的学术论文阅读辅助分析系统的研究与应用

本文提出了一种基于大语言模型的学术论文阅读辅助分析系统PaperMind,旨在解决传统学术阅读方式面临的三大困境:信息定位困难、跨学科知识断层和手动整理耗时。系统采用检索增强生成(RAG)架构,通过PDF文档解析、语义分割、向量嵌入与FAISS向量检索相结合的技术路线,构建了完整的文档处理流水线。实验结果表明,系统在文档加载分割、向量检索与问答生成环节均达到预期性能指标,检索命中率最高达98%。该系统为学术文献智能化处理提供了可复用的技术方案,有效解决了通用大语言模型在学术场景中的幻觉引用、归因能力不足等问

huanghm88的专栏 93

6个顶级SpringCloud微服务开源项目,企业开发必备!

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达关注公众号后台回复pay或mall获取实战项目资料+视频今天介绍六款比较热门的SpringCloud微服务项目,感兴趣的可以clo...

公众号-老炮说Java 1481

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

云原生时代下的微服务治理:从 Service Mesh 到全链路观测

Service Mesh 作为云原生时代微服务治理的基础设施,正在从可选组件变为必选架构。本文从理论架构到实战案例,全面解析了如何利用 Istio 构建完整的微服务治理体系,涵盖流量管理、可观测性、性能优化等核心维度。对于技术团队而言,落地 Service Mesh 需要遵循 "小步快跑" 的原则:先在非核心业务场景验证方案可行性,逐步建立治理规范与运维能力,最终实现全链路服务治理。场景先行:优先解决流量管理、故障注入等迫切需求观测优先:先构建完整的可观测性体系,再实施治理策略自动化运维。

2501_92447007的博客 1186

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

10个微服务架构设计的最佳实践

K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点击下方...

Docker的专栏 520

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

云原生微服务治理etcd应用实战

我很早就关注了微服务架构,对云原生、微服务、容器化、分布式中间件等都有过深入的研究,同时带领公司团队从零开始,基于 Kubernetes 搭建较为完善的开发、运维部署和容器调度的平台。目前公司的整体业务都在基于这一套架构运行,这让我在 etcd 作为服务注册与发现中心、分布式键值对存储等场景中,积累了大量的实践经验。互联网应用经历了从早期单一架构到垂直架构,再到分布式架构的技术发展过程。在业务体系不断发展变化,用户体量和性能要求远非传统行业所能比拟的当下,越来越多的公司跨入了分布式、云原生架构的行列,分布式

fegus的博客 1600

Apollo 携程框架 开源配置

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

java_2017_csdn的博客 1146

介绍6款热门的SpringCloud微服务开源项目,总有适合你的!

今天介绍六款比较热门的SpringCloud微服务项目,感兴趣的可以clone下来研究一下,相信对你学习微服务架构很有帮助。一、Cloud-Platform介绍Cloud-Platform...

Java知音 9607

【云原生】SpringCloud系列之服务治理Eureka

Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能。Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中进行统一管理。...

write less , do more 7835

【ArchSummit】阿里云原生微服务架构治理最佳实践

本文围绕阿里云云原生的微服务挑战和趋势、运行态服务治理最佳实践、开发态服务治理最佳实践展开介绍阿里云原生微服务架构治理最佳实践展开说明和复盘。

小明的Java问道之路 3943

华为开源治理实践分享

其中二进制成分分析能力已通过信通院可信开源治理工具评估,支持针对于软件包的检查包括Linux、Windows、IoT固件包、安卓和鸿蒙应用等,支持C、C++、Java、Python、JS、Rust等主流编程语言,支持安全编译选项、安全配置、典型编码问题、敏感信息泄露、开源组件License、开源漏洞等检查。华为在产品研发乃至全生命周期阶段,从选型、入库到开发阶段的使用申请、安全扫描,再到发布过程中的二进制扫描以及运维阶段对最新漏洞的跟踪排查,针对开源及第三方软件都有相应的管理规范和要求。

qq_18209847的博客 2316
上一篇: 干货 | 携程微服务体系下的服务治理之道和优化实践
下一篇: 开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值