Servicecomb注册中心可插拔设计与实现

举报
yd_282553764 发表于 2024/09/27 17:19:51 2024/09/27
【摘要】 Servicecomb是给开发者提供一个快速构建微服务的 JAVA SDK

让我瞅瞅Servicecomb是个啥?

1. ServiceComb 开源软件的主要功能
  • 服务注册与发现:帮助微服务实例在分布式系统中进行注册,并使其他服务能够发现和调用这些实例。这是微服务架构中基础且关键的功能,确保服务之间能够相互通信和交互。
  • 负载均衡:内置多种负载均衡策略,如轮询、随机、加权响应时间、会话粘性等,可以将请求均匀地分发到多个微服务实例上,提高系统的可用性和性能,避免单个实例过载。
  • 服务治理:具备强大的服务治理能力,包括容错熔断、限流降级、故障注入等。当某个微服务出现故障或性能问题时,能够自动进行容错处理,避免故障扩散;同时可以根据系统的负载情况对服务进行限流,保障系统的稳定性。
  • 多通信协议支持:支持多种通信协议,如 REST、Highway(RPC)等,满足不同场景下的通信需求,开发者可以根据具体的业务需求选择合适的通信协议3
  • 分布式调用链追踪:能够有效地监控微服务的网络延时,并可视化微服务中的数据流转,方便开发者对系统进行调试、优化和故障排查。
  • 服务配置管理:提供集中化的配置管理功能,结合脚手架能力,实现微服务治理能力 0 编码,开发人员简单配置即可使能微服务常见功能。
  • 边缘服务支持:内置轻量级高性能边缘服务,支持 producer 端治理,结合扩展路由能力和动态配置能力能轻松实现灰度发布、A/B 测试等关键特性。
2. 所属社区
ServiceComb 所属社区为 Apache 软件基金会。2017 年华为将 ServiceComb 开源并捐赠给了 Apache 软件基金会,从此成为一个以解决微服务问题为愿景的基金会项目。
4. 官网主页http://servicecomb.apache.org/ 
5. 主要开发语言:Java。
6. 用户使用情况
  • 在华为内部得到了广泛应用,沉淀了丰富的企业级应用开发经验3
  • 在开源社区也有一定的用户群体和关注度。许多企业和开发者将其应用于自己的微服务项目中,以实现高效的微服务架构和管理。例如,一些企业在进行云原生应用开发和微服务化转型时,选择使用 ServiceComb 来构建和管理他们的微服务系统。并且,在一些技术交流平台和社区中,也有不少开发者分享和讨论关于 ServiceComb 的使用经验和技术问题,这也反映了它在一定范围内的用户使用情况。
7. 主要商业价值
    • 提高开发效率:其开箱即用的特性和丰富的功能模块,能够大大减少微服务开发过程中的重复工作和代码编写量,让开发人员专注于业务逻辑的实现,从而提高开发效率,缩短项目的开发周期。对于企业来说,能够更快地将产品推向市场,获取商业机会。
    • 保障系统稳定性和可靠性:强大的服务治理能力可以有效地应对微服务架构中可能出现的各种故障和问题,保障系统的高可用性和可靠性。这对于企业的核心业务系统来说至关重要,能够减少因系统故障而导致的业务损失,提高客户满意度。
    • 降低运维成本:通过集中化的配置管理和自动化的服务治理,降低了微服务系统的运维难度和成本。企业可以更加高效地管理和监控微服务系统,及时发现和解决问题,减少人工干预和运维工作量。
    • 支持多种业务场景:多通信协议支持和灵活的扩展能力,使其能够适应不同行业和业务场景的需求。无论是互联网应用、企业内部系统还是传统行业的数字化转型,ServiceComb 都能提供合适的解决方案,为企业的业务创新和发展提供技术支持。

em~,总的来说,嘎嘎6哇。

那它如何使用Servicecomb的注册中心?

官网对此有完整介绍,这里就不在赘述了。

官网地址:https://servicecomb.apache.org/references/java-chassis/zh_CN/start/first-sample.html

抱一丝,有点懒,直接看官网,客官可行?

那Servicecomb的注册中心的原理又是啥呢?

如果我们摒弃一切的杂念,放弃一切的设计。做一个直截了当的操作注册中心的工具类项目,会怎样设计?代码嘎嘎炫,不就完了嘛?

大概是这样,创建一个工具类,在构造方法里面创建连接,新建几个方法以用来操作注册中心。

嘿嘿~,我们可以有几个方向去优化它,可以有两个大的方向。

  1. 建立整个行为的抽象接口,不然到时候改代码的时候,谁改谁痛苦
  2. 使得注册中心是可插拔的,我爱咋换就咋换,你管我呢

注册行为可能有哪些子行为?

  1. 可以将注册发现的相关行为都封装成接口,例如获取微服务实例、更新微服务状态、注册微服务、添加一个节点等。
  2. 每一个注册实例也可以进行抽象。属性可能会有:服务名称、应用名称、版本号等。
  3. 在项目启动后,需要每隔几秒钟去注册中心拉取最新的实例信息,更新到本地。

Servicecomb是怎么设计的?

Discovery:实际操作注册中心的接口,可以有众多实现,比如ZookeeperDiscovery,NacosDiscovery,相当于是最开始设计时的工具类。

DiscoveryManager: 对Discovery进行管理,在项目启动时会有一个job,对管理的所有实例进行重新拉取。

LifeCycle: 无论是Discovery还是DiscoveryManager,都有自己的生命周期,我们统一定义一个生命周期,包含初始化,运行,关闭。分别在服务器启动,运行、关闭时进行相关的操作。

相关源码截图如下:

好了,贴图真累,上面解决了Servicecomb的接口设计。下面就是可插拔设计实现了。

论起可插拔设计,无他,唯手熟尔,那就是spring boot自动装配了,没办法,就是这么6。

进去瞄一瞄RegistryConfiguration。我的天,居然被我发现了DiscoveryManager,它居然注册了DiscoveryManager。okokok!!!

RegistrationManager居然依赖List<Registration>,让我在具体的实现层里在瞄一瞄

明白了,一切都解释的通了。原来如此,是这么回事啊!真相只有一个!
Servicecomb通过spring boot的自动装配原理,装配了RegistrationManager,在装配时同时来依赖了Registration,而
Registration是我们自己实现的一套注册注册中心的行为接口。RegistrationManager和Registration分属于不同模块,
这样就实现了接口于实现的解耦。

最后来亿点交流电

Servicecomb使用到的设计模式有哪些:

代理:这里不是使用的经典代理模式,本人以为是代理的思想,以下图来说,doTask方法实现了对doTaskImpl的再封装,虽然只有一行打印日志,但是要的就是这个效果,实现mute job。就是干,一干一个不吱声。

模板:Manager包装了很多discovery的关于LiftCycle的方法。LiftCycle有抽象有实现。

观察者:Listener都在这里了,没啥说的吧。

建造者:Builder模式,biubiubiu。懂得都懂。

点赞,投币,收藏,一键三连~~~。咦,错了错了,走凑片场了。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。