给别人解说什么是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 根本语法,核算机科学的基础常识系统
合适人群
刚刚走入社会,或正在实习的,大学生们