給他人解釋什麼是dubbo

小小最近開始學習dubbo了,這次進行相關的學習。
簡介
思維導圖如下
什麼是Dubbo
dubbo 是一款高性能的分佈式服務框架,高性能的,透明化的RPC遠程調用方案,SOA服務治理方案,與Spring 體系同時並駕崎嶇於Java體系生態中。
每天爲上千個服務提供,使用以及應用。
在上方的詞語中,出現了,分佈式服務,RPC遠程調用執行方案,SOA服務治理方案,這裏對這幾個詞語進行依次解釋。
分佈式服務 包含,服務註冊中心和服務治理中心,對微服務進行有效的治理。
RPC 遠程調用方案 RPC爲一種通信方式,用於進行遠程通信。
SOA服務治理 一種面向服務的體系架構。

YRgHpQ.png
dubbo的logo
Dubbo的由來
網站需要由單一的架構演化到分佈式架構,以及流動計算架構,如圖所示。

YRgLXn.png
網站演化圖
在上圖中,網站由最初的一個應用,即單一應用架構,由jsp,hibernate等逐步應用,當流量變大時,逐步發展到垂直應用架構,對機器進行拆分,拆分出多個,用F5等應用,進行負載均衡,流量越來越大,進行分佈式服務架構,此時,應用之間交互相當複雜,把核心的抽取出來,使用RPC進行遠程調用。流量達到越來越大,此時,增加一個調度中心基於訪問壓力實時管理集羣容量,提高集羣利用率,即資源調度與治理,即SOA。
在整個過程中,逐步的衍生出了一些問題,需要解決以下的問題。
1 依賴管理,服務逐漸的變的更加的多,服務的URL配置變的更加的艱難,負債均衡保持單點的壓力相當的大,此時需要註冊中心,管理相關的依賴管理,以及服務註冊等。
2 路由透明,服務的註冊,由原先的手動,變成了自動化,這裏全部依賴於路由透明。
3 服務治理,當單一節點出現故障的時候,鏈路出現血崩的時候,如何治理服務。這裏需要服務治理。對微服務進行相關的治理。
由此Dubbo應生而出,提供了以上問題的解決方案。
Dubbo的主要應用
dubbo主要應用於中大型應用,主要解決中大型應用的各種疑難問題。即分佈式應用架構。
Dubbo 架構
核心 生產者與消費者問題
Dubbo 對應於計算機核心知識的生產者與消費者的問題
生產者與消費者是經典的併發協助的經典問題,該問題描述了共享固定大小緩衝區的兩個進程——即所謂的“生產者”和“消費者”——在實際運行時會發生的問題。生產者的主要作用是生成一定量的數據放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些數據。該問題的關鍵就是要保證生產者不會在緩衝區滿時加入數據,消費者也不會在緩衝區中空時消耗數據。
Dubbo的核心應用爲生產者與消費者問題
節點調用關係
此時節點調用關係如上所示
調用關係說明
服務提供者啓動時,向註冊中心註冊自己的服務。
消費者啓動時候,註冊中心訂閱自己的服務。
註冊中心返回地址列表給消費者。
服務消費者,從地址中,獲取進行調用。
服務消費者和提供者,用於每隔一段時間,統計數據到監控中心。
特點
具有以下的特點,連通性,健壯性,伸縮性和升級性。
連通性指註冊中心負責註冊與查找。監控中心負責進行相關的統計,註冊中心和其餘服務都是連通的,監控中心與其他服務也是連通的。
健壯性指,監控中心宕機的時候,其餘應用也可使用。
伸縮性,可以動態的部署集羣。
升級性,未來可以進行逐步的升級。
第一個項目 Hello World
zookeeper 節點安裝
這裏安裝zk節點。使用docker鏡像安裝
PS C:UsersAdministratorDesktop試寫參考> docker pull zookeeper:3.5
3.5: Pulling from library/zookeeper
afb6ec6fdc1c: Pull complete
ee19e84e8bd1: Pull complete
6ac787417531: Pull complete
f3f781d4d83e: Pull complete
424c9e43d19a: Pull complete
f0929561e8a7: Pull complete
f1cf0c087cb3: Pull complete
2f47bb4dd07a: Pull complete
Digest: sha256:883b014b6535574503bda8fc6a7430ba009c0273242f86d401095689652e5731
Status: Downloaded newer image for zookeeper:3.5
docker.io/library/zookeeper:3.5
PS C:UsersAdministratorDesktop試寫參考>
PS C:UsersAdministratorDesktop試寫參考> docker create --name zddk -p 2181:2181 zookeeper:3.5
15b27748e07dc6cf44ca7943c49f9881e6d488a7cc5c61bfc5d3170a58321ff9
PS C:UsersAdministratorDesktop試寫參考> docker start zk
zk
PS C:UsersAdministratorDesktop試寫參考> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3eb0b087850 zookeeper "/docker-entrypoint.…" 2 weeks ago Up 22 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zk
PS C:UsersAdministratorDesktop試寫參考>
先拉取鏡像,再創建相關的容器,最後啓動docker容器。
編寫服務提供方
選擇新的maven工程
創建工程目錄如下
添加服務提供方
添加相關依賴

<?xml version="1.0" encoding="UTF-8"?>

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<artifactId>untitled9</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>


4.0.0
service-dubbo

<!--添加SpringBoot測試-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>
<!--添加dubbo依賴-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.4</version>
</dependency>


創建User對象

package com.ming.pojo;
import java.io.Serial;
import java.io.Serializable;
// 使用dubbo要求傳輸的對象必須實現序列化接口
public class User implements Serializable {
private static final long serialversionUID = -809897897879L;
private Long id;
private String username;
private String password;
private Integer age;
public static long getSerialversionUID() {

return serialversionUID;

}
public Long getId() {

return id;

}
public void setId(Long id) {

this.id = id;

}
public String getUsername() {

return username;

}
public void setUsername(String username) {

this.username = username;

}
public String getPassword() {

return password;

}
public void setPassword(String password) {

this.password = password;

}
public Integer getAge() {

return age;

}
public void setAge(Integer age) {

this.age = age;

}
}

創建UserService(接口)提供查詢服務

package com.ming.pojo;
import java.util.List;
public interface UserService {
List queryAll();
}

創建實現類

package com.ming.pojo;
import com.alibaba.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List;
@Service(version = "${dubbo.service.version}") // 聲明一個服務
public class UserServiceImpl implements UserService {
public List queryAll() {

// 實現查詢
List<User> list = new ArrayList<User>();
for(int i = 0; i < 10; i++){
    User user = new User();
    user.setAge(10 + i);
    user.setId(Long.valueOf(i + 1));
    user.setPassword("123456");
    user.setUsername("username_" + 1);
    list.add(user);
}
return list;

}
}

編寫相關的application

// 版本
dubbo:
service:
version: 1.0.0
protocol:
name: dubbo
port: 20880
// 服務掃描
scan:
basePackages: com.ming.pojo
application:
name: dubbo-provider-demo
//zk
registry:
address: zookeeper://172.0.0.1:2181
client: zkclient

啓動以後,查看註冊中心,已經註冊
服務消費方
導入相關依賴

<?xml version="1.0" encoding="UTF-8"?>

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<artifactId>untitled9</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>


4.0.0
consumer-dubbo

<!--添加springboot依賴,非web項目-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.13</version>
</dependency>
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
<!--引入service的依賴-->
<dependency>
    <groupId>cn.itcast.dubbo</groupId>
    <artifactId>itcast-dubbo-service</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>


編寫測試用例
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestUserService {

@Reference(version="1.0.0")
private UserService userService;

@TestpublicvoidtestQueryAll(){
    List<User>users=this.userService.queryAll();
}
for(Useruser:users){
    System.out.println(user);
}

}
編寫配置文件
spring:
application:

name: ming-consumer

port: 9091

dubbo:
registry:

address: zookeeper://172.0.0.1:2181
client: zkclient

測試
前置知識
Java 基本語法,計算機科學的基礎知識體系
適合人羣
剛剛走入社會,或正在實習的,大學生們

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章