0
点赞
收藏
分享

微信扫一扫

微服务&Dubbo

潇湘落木life 2024-03-18 阅读 14

一、微服务

1.1 服务架构演变

微服务&Dubbo_Dubbo

1.1.1 单体架构

单体应用架构被认为是构建应用程序的传统架构方式,它是作为一个不可分割的单元构建的。统一部署,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。

这样易于开发和测试,也十分方便部署;当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了。

但如果某个功能模块出问题,有可能全站不可访问,修改Bug后、某模块功能修改或升级后,需要停掉整个服务,重新整体重新打包、部署这个应用war包,功能模块相互之间耦合度高,相互影响,不适合当今互联网业务功能的快速迭代。特别是对于一个大型应用,我们不可能把所有内容都放在一个应用里面,我们如何维护、如何分工合作都是问题。如果项目庞大,则管理难度大。

  • Java实现:JSP、Servlet,打包成一个jar、war部署
  • Web应用服务器:开源的tomcat、jetty、glassfish。商用的有weblogic、websphere、Jboss

1.1.2 SOA

SOA(Service Oriented Architecture,面向服务的架构)是由多个服务组成的分布式系统。各个子系统之间没有采用统一的通信标准,导致系统间通信与数据交互变得异常复杂。

各个服务之间通过ESB(Enterprise Service Bus,企业服务总线)进行通信,ESB是一个由大量规则和原则集成的软件架构,可以将一系列不同的应用程序集成到单个基础架构中,由于没有好的开源方案,只能使用商业公司的产品,因此成本很高。此外ESB属于重量级产品,部署规划异常笨重。

微服务&Dubbo_微服务_02

1.1.3 微服务

参考https://www.martinfowler.com/microservices/

微服务架构风格是一种将单个应用程序开发为一套小型服务的方法,每个服务都在自己的进程中运行并与轻量级机制(通常是 HTTP 资源 API)进行通信。这些服务围绕业务功能构建,并可通过全自动部署机制独立部署。对这些服务进行最低限度的集中管理,这些服务可能用不同的编程语言编写并使用不同的数据存储技术。

微服务属于SOA的子集,SOA可以认为面向服务的1.0版本,微服务可以认为是面向服务的2.0版本。微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底消除强耦合,每一个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境。常见的微服务框架包括Dubbo和Spring Cloud。

1.2 单体应用和微服务的比较

1.2.1 单体架构

1.2.1.1 优点
  • 上手容易,学习成本低,通常技术栈比较简单。
  • 易于部署,单体应用部署的复杂度要比微服务低得多。
  • 适合小型团队开发“小而美”的、对业务复杂度不高、对应用扩展能力要求不高的应用程序架构。
1.2.1.2 缺点
  • 随着应用需求的增加以及规模的扩大,由于其代码耦合度高,单体应用自身的代码复杂度会很高,从而变得难以维护。具体表现为修改任何一处细节的代码,都会影响整个系统。因此必须全面协调开发、测试、部署。这使得软件迭代变的很慢,交付的效率低。
  • 扩展性差:很难去针对某个模块进行扩展,只能针对整个应用程序扩展。IO密集型和计算密集型模块混合在一起,无法独立升级及扩容。
  • 新技术壁垒:在单体应用程序中应用新技术极其困难,因为这样就必须重写整个应用程序。

1.2.2 微服务

1.2.2.1 优点
  • 每个服务足够小,代码容易理解。这样能聚焦一个简单唯一的业务功能或业务需求。
  • 开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成。微服务只需开发人员更专注于与业务相关的特定服务即可。
  • 微服务是低耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
  • 微服务能使用不同的语言开发。
  • 易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins。
  • 每个微服务都有自己的存储能力,一般都有自己的独立的数据库,也可以有统一数据库。
1.2.2.2 缺点
  • 微服务把原有的一个项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度。
  • 微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步机制,为设计和开发带来一定挑战。
  • 微服务适用于复杂的大系统,对于小型应用使用微服务,进行盲目的拆分只会增加其维护和开发成本。

二、Dubbo

2.1 Dubbo介绍

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

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

Apache Dubbo 提供了六大核心能力:面向接口代理的高性能RPC调用、智能容错和负载均衡、服务自动注册和发现、高度可扩展能力、运行期流量调度、可视化的服务治理与运维。

Dubbo官网:https://cn.dubbo.apache.org/zh-cn/

微服务&Dubbo_微服务_03

节点角色说明

节点

角色说明

Provider

暴露服务的服务提供方

Consumer

调用远程服务的服务消费方

Registry

服务注册与发现的注册中心(eg:Zookeeper)

Monitor

统计服务的调用次数和调用时间的监控中心

Container

服务运行容器

调用关系说明

1. 服务容器负责启动,加载,运行服务提供者。

2. 服务提供者在启动时,向注册中心注册自己提供的服务。

3. 服务消费者在启动时,向注册中心订阅自己所需的服务。

4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

微服务&Dubbo_Dubbo_04


中心类型

开源组件

EDAS(Enterprise Distributed Application Service)组件

托管说明

注册中心

Nacos(推荐)、ZooKeeper(推荐)、etcd、Consul、Eureka

Nacos(推荐)、EDAS注册中心

只需将应用部署到 EDAS 中,即可默认接入注册中心

配置中心

Nacos(推荐)、ZooKeeper(推 荐)、Apollo

Nacos(推荐)

只需将应用部署到EDAS中,即可默认接入配置中心

元数据中心

Nacos(推荐)、Redis(推荐)、 ZooKeeper

Nacos(推荐)

您只需将应用部署到EDAS中,即可默认接入元数据中心。

EDAS(Enterprise Distributed Application Service):企业级分布式应用服务

Dubbo服务框架的工作流程如下:

1. 服务提供者在启动时,在注册中心注册服务。

2. 服务消费者在启动时,在注册中心订阅所需的服务。

3. 注册中心返回服务提供者地址列表给服务消费者。如果服务提供者发生变更,注册中心将推送变更数据给服务消费者。

4. 服务消费者基于软负载均衡算法,从服务提供者地址列表中选一个服务提供者进行调用。

2.2 实现Dubbo微服务架构

2.2.1 环境准备

IP

主机名

作用

192.168.131.11~13

zk1~3

Zookeeper(注册中心)

192.168.131.14

provider

Provider(提供者)

192.168.131.15

consumer

Consumer(消费者)

192.168.131.16

node6

dubbo-admin

默认provider会利用DNS解析自已的主机名为IP,导致provider地址错误,可以想方法让DNS无法解析本机主机名或者为本机IP解决此问,可以如下方法解决:

  • 将provider主机名修改为localhost.localdomain或都任意无法解析的主机名,确保本机主机名无法解析。
  • 修改所有provider主机的/etc/hosts文件,添加一行 <provider服务器地址> 本机主机名,确保本机主机名正确解析为本机IP。
  • 修改所有consumer主机的/etc/hosts文件,添加一行 <consumer服务器地址> 本机主机名,确保本机主机名正确解析为本机IP,这项是dubbo-admin所需。
  • 修改网卡配置文件/etc/netplan/01-netcfg.yaml,删除此行search: [xxx],确保本机主机名无法解析

主机解析配置如下:

cat /etc/hosts
192.168.131.11 zk1.wang.org
192.168.131.12 zk2.wang.org
192.168.131.13 zk3.wang.org
192.168.131.14 provider
192.168.131.15 consumer

2.2.2 部署Zookeeper

参考https://blog.51cto.com/u_15796303/6193455

2.2.3 在Provider和Comsumer安装maven并镜像加速

具体参考https://blog.51cto.com/u_15796303/10010762

2.2.4 Provider和Consumer主机解析Zookeeper地址

cat dubbo-server/src/main/java/config.properties
dubbo.registry=zookeeper://zk1.wang.org:2181?backup=zk2.wang.org:2181,zk3.wang.org:2181
dubbo.port=20880

2.2.5 编译Dubbo Provider和Consumer

#编译Provider
root@provider:~# tar -xf dubbo-demo-provider.tar.gz 
root@provider:~# cd dubbo-demo-provider/
root@provider:~/dubbo-demo-provider# mvn clean package -Dmaven.test.skip=true
#编译Consumer
root@consumer:~# tar -xf dubbo-demo-consumer.tar.gz 
root@consumer:~# cd dubbo-demo-consumer/
root@consumer:~/dubbo-demo-consumer# mvn clean package -Dmaven.test.skip=true

2.2.6 启动Dubbo Provider和Consumer

先启动Provider,再启动Consumer

java -jar dubbo-server/target/dubbo-server.jar
java -jar dubbo-client/target/dubbo-client.jar

访问效果如下:

微服务&Dubbo_Dubbo_05

#consumer显示下面日志
HelloAction接收到请求:wang
HelloService返回到结果:<h1>这是Dubbo 消费者端(springboot)</h1><h2>Dubbo微服务!</h2>hello wang
#provider显示下面日志
HelloService接收到消息:wang

2.3 编译安装Dubbo的Web管理Dubbo Admin

Dubbo Admin提供了可视化界面,用来观察微服务中的互相调用关系。

官方说明:https://github.com/apache/dubbo-admin

当前项目已经用golang重构,需要下载指定branch为develop,再用downlaod zip 形式下载JAVA的源代码。

2.3.1 编译dubbo admin

#下载
wget https://github.com/apache/dubbo-admin/releases/download/0.5.0/apache-dubbo-admin-0.5.0-bin-release.tar.gz
#解压
tar -xf apache-dubbo-admin-0.5.0-bin-release.tar.gz
#修改Zookeeper地址为实际IP
cd apache-dubbo-admin-0.5.0-bin-release/bin/config && vim application.properties
admin.registry.address=zookeeper://192.168.131.11:2181,192.168.131.12:2181,192.168.131.13:2181
admin.config-center=zookeeper://192.168.131.11:2181,192.168.131.12:2181,192.168.131.13:2181
admin.metadata-report.address=zookeeper://192.168.131.11:2181.192.168.131.12:2181,192.168.131.13:2181

2.3.2 启动dubbo admin

cd .. && sh startup.sh

查看日志

微服务&Dubbo_Dubbo_06

2.3.3 登录Web界面验证

浏览器访问下面地址,用登录名和密码均为root去登录:http://dubbo-admin IP:8080

微服务&Dubbo_微服务_07

举报

相关推荐

0 条评论