OpenSergo-服务治理标准化
鲁严波
微服务产品研发团队
企业用户云原生化进入深水区,企业微服务上云后,服务治理的问题逐步成为企业下一阶段的诉求。不管是从开源社区/ Github 上的反馈,还是从 workshop /线下活动的数据来看,服务治理都是容器用户最感兴趣的话题。
服务治理主要分为四个阶段:
- 云上部署:首先用户从最开始的 ECS 基于虚拟的部署来实现云上部署。
- 云原生部署:做一些容器化的改造,以容器为核心,部署业务。
- 微服务化:进行微服务化改造,用户能够获得更敏捷、以应用为核心的开发能力。
- 服务治理:希望在提效和稳定性上做出更新,并以业务为核心进行开发,因此需要越来越多的服务治理能力的支持。
目前开源领域服务并没有统一和标准的方案,比如在工作负载上,可以选择容器和 ECS ;在语言上,可以选择 Java、Go、PHP 等;在框架上,可以选择 Spring Cloud 、Dubbo、gRPC 等;在接入服务治理的方式上,可以选择商业化更多的 Java Agent,也可以选择 Service Mesh 或各语言 SDK 的方式来做自己的服务治理标准。
对于企业而言,每一套方案都有不同的抽象和概念,服务治理的能力和方法也不同,最终会给业务开发人员造成很大的认知负担,服务治理在实践中难以落地。
另外,服务治理的现有框架极大限制了新的 RPC 框架和新的通信协议的在企业中的引入,从而极大限制了企业的技术革新。
基于以上种种问题,我们创办了 OpenSergo 这个开源项目。
OpenSergo 是 Open Service Governance 的缩写,它致力于建立一套开放的、面向应用的、贴近业务语义的服务治理规范。
从 OpenSergo 的角度出发,希望通过微服务治理标准能够增强各个 RPC 框架之间的可交互性,能够用同样的一套标准去治理不同语言、不同协议的微服务框架和通信协议。
对于各个微服务框架而言,希望通过 OpenSergo 来增强微服务框架的能力,提升开源竞争力;同时也希望能够提升各个 RPC 框架协议的互操作性,比如 HTTP 服务、外部的私有协议服务、普通的 gRPC 服务等之间的互通和治理规则的互相认可;最后,希望通过 OpenSergo 项目帮助促进微服务框架在企业中的落地。
上图为 OpenSergo 项目的结构。
最中间的服务治理 Spec 是一套中立的标准,让用户使用这样一套规范来描述自己的微服务架构,即期望建立的核心规范。对于数据面,可以用无侵入的Java Agent的方式接入到治理规范中,也可以通过更接近业务语义的 SDK 方式接入 Spec ,还支持通过 Service Mesh 这种目前比较流行的流量治理方式接入。
最上层为管控面,支持以 K8s CRD 为核心、用户自己编辑 yml 的方式来查看修改服务治理规则,也支持 web 界面, dashboard 用户能够通过 web 界面来查看修改自己的服务治理规则。
服务治理的功能主要分为开发态、测试态、发布态、高可用、安全态五个阶段。
开发态提供了服务契约能力,用户可以通过此功能查看应用提供了哪些接口、每个接口的业务语义是什么;提供了服务调试的能力,用户可以在界面上迅速方便地发起 RPC 调用,以此替代写很多代码来发起;提供了服务 Mock 能力,用户能够指定规则来 Mock 服务的行为;提供了开发环境隔离的能力,可以迅速建立起一套逻辑上隔离的开发环境,无须为每个服务都搭建一遍。
测试态提供了压测和回归的能力,发布态提供了发布时的效率保障,安全态的提供了服务鉴权、漏洞防护、零信任安全等基础能力。
上图为 Spec 架构图。
左侧是管控面,用户可以通过文本编辑器编辑服务治理规则。也提供了 OpenSergo Dashboard 控制台,用户在控制台上可以查看、修改服务治理规则。对于技术能力比较强,有自己内部要求的企业,也支持企业自建的 dashboard ,只要对接了 OpenSergo 协议,就可以使用自己的 dashboard 来实现诸多功能。
中间是 OpenSergo 协议,它本质上是 Spec 的规定,规定了服务元数据如何上报、服务治理的概念和能力、如何配置出二进制流,以及服务发现、可观测的能力。从本质上来看, OpenSergo 协议致力于实现一套能够描述用户微服务架构的语言。
右侧为数据面,除了常用的 Java Agent 服务治理和 Service Mesh 以外,也支持 SDK 接入不同的微服务框架,比如 Spring Cloud Alibaba、Bilibili 的 Kratos、字节跳动的 Kitex 目前都是正在接入的状态,将来也会支持 gRPC 和 Dubbo 的一些数据面。用户只需要用 OpenSergo 协议描述自己的微服务架构,各个数据面的框架即会遵从它的规则来做对应的流量分发、路由等功能。