ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

XMall 分布式电商项目中的 Dubbo 架构实践:服务注册、消费与负载均衡全解析

XMall 分布式电商项目中的 Dubbo 架构实践:服务注册、消费与负载均衡全解析 电商后端微服务【免费下载链接】xmall基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理系统:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等项目地址https://gitcode.com/gh_mirrors/xm/xmall点击查看免费下载本篇技术指南以 XMall 项目的学习文档 study/Dubbo.md 为主线系统讲解 Dubbo 分布式服务框架的节点角色、调用流程与核心工作原理并结合 XMall 仓库中真实的 Dubbo 配置文件与模块结构演示服务提供者Provider、消费者Consumer如何围绕 ZooKeeper 注册中心完成服务注册、发现与远程调用。读完本文你将掌握 Dubbo 六大节点角色的职责、五步调用关系的底层逻辑并能依据仓库源码在 XMall 的 manager / sso / search / content / front-web 等模块中定位并读懂一套完整的 SOA 服务化落地配置。一、Dubbo 是什么SOA 架构下的分布式服务框架Dubbo 是阿里巴巴开源的高性能、轻量级 Java RPC 分布式服务框架其核心能力是把应用中的业务逻辑拆分为可独立部署、可远程调用的服务并围绕服务提供方与服务消费方构建一套完整的服务注册、发现、路由、负载均衡、容错与监控机制。在 XMall 的 README 中项目被定位为基于 SOA 架构的分布式购物电商商城其后台管理系统、前台系统、会员系统、订单系统、搜索系统、单点登录系统均由独立的 Dubbo 服务承载Dubbo 正是贯穿这些系统、让它们以服务化方式协作的通信基座。从 xmall-parent/pom.xml 可以看到 XMall 统一在父 POM 中管理 Dubbo 依赖当前版本为dubbo.version2.6.1仓库根目录 xmall/dubbo.xsd 提供 Dubbo 的 XML Schema 文件用于在 IDE 中配置dubbo:xxx标签时避免报错各子模块无需重复声明版本即可引入 Dubbo 能力。二、Dubbo 架构中的节点角色说明Dubbo 官方文档给出的架构图中包含五个核心节点理解每个节点的职责是读懂后续所有配置的前提节点角色说明Provider暴露服务的服务提供方即被调用的一方负责把业务能力包装成远程服务Consumer调用远程服务的服务消费方即发起调用的一方Registry服务注册与发现的注册中心负责登记服务提供方地址、维护服务列表并推送变更Monitor统计服务的调用次数和调用时间的监控中心Container服务运行容器负责服务的启动、加载与生命周期管理在 XMall 中这五类角色与工程模块一一对应Provider提供方xmall-manager-service、xmall-sso-service、xmall-search-service、xmall-content-service四个服务实现模块分别承载后台管理、单点登录、搜索、内容管理等服务能力Consumer消费方xmall-manager-web后台管理系统 Web 层与xmall-front-web前台商城 Web 层它们不实现业务逻辑只通过dubbo:reference引用远端服务Registry注册中心采用 ZooKeeper默认127.0.0.1:2181在 study/Zookeeper.md 中说明了 ZooKeeper 作为树型目录服务支持变更推送适合作为 Dubbo 服务的注册中心工业强度较高可用于生产环境并推荐使用Monitor监控中心由 Dubbo 框架在 Provider 与 Consumer 内存中统计调用数据并定时上报Container容器各服务模块内嵌 Tomcatmvn tomcat7:run与 Spring 容器负责加载和运行服务。三、Dubbo 调用关系说明六步流程Dubbo 的调用关系由六个步骤构成每一步在 XMall 的配置与代码中都有对应的落点0. 服务容器负责启动、加载、运行服务提供者Provider 进程由运行容器Tomcat Spring拉起Spring 容器通过context:component-scan扫描cn.exrick.*.service包将*ServiceImpl实现类装配为可被 Dubbo 暴露的 Spring Bean。例如 xmall-manager-service 的 applicationContext-service.xml 中扫描cn.exrick.manager.service包xmall-sso-service、xmall-search-service、xmall-content-service 同理各自扫描对应服务包。1. 服务提供者在启动时向注册中心注册自己提供的服务每个 Provider 通过dubbo:registry声明注册中心通过dubbo:service声明对外暴露的接口。以 xmall-manager-service 配置 为例dubbo:application namexmall-manager / dubbo:registry protocolzookeeper address127.0.0.1:2181 / dubbo:protocol namedubbo port20880 / dubbo:service interfacecn.exrick.manager.service.ItemService refitemServiceImpl timeout10000/ !-- 其余 Manager 服务MemberService / ItemCatService / UserService / OrderService / ThanksService / SystemService / DictService / ExpressService / CountService --启动后Dubbo 会把接口名、协议、端口、实现 Bean 等信息注册到 ZooKeeper 的目录节点上。2. 服务消费者在启动时向注册中心订阅自己所需的服务Consumer 同样通过dubbo:registry连接同一个 ZooKeeper再用dubbo:reference声明需要订阅的接口。xmall-front-web 的 springmvc.xml 中一次性引用了 content、search、sso、manager 四个服务端提供的 9 个接口ContentService、SearchService、RegisterService、LoginService、CartService、OrderService、AddressService、MemberService、ThanksService消费方进程即订阅了这些服务的地址列表。3. 注册中心返回服务提供者地址列表给消费者并基于长连接推送变更ZooKeeper 作为目录服务向 Consumer 返回当前可用的 Provider 地址列表当 Provider 上线、下线或地址变更时ZooKeeper 基于长连接把变更数据实时推送给 Consumer保证消费方拿到的始终是有效地址而无需反复轮询。4. 消费者基于软负载均衡算法选择一台提供者调用失败则切换Consumer 拿到地址列表后会依据 Dubbo 内置的软负载均衡算法如随机、轮询、一致性哈希等可在调用侧配置选一台 Provider 发起 RPC若本次调用失败会按容错策略如 Failover 失败自动切换选择另一台 Provider 重试。这是 Dubbo 实现服务高可用与水平扩展的关键一步。5. 消费者与提供者在内存中累计调用次数与时间定时上报监控中心Provider 与 Consumer 会在内存中累计每一次调用的次数与耗时并按默认策略每分钟向监控中心发送一次统计数据用于形成调用量、响应时间等监控指标。这也是 study/Dubbo.md 中监控中心统计服务的调用次数和调用时间职责的运行时体现。四、XMall 中的 Dubbo 服务化落地Provider 与 Consumer 配置全解4.1 服务提供方Provider配置要点Provider 侧配置的核心 XML 标签及含义如下以 manager 为例配置项说明XMall 中的取值dubbo:application提供方应用信息用于计算依赖关系xmall-manager/xmall-sso/xmall-search/xmall-contentdubbo:registry注册中心协议与地址zookeeper127.0.0.1:2181dubbo:protocol服务暴露采用的 RPC 协议与端口dubbo协议各服务端口各不相同dubbo:service声明暴露的服务接口、实现 Bean 引用与超时时间timeout1000010 秒XMall 四个 Provider 模块使用不同端口暴露服务避免同机部署时端口冲突xmall-manager-service端口20880暴露 xmall-manager-interface 下 10 个服务接口Item、Member、ItemCat、User、Order、Thanks、System、Dict、Express、Countxmall-content-service端口20881暴露PanelService、ContentServicexmall-search-service端口20882暴露SearchService、SearchItemServicexmall-sso-service端口20884暴露LoginService、RegisterService、CartService、OrderService、AddressService、MemberService。以 xmall-sso-service 配置 为例其端口即设置为20884与 manager 的20880明确区分。4.2 服务消费方Consumer配置要点Consumer 侧只需声明应用名、注册中心并对每个需要的接口声明一个dubbo:reference生成本地代理 Bean。前台与后台两个 Web 模块的配置位置前台商城xmall-front-web/src/main/resources/spring/springmvc.xml后台管理系统xmall-manager-web/src/main/resources/spring/springmvc.xml消费方配置示意dubbo:application namexmall-front-web/ dubbo:registry protocolzookeeper address127.0.0.1:2181/ dubbo:reference interfacecn.exrick.sso.service.LoginService idloginService / dubbo:reference interfacecn.exrick.sso.service.CartService idcartService / !-- 其余引用略 --引用生成后Controller 可直接通过 Spring 注入使用例如OrderController、CartController、MemberController等前台控制器实际业务逻辑均发生在远端 sso / search / content 等服务进程中Web 层只负责接收 HTTP 请求并转发 RPC 调用这正是前后端分离 SOA 服务化在 XMall 中的具体体现。4.3 接口与实现的分层约定从工程结构可以推断XMall 遵循 Dubbo 的标准分层约定接口定义与实现分离、消费方依赖接口。接口层xmall-manager-interface如 ItemService.java、xmall-sso-interface、xmall-search-interface、xmall-content-interface只声明interface不包含任何实现实现层xmall-manager-service等模块实现*ServiceImpl并通过dubbo:service暴露消费方xmall-front-web、xmall-manager-web的 Maven 依赖中引入 interface 模块编译期只面向接口编程运行期由 Dubbo 生成代理完成远程调用。这样既实现了接口与实现解耦也让多个消费方可以共享同一套接口契约是 SOA 架构面向接口服务思想的直接落地。五、Dubbo 与 ZooKeeper 协作注册中心的工作原理Dubbo 官方推荐使用 ZooKeeper 作为注册中心XMall 正是采用这一组合。注册中心的核心职责是服务地址的注册与查找相当于目录服务。在 study/Zookeeper.md 中特别强调了一个关键特性服务提供者和消费者只在启动时与注册中心交互注册中心不转发请求压力较小。这句话揭示了 Dubbo 注册中心的设计哲学ZooKeeper 只承担服务名录角色Provider 注册地址、Consumer 订阅地址、变更时推送通知真正的业务数据由 Consumer 与 Provider 之间通过dubbo协议点对点直连传输注册中心不参与请求转发因此不会成为流量瓶颈。本地部署时需要先按 study/Zookeeper.md 的步骤安装并启动 ZooKeeper默认监听2181端口需先安装 JDK解压后创建 data 目录、将zoo_sample.cfg改名为zoo.cfg并修改dataDir再执行./zkServer.sh start启动./zkServer.sh status查看状态随后各模块配置中的127.0.0.1:2181才能连通。若在局域网或服务器环境部署只需将各模块dubbo:registry的address统一改为实际的 ZooKeeper 地址即可。六、Dubbo 服务调用链在 XMall 中的完整走读结合源码一条典型的 Dubbo 调用链可以完整走通注册启动xmall-sso-serviceSpring 扫描cn.exrick.sso.service包loginServiceImpl等实现 Bean 就绪dubbo:service将LoginService注册到 ZooKeeper20884端口订阅启动xmall-front-web其dubbo:reference向同一个 ZooKeeper 订阅LoginService拿到提供方地址127.0.0.1:20884调用前台用户通过浏览器请求登录接口MemberController等控制器注入LoginService代理发起 RPCDubbo 按负载均衡策略选中 Provider 完成登录校验并返回结果监控双方在内存中累计本次调用的次数与耗时定时上报监控中心。类似的调用关系遍布整个商城前台购物车CartService、下单OrderService、搜索SearchService均跨进程调用 sso / search 模块后台管理ItemService、OrderService、UserService等则被xmall-manager-web后台系统消费。整个 XMall 因此形成一个注册中心、四个提供方集群、两个消费方 Web 系统的服务化拓扑。七、总结Dubbo 在 XMall 中的价值服务化拆分业务按域拆分为 manager / sso / search / content 四个独立服务模块各自独立开发、部署与扩展符合 SOA 思想解耦通信Web 层通过dubbo:reference面向接口编程无需关心远端实现细节高可用ZooKeeper 长连接推送地址变更消费方基于软负载均衡选节点、失败自动切换可监控Provider 与 Consumer 定时上报调用次数与耗时为容量评估与故障排查提供数据。本文所引用的配置与代码均可在 XMall 仓库中直接查阅Dubbo 架构笔记见 study/Dubbo.md依赖版本见 xmall-parent/pom.xml注册中心说明见 study/Zookeeper.mdProvider 配置见 manager、sso、search、content 各服务模块的applicationContext-service.xmlConsumer 配置见 xmall-front-web/springmvc.xml。更完整的 Dubbo 细节可继续参考 Dubbo 官方文档。赞分享电商后端微服务【免费下载链接】xmall基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理系统:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等项目地址https://gitcode.com/gh_mirrors/xm/xmall点击查看免费下载相关推荐Lucky Webhook 实战教程3 分钟把 DDNS 的 IP 变更推送到任意第三方系统Lucky Webhook 实战教程3 分钟把 DDNS 的 IP 变更推送到任意第三方系统 Lucky 是一款软硬路由网络管理工具内置 DDNS 任务会在后端网络通信微服务架构中的服务发现机制Moleculer框架动态注册与负载均衡深度解析微服务架构中的服务发现机制Moleculer框架动态注册与负载均衡深度解析 在当今快速发展的微服务架构中 服务发现机制 是实现系统弹性和可扩展性的核心技术。后端RPC框架服务注册发现解决服务过载Dubbo负载均衡策略配置与实践指南解决服务过载Dubbo负载均衡策略配置与实践指南 你是否遇到过服务集群中部分节点负载过高而其他节点闲置的情况是否因负载分配不均导致系统响应缓慢甚至崩溃本文后端RPC框架微服务服务注册发现上一篇终极Plex IPTV插件配置指南打造个性化直播电视体验下一篇Vue3无缝滚动组件终极指南10分钟实现优雅动效创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表