Dubbo微服务

迈克丝

SOA思想

概念

soa思想即为面向服务开发;
发展步骤:面向对象思想-->面向接口开发-->面向切面开发-->面向服务开发

概括:SOA思想要求按照业务将服务进行拆分,之后按照同一的中立的接口进行交互.

结构图

相比较于上一篇文章的httpclient的远程调用,soa中将前端的service中httpclient部分以及后端的controller部门简化为一个公共中立的接口方便使用与调用.(由公共接口以及dubbo(tcp/ip)协议代替httpclient以及http协议,也就不需要后端的controller接收)
image

RPC

概念

RPC为远程过程调用--简单理解:一个节点请求另一个节点提供的服务
1.本地过程调用:本地调用方法执行业务
2.远程过程调用:在服务之间,由第三方完成自己的任务的过程.

微服务调用原理

必要两点:
1.根据业务拆分的思想 进行了分布式的设计
2.当服务发生异常时可以自动的实现故障的迁移(高可用)无需人为的干预.

传统服务调用方式

由于nginx做负载均衡时需要依赖配置文件.但是当服务器新增/减少时.都需要手动的修改配置文件.不能自动化的实现.所以暂时达不到微服务的标准.
image

微服务调用方式

步骤:
**1.当服务的提供者启动时,会将自己的服务信息(服务名称/IP/端口号)进行记录
2.服务注册中心需要记录提供者的信息 维护服务列表
3.当服务消费者启动时会链接注册中心.
4.从注册中心中获取服务列表信息,方便下次调用
5.当消费者调用服务时,会根据负载均衡的机制挑选其中的一个服务提供者进行访问.
6.当服务提供者宕机时,由于注册中心有心跳检测机制,会维护服务列表.当宕机的提供者标识为down
7.当服务列表维护之后,会全网广播通知所有服务器的消费者更新服务列表信息.**
image

关于集群说明

集群为何是奇数台

原则: 搭建集群必须满足公式 现有的节点数量 > N/2

为什么集群的最小单位是3台:
假设:
1台 1-1=0 > 1/2 false
2台 2-1=1 > 2/2 false
3台 3-1=2 > 3/2 true 3台是搭建集群的最小单位.
4台 4-1=3 > 4/2 true 只要大约3台都可以搭建集群.

集群中最多允许宕机的台数为多少:
3台最多允许宕机几台---最多宕机1台
4台最多允许宕机几台---最多宕机1台

从实用性的角度考虑问题 发现搭建奇数台和偶数台的容灾能力相同.所以选用奇数台.

zookeeper

总结:Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址.

zookeeper即为微服务中我们所要使用的注册中心,以下简称zk,安装运行/搭建集群过程不做赘述,请自行查阅.

zk集群选举的原理

原理说明: zk集群的选举根据最大值优先的规则,进行选举. 如果集群一旦超过半数以上的票数同意,则当选主机,同时选举结束.

题目: 有1,2,3,4,5,6,7节点依次启动.
问题1: 谁当主机? 4当主机
问题2: 哪几台永远不能当选主机? 1 2 3

zk存储数据的结构

zk中的数据的存储的方式是树形结构的.一般三级.

Dubbo框架介绍

官网简介

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

特性

image

工作原理

和上文中微服务调用过程基本一致
image

入门案例

1.定义第三方的公共接口项目:
消费者和提供者都会依赖此接口来进行传输,其中需要定义pojo类以及service接口

2.提供者说明:
1).编辑Dubbo的service接口的实现类:
实现公共接口项目的service接口(前提项目要依赖)
实现类注解要写Dubbo的@Service而不是spring的注解

2).编辑YML配置文件:
端口号/数据源/MP/Dubbo配置(包路径/应用名称(一个服务一个名称)/注册中心/协议)

3.消费者说明:
1).编辑controller:
注入service:利用dubbo的方式@Reference为接口创建代理对象,利用rpc调用;而不是@Autowired

2).编辑YML配置文件:
端口号/Dubbo配置(包路径/应用名称(一个服务一个名称)/注册中心)

4.启动测试业务

Dubbo题目

问题1: 如果将其中的一个服务的提供者关闭,问 用户访问是否受影响---不受任何影响
问题2: 如果将dubbo中的注册中心全部关闭,问用户访问是否受到影响---不受影响,因为消费者将服务列表数据保存到本地.

Dubbo框架通讯方式

使用Dubbo框架 ,在内部使用了dubbo协议进行通讯,其中的IP地址是动态生成的.并且端口号是访问服务的唯一标识信息

Dubbo负载均衡的方式

dubbo是客户端式负载均衡,在客户端自身中通过同步的注册中心文件进行负载均衡,负载均衡的方式写在注入公共接口的@Reference注解的loadbalance属性中.

@Reference(check = false,timeout = 3000,loadbalance = "random")
private DubboUserService dubboUserService;

名称都是类名的前半部分都小写即可.
1.RandomLoadBalance 随机负载均衡 语法: random 默认的
2.RoundRobinLoadBalance 轮询策略 语法: roundrobin
3.ConsistentHashLoadBalance 一致性hash算法 将消费者与服务提供者绑定 语法: consistenthash
4.LeastActiveLoadBalance 挑选负载压力小的服务器进行访问 语法: leastactive

阅读 746

一步一步学技术,踏踏实实涨经验,兴趣广泛,广交好友,希望大家多多指正/批评.

51 声望
5 粉丝
0 条评论
你知道吗?

一步一步学技术,踏踏实实涨经验,兴趣广泛,广交好友,希望大家多多指正/批评.

51 声望
5 粉丝
文章目录
宣传栏