微服务框架Dubbo环境部署实战



一.dubbo概述

1.什么是微服务

微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。

微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件,那么它就是一个有上下文边界的服务。

2.dubbo介绍

Apache Dubbo最初是为了解决阿里巴巴内部的微服务架构问题而设计并开发的,在十多年的时间里,它在阿里巴巴公司内部的很多业务系统的到了非常广泛的应用。最早在 2008 年,阿里巴巴就将Dubbo捐献到开源社区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用。在 2017 年,Dubbo被正式捐献Apache软件基金会并成为Apache顶级项目,开始了一段新的征程。

Dubbo 被证实能很好的满足企业的大规模微服务实践,并且能有效降低微服务建设的开发与管理成本,不论是阿里巴巴还是工商银行、中国平安、携程、海尔等社区用户,它们都通过多年的大规模生产环境流量对Dubbo的稳定性与性能进行了充分验证。后来Dubbo在很多大企业内部衍生出了独立版本,比如在阿里巴巴内部就基于Dubbo衍生出了HSF,HSF见证了阿里巴巴以电商业务为首的微服务系统的快速发展。

自云原生概念推广以来,各大厂商都开始拥抱开源标准实现,阿里巴巴将其内部HSF系统与开源社区 Dubbo相融合,与社区一同推出了云原生时代的 Dubbo3 架构,截止2022年双十一结束,Dubbo3 已经在阿里巴巴内部全面取代 HSF 系统,包括电商核心、阿里云等核心系统已经全面运行在Dubbo3 之上。

Apache Dubbo是一款RPC服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了Java、Golang等多语言 SDK 实现。使用Dubbo开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用Dubbo提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

在云原生时代,Dubbo相继衍生出了Dubbo3、Proxyless Mesh等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。

Apache Dubbo 提供了六大核心能力:
	- 1.面向接口代理的高性能RPC调用;
	- 2.智能容错和负载均衡;
	- 3.服务自动注册和发现;
	- 4.高度可扩展能力;
	- 5.运行期流量调度;
	- 6.可视化的服务治理与运维;
	
按照微服务架构的定义,采用它的组织能够很好的提高业务迭代效率与系统稳定性,但前提是要先能保证微服务按照期望的方式运行,要做到这一点需要解决服务拆分与定义、数据通信、地址发现、流量管理、数据一致性、系统容错能力等一系列问题。

 

Dubbo官网:
	https://cn.dubbo.apache.org/zh/index.html
	
SDK手册:
	https://cn.dubbo.apache.org/zh/docs3-v2/

Golang编程SDK接口:
       https://cn.dubbo.apache.org/zh/docs3-v2/golang-sdk/refer/use_dubbogo_cli/

3.dubbo架构

角色 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器
如上图所示,调用关系说明如下:
	- 服务容器负责启动,加载,运行服务提供者;
	- 服务提供者在启动时,向注册中心注册自己提供的服务;
	- 服务消费者在启动时,想注册中心订阅自己所需的服务;
	- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长链接推送变更数据给消费者;
	- 服务消费者,同提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用;
	- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到注册中心;
	
	
Dubbo服务框架的工作流程如下:
	- 提供者在启动时,在注册中心注册服务;
	- 消费者在起订是,在注册中心订阅所需的服务;
	- 注册中心返回提供者地址列表给消费者,如果提供者发生变更,注册中心将推送变更数据给消费者;
	- 消费者基于软负载均衡算法,从提供者地址列表中选一个提供者进行调用;
	 

4.Dubbo帮助解决微服务实践

- 微服务编程范式和工具
	Dubbo支持基于IDL或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)。

- 高性能的RPC通信
	Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,
	在实现上解决网络连接管理、数据传输等基础问题。

- 微服务监控与治理
	Dubbo官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。

- 部署在多种环境
	Dubbo服务可以直接部署在容器、Kubernetes、Service Mesh等多种架构下。

- 活跃的社区
	Dubbo项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目,贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家,确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势。

- 庞大的用户群体
	Dubbo3已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架,庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。

5.Dubbo不是什么

- 不是应用开发框架的替代者 
	Dubbo设计为让开发者以主流的应用开发框架的开发模式工作,它不是各个语言应用开发框架的替代者,如它不是 Spring/Spring Boot 的竞争者,当你使用Spring时,Dubbo 可以无缝的与 Spring & Spring Boot 集成在一起。

- 不仅仅只是一款RPC框架
	Dubbo 提供了内置 RPC 通信协议实现,但它不仅仅是一款RPC框架。首先,它不绑定某一个具体的RPC协议,开发者可以在基于Dubbo开发的微服务体系中使用多种通信协议;其次,除了 RPC 通信之外,Dubbo 提供了丰富的服务治理能力与生态。

- 不是gRPC协议的替代品
	Dubbo支持基于gRPC作为底层通信协议,在Dubbo模式下使用gRPC可以带来更好的开发体验,享有统一的编程模型和更低的服务治理接入成本。

- 不只有Java语言实现
	自Dubbo3开始,Dubbo提供了Java、Golang、Rust、Node.js 等多语言实现,未来会有更多的语言实现。
	Spring Cloud提供了微服务的全家桶的整套解决方案,Dubbo只是实现了微服务中RPC部分的功能,基本相当于Spring Cloud中的Feign,还需要组合其它服务才能实现全部功能。

6.Dubbo的中心类型实现方案

中心类型 开源组件 EDAS组件 托管说明
注册中心 Nacos(推荐)、ZooKeeper(推荐)、etcd、Consul、Eureka Nacos(推荐)、EDAS注册中心 只需将应用部署到 EDAS 中,即可默认接入注册中心
配置中心 Nacos(推荐)、ZooKeeper(推荐)、Apollo Nacos(推荐) 只需将应用部署到EDAS中,即可默认接入配置中心
元数据中心 Nacos(推荐)、Redis(推荐)、ZooKeeper Nacos(推荐) 只需将应用部署到EDAS中,即可默认接入元数据中心。
如上表所示,Dubbo的中心类型实现方案,我们后期要额外关注Nacos的学习。

其中EDAS应用全称为"Enterprise Ditributed Application Service",企业分布式应用服务。

Nacos是阿里开源的,致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

对于注册中心,我们不仅仅可以选择Zookeeper,当然Nacos也是一个不错的选择哟。
	- https://zookeeper.apache.org/
	- https://nacos.io/zh-cn/

二.部署dubbo服务

1.部署JDK环境

- Ubuntu系统:
	- apt -y install openjdk-8-jdk


- CentOS系统:
	- yum -y install java-1.8.0-openjdk-devel nc

2.部署provider组件

	(1)解压provider软件包
tar xf dubbo-demo-provider-2.1.5-assembly.tar.gz -C /usr/local/


	(2)编辑"dubbo.properties"文件
vim /usr/local/dubbo-demo-provider-2.1.5/conf/dubbo.properties 
...
# 禁用默认的组播注册中心。
# dubbo.registry.address=multicast://224.5.6.7:1234
...
# 将默认的单个节点的配置注释掉
#dubbo.registry.address=zookeeper://127.0.0.1:2181
# 配置zookeeper集群地址
dubbo.registry.address=zookeeper://10.0.0.31:2181 | zookeeper://10.0.0.32:2181 | zookeeper://10.0.0.33:2181


	(3)如上图所示,启动provider
/usr/local/dubbo-demo-provider-2.1.5/bin/start.sh 




官方测试dubbo样例:
	https://github.com/apache/dubbo/tree/master/dubbo-demo

3.验证zookeeper的znode信息

如上图所示,会自动创建一个/dubbo的znode哟,最后一层的子节点是一个临时znode哟。

4.部署consumer环境

	(1)解压consumer的软件包
tar xf dubbo-demo-consumer-2.1.5-assembly.tar.gz -C /usr/local/


	(2)编辑"dubbo.properties"文件
# 禁用默认的组播注册中心。
# dubbo.registry.address=multicast://224.5.6.7:1234
...
...
# 将默认的单个节点的配置注释掉
#dubbo.registry.address=zookeeper://127.0.0.1:2181
# 配置zookeeper集群地址
dubbo.registry.address=zookeeper://10.0.0.31:2181 | zookeeper://10.0.0.32:2181 | zookeeper://10.0.0.33:2181


	(3)启动consumer服务,启动成功后可以看到如上图所示的配置哟
/usr/local/dubbo-demo-consumer-2.1.5/bin/start.sh


温馨提示:
	如下图所示,当我们的消费者启动成功后,这意味着生产者也会得到响应哟,会有日志生成!可以明显看到日志来自哪个节点。

5.启动多个消费者并查看生产者日志

如上图所示,我在dubbo33节点上启动了新启动了consumer服务。在此之前,我已经在dubbo31节点启动过消费者啦。


如下图所示,当有多个消费启动时,可以观察生产者日志,有多个消费者请求哟。



三.部署dubbo web管理页面

1.下载dubbo-admin的软件包

如上图所示,需要下载"dubbo-admin"的软件包哟。

官网地址:
	https://github.com/apache/dubbo-admin

2.安装maven环境

	(1)安装maven环境
apt -y install maven

注意,Linux如果直接使用yum安装的话后期编译时可能会提示版本过低,建议手动下载较高的版本安装哟!(会提示报错, 根据报错选择大于该版本安装即可)
	
	(2)配置镜像加速
vim /etc/maven/settings.xml
...
146   <mirrors>
147     <!-- 添加阿里云镜像加速 -->
148     <mirror>
149        <id>nexus-aliyun</id>
150        <mirrorOf>*</mirrorOf>
151        <name>Nex aliyun</name>
152        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
153     </mirror>
...
166   </mirrors>

3.编译安装dubbo-admin

	(1)解压压缩包(或者直接去官网git clone拉取代码也可以哟~)
unzip dubbo-admin-develop.zip 


	(2)切换到源码目录
cd dubbo-admin-develop/


	(3)修改zookeeper的实际IP地址
vim dubbo-admin-server/src/main/resources/application.properties 
...
# 修改zk集群地址
admin.registry.address=zookeeper://10.0.0.31:2181,10.0.0.32:2181,10.0.0.33:2181
admin.config-center=zookeeper://10.0.0.31:2181,10.0.0.32:2181,10.0.0.33:2181
admin.metadata-report.address=zookeeper://10.0.0.31:2181,10.0.0.32:2181,10.0.0.33:2181


	(4)优化maven配置
echo 'export MAVEN_OPTS="-Xmx2g -Xms2g"' >> /etc/profile.d/maven.sh
source  /etc/profile.d/maven.sh


	(5)部署nodejs环境
apt update
apt -y install npm
npm config get registry
npm config set registry http://registry.npm.taobao.org
npm config get registry


	(6)执行JAVA编译并跳过单元测试,如上图所示,出现了成功字样,用时7分钟左右哈。
mvn clean install package -Dmaven.test.skip=true

4.启动dubbo-admin服务

java -jar dubbo-admin-distribution/target/dubbo-admin-0.5.0-SNAPSHOT.jar --server.port=8888


温馨提示:
	如上图所示,默认的初始用户名和密码均为"root/root"

5.访问dubbo-admin的WebUI

如上图所示,咱们的服务部署成功啦。
posted @   尹正杰  阅读(605)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2021-01-05 ceph-deploy部署ceph分部署集群
2020-01-05 HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
2020-01-05 HAProxy的高级配置选项-haproxy的四层负载及访问控制案例
2020-01-05 HAProxy的高级配置选项-haproxy预定义(内置)acl使用案例
2020-01-05 HAProxy的高级配置选项-ACL篇之基于策略的访问控制
2020-01-05 HAProxy的高级配置选项-ACL篇之匹配访问路径案例
2020-01-05 HAProxy的高级配置选项-ACL篇之基于文件后缀实现动静分离
点击右上角即可分享
微信分享提示