目录
- 1 相关概念
- 1.1 微服务和分布式
- 1.2 分布式的CAP原则
- 1.3 负载均衡
- 2 RPC
- 3 Dubbo
- 4 微服务
- 5 技术栈
- 6 常见组合搭配
- 7 SpringCloud架构
- 8 SpringCloud五大组件
1 相关概念
1.1 微服务和分布式
- 微服务:微服务是一种软件架构方式,和MVC一样。微服务强调把一个软件的各个模块拆分成小的服务,服务与服务之间用轻量级的通信方式进行通信。
- 分布式:分布式是一种部署形式,解决软件开发好了之后如何部署的问题。
- 微服务和分布式的区别:二者没有绝对关系!微服务的所有服务都可以部署在同一单机上,也可以不同的服务部署在不同的机器上,也可以一个服务同时复制多个部署在不同的机器上。分布式的不同机器上可以部署相同的服务,也可以部署不同的服务。总而言之,一个是架构风格,一个是部署方式,都是根据具体的软件场景和访问量需求来的。
1.2 分布式的CAP原则
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
- 一致性(Consistency):同一时间,所有节点的数据完全一致。
- 可用性(Availability):服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。
- 分区容错性(Partition tolerance):即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。
不可能三者同时满足,一般要求CA
- CA:同时满足的CA的场景是单机部署,不要P。这就违背了分布式的初衷。
- CP:如果要保证数据的一致性,那么每次更新都需要将全部节点的数据进行更新,更新时间较长,这必然导致可用性的降低,比如分布式数据库,如Redis、HBase等。
- AP:如果要保证高可用,马上就要响应,就不能保证所有数据库进行同步之后再反馈,就失去了一致性。
1.3 负载均衡
当分布式部署之后,一个客户端请求来了,这个请求应该交给分布式多节点的哪个节点服务,就存在负载均衡问题了。
- 轮询法:将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。
- 随机法:将请求随机分配到各个节点。
- 源地址哈希法:根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。
- 加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
- 最小连接数法:根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。
2 RPC
分布式的节点之间的通信可以用HTTP协议;也可以走RPC;
Remote Procedure Call(RPC)远程过程调用。是一种进程之间的通信方式,是一种思想;允许程序调用另外一个地址空间上的过程或者函数,而不用显式编码这个远程调用细节,两个核心,通讯和序列化。
3 Dubbo
一个高性能的RPC框架;
- Consumer、消费者:
- Provider、生产者:
- Register、注册中心:
- monitor、监控器:
- 生产者从容器启动;
- 生产者需要去注册中心登记;(初始化)
- 消费者去注册中心订阅;(初始化)
- 登记处告诉消费者可以使用了;
- 消费者执行调用生产者;
- 监视器统计;
4 微服务
微服务提倡将单一的应用程序划分成一组小的服务,每个服务都运行在其独立的自己的进程内,用轻量级的通信机制来互相沟通;
- 优点:单一职责,每个服务都可以并发开发,独立部署,进程即服务;
- 缺点:服务之间通信成本变高,数据一致性问题;
5 技术栈
- 服务开发:SpringBoot、Spring、SpringMVC;
- 服务配置与管理:Archaius、Diamond;
- 服务注册与发现:Zookeeper;
- 服务调用:Rest、RPC;
- 负载均衡:Nginx;
- 消息队列:Kafka、RabbitMQ;
- 服务部署:Docker;
- ……
SpringBoot专注于快速、方便的开发个体微服务,SpringCloud关注全局的服务治理框架
6 常见组合搭配
- Spring Cloud NetFlix
- Dubbo Zookeeper
- Spring Cloud Alibaba
7 SpringCloud架构
8 SpringCloud五大组件
- 服务发现:Netflix Eureka
- 客服端负载均衡:Netflix Ribbon
- 断路器:Netflix Hystrix
- 服务网关:Netflix Zuul
- 分布式配置:Spring Cloud Config