点击蓝字,关注我们
01
商业平台系统复杂度的主要驱动力来自业务产品的演化和组织的演化,其理论依据就是康威定律。
然而,随着微服务数量的激增,如何保证系统的高效运行和稳定性成为了一个巨大挑战。为此,百度基础技术团队研发了Jarvis——一个面向复杂业务系统的应用托管平台。Jarvis不仅提供了分布式服务框架和统一配置管理,还包括了分布式链路跟踪、容量规划、高可用性及数据化运营等微服务治理能力。作为内部开发平台,Jarvis致力于简化业务研发人员的操作流程,降低他们对基础设施的认知负担,使他们能够更加专注于创新和业务发展。
按照“平台工程”社区主要贡献者和Humanitec的产品负责人Luca Galante的说法,平台工程是一门设计和构建工具链与工作流的学科。这些工具链和工作流可以为云原生时代的软件工程组织提供自助服务功能。Jarvis 平台就是平台工程的一种经典实践。
Jarvis2.0的推出,更是将百度的微服务治理推向了新的高度,整合了微服务治理生态,定义了一套适合百度商业Web技术栈的治理方案,为云原生技术的发展注入了新的力量。
02
尽管现有的组件在解决特定问题上有所成就,但它们往往缺乏统一的标准和语言无关的实现,导致控制能力分散,使用体验不连贯,效率提升空间巨大。当 Kubernetes统一了容器编排管理系统之后,这些纯技术性的底层问题,便开始有了被广泛认可和采纳的基础设施层面的解决方案。Kubernetes容器编排效率和容器虚拟化方面的卓越表现,也能让发布效率问题得到更优雅的解决。因此我们在探索一种全新的架构,旨在整合云原生的先进技术与现有的治理组件,以提升治理效率,让业务团队能够快速享受到云原生带来的红利。
应用全版本发布慢
平均耗时30分钟+,95分位值100分钟+,核心服务上线45-60分钟。
容器隔离性差,经常出现资源被其他业务容器抢占(特别是磁盘IO)导致的线上问题。
发布态治理操作慢
线上切流只能走配置上线,止损慢。
调优单个指参数(修改数据库连接池参数、日志级别等)耗时长(30min+/次)。
全链路灰度只能通过增加机器来物理隔离,效率低、资源浪费大。
监控迭代效率低、业务自定义难
监控探针升级频繁,数万个Pod线上推全需1-2月。
Argus 3.0易用性差、高阶功能缺失且已不再迭代。
弹性容器服务(Elastic Kubernetes Service,简称EKS)是公司云原生化的平台载体,通过 Kubernates、OpenKruise 等新架构提供云原生基础设施。
智能监控平台(Intelligent Monitoring)是针对云原生场景构建的新一代Prometheus+Grafana监控服务。
弹性名字服务(ElasticNamingService,简称ENS),云原生时代的名字服务,与EKS天然融合。
镜像仓库(iRegistry),分布式全托管的镜像制品管理服务。
03
商业平台研发部的云原生微服务托管平台Jarvis2.0整合微服务治理生态,从控制面和数据面、部署面三个角度,定义了一套适合当前百度商业 Web技术栈的微服务治理方案。
我们首次引入了多运行时架构,所谓的多运行时(Multi-Runtime)架构,其实是借鉴了 Service Mesh的思路,不同之处在于Service Mesh引入了Sidecar 模式重点解决服务间通讯需求,但是Multi-Runtime架构则提出将各种各样的分布式能力全部外移到独立Runtime,最后和应用Runtime共同组成微服务,形成所谓的“Multi-Runtime” (多运行时)架构。
Jarvis2.0通过定义一套开放式的微服务控制面标准协议,实现数据面的统一管理和调度。数据面,则展现出生态的多元化,例如多语言的Proxyless、跨语言的Envoy代理、JVMTI agent等技术各施所长。一套CRD治理标准协议,下发多套治理数据面,从而将原来分散、割裂的基础组件通过合理的架构组装在一起,来满足多元化的微服务场景。
包括以下3个核心部分:
运行时Moonlight(数据面):运用Multi-runtime的架构设计,Sidecar边车部署。以统一标准、易扩展、非侵入方式整合Starlight、环境变量、诊断、Launcher、探针、安全、Debug等10+组件,实现启动管理、监控、诊断、动态调优、安全管控等治理能力。
部署面:结合镜像分层自动构建、OpenKruise Cloneset原地升级、KubeVela OAM引擎应用编排能力,支持业务应用原地升级、多集群一体化部署编排和灰度发布;结合OpenKruise Sidecarset的组件管理能力,实现Moonlight等 Sidecar的自动注入、原地升级和灰度发布。
控制面Gravity:遵循云原生Service Mesh动态通信控制协议xDS,提供统一的控制面标准协议,实现请求内容路由、流量权重路由、路由标识全链路传递、路由控制秒级生效的动态路由和参数调优、诊断、集群日志检索的指令下发。
3.1 运行时 Moonlight(数据面)
Moonlight伴生方式部署在每个应用容器上,因此对启动时间和内存消耗极其苛刻。我们最终采用了GraalVM Native Image技术,使用SpringBoot Native编译Moonlight,使Moonlight完全脱离了JDK运行,5秒内启动,仅占用128M 内存。
包含以下核心通路:
探针植入通路:支持探针动态植入、卸载、热升级。Native化后,标准的 JVMTI能力和反射难以使用,需要非常特殊的适配,属于业界首创。
动态治理通路:以xDS Client为中心监听治理信息,面向应用进程提供统一治理信息获取通路。关键能力如下:
流量染色:扩展探针无侵入Tracing能力,跨进程、跨线程传递流量标识,全链路染色。
限流熔断:利用探针实现织入式限流、熔断。
参数调优:支持日志级别、数据库连接池调优,并能快速扩展其他调优能力。
配置热升级:结合Kubernetes部署机制和 Java动态代理特性,秒级更新配置。
应用诊断:以旁路方式,按需诊断应用。集成大量的开源可插拔工具,JVM监控命令(Jstack、Jinfo、Jstat、JMAPHISTO等)Arthas、性能火焰图、系统环境工具(lsof、env等)。
静态治理通路:基于Launcher组件,实现 Jar 包自动替换,随业务重启生效。
监控报警通路:涵盖Metrics、Tracing、Log等数据类型,满足异构语言和场景的监控数据汇总分析与异常报警需求。
Metrics通路为微服务提供开箱既用报表和报警,支持分平台配置和算法推荐阈值。
Tracing通路日处理70+亿条调用数据(峰值流量40w/min),支持在百亿条数据中10s 内检索出单个请求路径。
3.2 部署面
多集群一体化灰度发布
基于阿里巴巴和微软共同开源的云原生应用规范模型OAM,对应用模型进行了抽象,借助K8S+OpenKruise CloneSet\Rollout +KubeVela OAM完成集群的多集群一体化管理、灰度发布和原地升级。
Jarvis用户仅需要设置平台暴露的业务参数(应用版本、配置版本、实例数、资源套餐、外网权限、AFS 等),然后 Jarvis借助OAM模型描述 出应用信息、部署目标集群、上线工作流步骤。一键发起app上线时,Kubevela会根据App OAM模型的定义,按照工作流步骤,自动将App部署到目标K8s 集群。(差异化集中配置,工作流分发配置到集群)
3.3 控制面 Gravity
Gravity集注册中心、配置中心和控制面于一体。与Istio非常类似,控制平面和Moonlight Sidecar的交互均采用业界流行的xDS协议。它能实现低延迟、高时效、自动保活的注册发现能力,同时支持10w+容器的无损上下线、请求内容路由、流量权重路由、路由标识全链路传递、路由控制秒级生效,比zk注册同步,更快更稳更强。
值得一提的是,xDS原生数据模型对非服务通讯控制的定义比较薄弱。我们复用xDS相关内容并实现了一套易用丰富完备的控制协议,实现各标准组件执行行为的动态可调控,支持限流、熔断、日志级别、超时、参数调优、应用诊断等控制命令。
无损上下线:Gravity与BaikalDB深度定制,对业务进行分组轮询缓存,内部统一事件通知总线,定向长轮询通知机制,确保秒级服务发现。
异常节点自动剔除:(client发起剔除)starlight自动统计调用质量,动态剔除有问题的远程节点;(server主动剔除)一旦服务自身状态健康检查持续有问题,自动停止心跳等待异常恢复;(控制面主动剔除)Gravity全局统计僵尸节点,自动清理掉。
灰度发布:借助探针,跨进程、跨线程传递Trace信息时携带定制的路由标识;Starlight RPC框架识别路由标识接住xDS通信协议全流程自动调整流量行为。
无侵入动态治理:Gravity扩展出MDS\DDS协议覆盖控制需求(比如业务字段限流和熔断、日志检索命令等),管控Moonlight操纵多运行时自动治理,借助探针运行时织入熔断限流或者修改框架参数,实现业务无感治理。
04
Jarvis2.0覆盖了商业平台、闪投、CRM、品牌广告、手机百度、文心一言、小度云平台、健康商城等60+产品线的3K+个Web后端服务,部署了4w+实例(200w+CPU核)。上线节省耗时2.14PD/天;核心治理功能使用2K次,节省人力30PD+/天。
上云收益显著,主要体现在上云效率、治理效率和稳定性、扩展性四个方面:
接近零成本上云
Springboot应用 \ 静态网页应用 \ Node应用等自动生成Docker 镜像,无需代码改造;开箱即用Promethus+Grafana云原生监控(200+监控报表、9+基础报警)。
部署治理效率数倍提升
核心治理操作 | 上云前 | 上云后 |
全版本上线95分位值 | 126分钟 | 36分钟 |
全版本上线平均值 | 32分钟 | 12分钟 |
单实例迁移 | 14分钟 | 2分钟 |
线下环境全新搭建 | 40分钟 | 20分钟 |
配置更新 | 平均30分钟 | 热更新仅需1分钟 |
线上切流、异常点摘除 | 30分钟以上 | 3-5秒 |
单个指标调优(数据库连接池参数、日志级别等) | 30分钟以上 | 2分钟 |
稳定性显著提升
线上推全治理组件(数万个 Pod) 从1-2月降到1天;线上切流从3-5pd+降低到3-5s。异常点摘除从30分钟+降低到3-5s。依靠灰度,XSTP线下环境全新搭建从40分钟降到20分钟,节省人力1.6PD/天。熔断限流只需界面操作,无需代码改动或者上线重启。单个指标调优(数据库连接池、日志级别)从120分钟+降到3-5s。
覆盖多语言 Web 无状态应用
END
推荐阅读