侵入式服务治理方案,读这一篇就够(2)

简介: 侵入式服务治理方案,读这一篇就够(2)


核心流程


简单来说,Dubbo中必有的核心概念只有服务提供者、服务消费者和注册中心这三个,治理中心以及监控中心并非必需品。


服务提供者和服务消费者启动时,都会初始化一个Dubbo的运行时容器,多为Spring容器。服务提供者完成初始化后,将向注册中心注册服务;服务消费者完成初始化后,将向注册中心订阅服务。


注册中心在服务提供者列表发生变化时会将变化的内容主动通知给服务消费者。服务提供者和服务消费者在初次连通后,即持有长连接,它们之间将通过透明化的远程调用进行通信。每次调用的信息将传递至监控中心用于统计。Dubbo启动的核心流程如图6-3所示。



微信图片_20220123181539.jpg


图6-3 Dubbo启动的核心流程



注册中心


Dubbo通过注册中心来实现服务发现,它支持Multicast、ZooKeeper、Redis和Simple这四种类型的注册中心。虽然看似选择不少,但Multicast注册中心受网络结构限制,只适合小规模使用,而Simple注册中心不支持集群,因此,实际上生产级别可用的只有ZooKeeper注册中心和Redis注册中心。


无论是使用ZooKeeper还是使用Redis作为注册中心,都不是阿里巴巴内部的实现方案,而是开源的桥接实现方案,因此没有经历阿里巴巴内部的长时间考验。通过服务发现一章中的介绍可知,虽然ZooKeeper并不是首选的用于服务发现的注册中心,但相较于Redis,它的可靠性更强。除了Dubbo,其他很多第三方组件也采用ZooKeeper作为注册中心或元数据管理系统,如Kafka、Hadoop、Mesos,而Redis更加适合于存储应用数据的缓存体系。因此,大部分情况下,Dubbo都是配合ZooKeeper注册中心来使用的。


无论使用ZooKeeper还是Redis作为注册中心,服务注册和服务发现的流程都是相同的,只是存储数据结构以及监听等功能的具体实现不同而已,因此,下文仅选用ZooKeeper作为注册中心来举例说明。图6-4展示了Dubbo注册服务后在ZooKeeper注册中心的Znode中的存储结构。


微信图片_20220123181552.jpg


图6-4 Dubbo的存储结构


Dubbo所有的运行时状态信息都会集中存入一个统一的根节点,根节点的名称就是dubbo。每个服务会以类全称独立创建一个节点,服务节点下会分别创建名为providers和consumers的子节点,用于存储服务提供者和服务消费者信息,每个服务提供者和服务消费者的副本都会在相应的节点位置创建一个临时节点,该临时节点以URL的形式存储当前服务提供者或服务消费者的信息,包括IP地址、端口、调用方法等元数据,以及传输协议、最大连接承载数、路由策略等配置信息。另外还有configurators和routers节点用于存储全局配置和全局路由信息。


服务提供者启动时会在相应服务节点的providers节点下写入包含自身信息的URL作为临时节点;服务消费者启动时会在相应服务节点的consumers节点下写入包含自身信息的URL作为临时节点,并且监听providers节点的变化。当新的服务提供者加入,或当前服务提供者下线时,所有的服务消费者将通过ZooKeeper的监听机制自动感知变化。声明一个最简化的注册中心很容易,以Dubbo最常用的Spring命名空间的配置方式为例,代码如下。

<dubbo:registryaddress="zookeeper://zk_host:2181" />


Dubbo支持多注册中心同时提供服务,以分组的方式隔离不同的注册中心。只有设置为同一组别的服务才会注册到同一个注册中心下。提供多注册中心需要以ID进行区分,声明多注册中心的示例代码如下。

<dubbo:registryid="global" address="zookeeper://zk_host:2181"group="global" />
<dubbo:registry id="custom"address="zookeeper://zk_host:3181" group="custom" />


前面介绍ZooKeeper时提到过,除了原生客户端,还有两个较为常用的第三方客户端,它们是ZkClient和Curator。Dubbo支持这两种客户端对ZooKeeper进行操作,只需在配置注册中心时指明ZooKeeper的实现客户端即可,代码如下。

<dubbo:registryaddress="zookeeper://zk_host:2181" client="curator" />                        



负载均衡


Dubbo采用客户端负载均衡方式,即由服务消费者一方决定将当前通信发送至哪个服务提供者的副本。服务消费者实例启动时会从注册中心同步一份当前有效的服务提供者实例列表,并在服务提供者列表发生变化时更新本地数据副本。每次远程调用发生时,服务消费者都会读取内存中的服务提供者实例列表,并根据合适的负载均衡策略选择一个最合适的服务提供者实例进行访问。


微信图片_20220123181609.jpg



Dubbo的服务发现和负载均衡机制,使得基于它开发的分布式系统具有弹性好、高可用、性能优的特征。


相关文章
|
机器人 Java Linux
Webots机器人仿真入门(一)
Webots是一个开源的移动机器人仿真模拟器,内置了许多机器人模型。机器人造价普遍超出新手承受范围,对于新手来说使用仿真软件入门是一个不错的选择。
Webots机器人仿真入门(一)
|
11月前
|
存储 机器学习/深度学习 安全
阿里云服务器租用价格:2核4G与4核8G配置按量、包年包月收费标准与活动价格参考
2核4G、4核8G配置一般适用于中小型网站、企业网站应用、批量计算、Web前端服务器、机器学习推理等场景,因此,多为个人和普通企业级用户比较喜欢购买这种配置。2核4G配置按年购买u1实例2核4G5M带宽仅需199元,4核8G配置按年购买u2a实例4核8G目前活动价格为898.20元/1年起。本文为大家整理了目前核4G与4核8G配置按量、包年包月收费标准与活动价格,以供对比和选择参考。
2829 4
|
11月前
|
JavaScript Java 关系型数据库
基于springboot的社区垃圾分类管理系统
本系统基于Spring Boot与MySQL,结合物联网、大数据等技术,构建社区智能垃圾管理平台。实现垃圾投放监控、自动分类识别、积分激励及数据统计分析,提升管理效率与居民参与度,推动绿色社区可持续发展。
|
9月前
|
人工智能 自然语言处理 安全
恭喜我脱单了!我用OpenClaw(Clawdbot)造了一个专属AI女友,情人节不再一个人了!
我用OpenClaw造了一个AI女友,情人节不再一个人了!情人节的朋友圈总被牵手照、礼物晒图刷屏,单身的你是否只能当个“局外人”?2026年爆火的AI Agent框架OpenClaw(俗称“小龙虾”)给出了新答案——无需复杂代码,借助阿里云轻量应用服务器的一键部署方案,就能亲手打造专属AI女友,她不仅能记住你们的聊天细节、用温柔语气互动,还能发“自拍”、设提醒,7×24小时在线陪伴,让这个情人节充满仪式感。
1745 2
|
7月前
|
人工智能 自然语言处理 监控
《QClaw重构开发的四个底层逻辑,看懂少走半年弯路》
本文直击传统开发自动化“维护工具比省时间还多”的普遍痛点,深度剖析QClaw与普通对话式AI的本质差异——它是具备本地系统级执行能力的智能体,而非简单的聊天助手。文章结合真实使用经验,分享了串联原子能力构建完整工作流、利用事件驱动搭建全自动开发环境、远程异步处理碎片化任务、引导智能体个性化适配四个核心实践,提出未来程序员将从代码编写者转变为智能体训练师的核心观点,为技术从业者重构开发流程提供了可落地的新思路。
488 0
|
数据可视化 API 数据库
低代码是什么?2025低代码技术详解:平台分类、用户群体与发展趋势分析
低代码(Low Code)是一种通过可视化工具和预构建组件,以少量或无代码快速开发应用的技术。2014年Forrester定义其为“用最少手工编码快速开发并部署应用的技术”,随后Gartner推广aPaaS/iPaaS概念推动其发展。
1155 32
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
微软开源 VibeVoice:90 分钟播客级语音合成技术解析
微软开源VibeVoice,突破语音合成瓶颈:支持90分钟自然对话、4人实时互动,首创7.5Hz超低帧率+双Tokenizer架构,音质达MOS 4.2,显存仅需6GB。含长文本(1.5B)与实时(0.5B)双版本,中英文支持,MIT协议开源。(239字)
「AiPy实战」蚂蚁森林能量保卫战!全自动收取告别起早摸黑
AiPy 蚂蚁森林能量助手重磅上线!让手机自动帮你完成 “监控 - 收取 - 防偷” 全流程,从此告别 “能量焦虑”
|
11月前
|
存储 人工智能 安全
医疗影像云存储方案
医疗影像云存储方案通过云原生技术,构建安全合规、高效智能的影像管理新范式。面对大文件、高并发、长周期保存等挑战,方案融合分层架构、分片传输、全链路加密与AI协同,实现弹性扩容、低延迟访问与成本优化,并已在三甲医院成功落地,助力精准医疗迈向高质量发展。(238字)
887 1
|
开发者
鸿蒙应用开发从入门到实战(十二):ArkUI组件Button&Toggle
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解按钮组件Button和Toggle的使用。
781 2