【CSDN 编者按】Apache Dubbo 是阿里巴巴开源的分布式服务框架,作为 Apache 顶级项目,Apache Dubbo 经几年演进,一直以来都深受开发者喜爱及广泛使用,在 GitHub 上已经收获了 32.2k Star。在云原生时代来临之时,Apache Dubbo 面临着新的机遇与挑战。对此,本文作者 —— Apache Dubbo PMC、Spring Cloud Alibaba 项目架构师,也是大家所熟知的《Spring Boot 编程思想》作者小马哥深入分享了阿里巴巴在 Apache Dubbo 上的全新架构实践 —— 服务自省的设计与思考。
作者 | 小马哥,Apache Dubbo PMC
责编 | 唐小引
头图 | Apache Dubbo 官网
出品 | CSDN 开源实验室
随着微服务架构的推广和普及,服务之间的耦合度在逐步降低。在演化的过程中,伴随着应用组织架构的变化以及基础设施的演进,服务和应用之间的边界变得更为模糊。Java 作为一门面向对象的编程语言,Java 接口(Interface)作为服务之间通讯的一等公民,配合文档(JavaDoc)便于开发人员理解和维护。
基于相同的编程哲学,Apache Dubbo 作为传统的 RPC 服务治理框架,通过接口实现分布式服务。然而对于微服务治理而言,应用(或“服务”)才是基础设施的核心要素。
面对云原生(Cloud Native)技术的兴起,传统的 Dubbo 架构不断地面临着新的挑战。本文将以 Apache Dubbo 2.7.5 为基础,介绍全新架构 —— Apache Dubbo 服务自省(后文简称“服务自省”),了解 Dubbo 传统架构所面临的现实挑战,以及服务自省架构的设计和解决之道。
术语约定
Service:SOA 或微服务中的“服务”,或称之为“应用”,具有全局唯一的名称;
Service Name: 服务名称,或应用名称;
Servce Instance:服务实例,或称为应用实例(Application Instance),表示单个 Dubbo 应用进程;
Registry:注册中心;
Dubbo 服务:又称之为“Dubbo 业务服务”,包含 Java 接口、通讯协议,版本(Version)和分组(Group)等元信息;
Dubbo 服务 ID:唯一鉴定 Dubbo 服务的元数据,用于 Dubbo 服务暴露(发布)和订阅;
Provider:Dubbo 服务提供方;
Consumer:Dubbo 服务消费方;
Dubbo 服务暴露:也称之为 Dubbo 服务发布,或英文中的“export”、“exported”;
Dubbo 应用服务:也称之为 Dubbo 业务服务,或业务 Dubbo 服务。
使用场景
服务自省是 Dubbo 应用在运行时处理和分析 Dubbo 服务元信息(Metadata)的过程,如当前应用暴露 的 Dubbo 服务以及各自的通讯协议等。期间会伴随着事件的广播和处理,如服务暴露事件。Dubbo 服务自省架构是其传统架的一种补充,更是未来 Dubbo 架构,它更适合以下使用场景:
超大规模 Dubbo 服务治理场景
如果 Dubbo 集群规模超过一千以上,或者集群扩缩容已无法自如地执行,如 Zookeeper 管理数万 Dubbo 服务,服务自省可极大化减轻注册中心的压力,尤其在内存足迹、网络传输以及变更通知上体现。
微服务架构和元原生应用
如果想要 Dubbo 应用更好地微服务化,或者更接近于云原生应用,那么服务自省是一种不错的选择。它能够提供已应用为粒度的服务注册与发现模型,全面地支持最流行的 Spring Cloud 和 Kubernetes 注册中心,并且能与 Spring Cloud 或 Spring Boot 应用交互。
Dubbo 元数据架构的基石
Dubbo 元数据架构是围绕 Dubbo DevOps 而引入,包括 Dubbo 配置元数据(如:属性配置、路由规则等)和结构元数据(如:Java 注解、接口和文档等)。服务自省作为 Dubbo 元数据的基础设施,不仅支持所有元数据的存储和平滑升级,而且不会对注册中心、配置中心和元数据中心产生额外的负担。