1、分布式基础
# 1、微服务
微服务架构风格,就像是把一个`独立的应用程序`开发为一套`小的服务`,每个`小的服务`运行在`自己的进程`中,并使用轻量级机制通讯,通常是`HTTP API`。这些服务围绕着业务能力来构建,并通过完全自动化的部署机制来独立部署。这些服务可以使用不同的编程语言书写,以及不同的数据存储技术,并保持最低限度的集中式管理。
>s 简而言之:❌拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。
# 2、集群、分布式、节点
- 集群
集群是个物理形态,分布式是一个工作方式。
>i《分布式系统原理与范型》定义:
“分布式系统是若干个独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。
分布式系统(Distributed System)是建立在网络之上的软件。
- 分布式
分布式是指将不同的业务分布在不同的地方,集群指的是将数台服务器集中在一起,实现同一个业务。
>i 例如:京东是一个分布式系统,众多业务运行在不同的机器,所有的业务构成一个大型的业务集群,每一个小的业务,例如用户系统,在访问压力大的时候一台服务器是不够的,我们就应当将用户系统部署到多个服务器上,也就是每一个业务系统也可以被做集群化。
>d 分布式中的每一个节点,都可以做集群,而集群并不一定就是分布式的。
- 节点
节点:集群中的一个服务器。
# 3、远程调用
在分布式系统中,各个服务可能处于不同的主机,但是服务之间不可避免的需要互相调用,我们称为`远程调用`。
在Spring Cloud中,使用HTTP+JSON的方式完成远程调用。
<center><img src="https://cos.easydoc.net/40732029/files/ksxxlond.png"></center>
# 4、负载均衡
<center><img src="https://cos.easydoc.net/40732029/files/ksxxq5nu.png"></center>
在分布式系统中,A服务需要调用B服务,B服务在多台服务器中都存在,A调用任意一个服务器均可以完成相应之功能。
为了使每一个服务器都不要太忙或者太闲,我们可以负载均衡的调用每一个服务器,提升网站的健壮性。
常见的负载均衡算法:
- 轮询:为第一个请求选择健康池中的第一个后端服务器,然后按照顺序依次选择,直到最后一个,然后循环。
- 最小链接:优先选择连接数量最少,也就是压力最小的后端服务器,在会话较长的情况下,可以考虑采取此种方式。
- 散列:根据请求源的IP的散列(Hash)来选择要转发的服务器。这种方法在一定程度上可以保证特定用户可以连接到相同的服务器,如果应用需要处理状态而要求用户能够连接到和之前相同的服务器,可以优先考虑采取此种方式。
# 5、服务注册、发现、注册中心
A服务调用B服务,A服务并不知道B服务在当前哪几台服务器有,哪些是正常的,哪些已经下线,解决这个问题可以引入注册中心。
<center><img src="https://cos.easydoc.net/40732029/files/ksy7bk59.png"></center>
如果某些服务下线,其他人可以实时的感知到其他服务的状态,从而避免了调用不可用的服务。
# 6、配置中心
<center><img src="https://cos.easydoc.net/40732029/files/ksy7kzot.png"></center>
每一个服务最终都会有大量的配置,并且每个服务都可能部署在多台机器上,我们经常需要变更配置,为此可以让服务在配置中心中获取自身的配置。
>s 配置中心用来集中管理为服务的配置信息。
# 7、服务熔断、服务降级
在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当其中一个服务不可用时,有可能会造成雪崩效应。要防止这样的情况,必须要有容错机制来保护服务。
## 1)服务熔断
设置服务的超时时间,当被调用的服务经常失败到达某一个阈值,开启断路保护机制,后来的请求不再去调用该服务,本地直接返回默认数据。
## 2)服务降级
在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。降级:某些服务不处理,或仅作简单处理【抛出异常、返回NULL、调用Mock数据、调用Fallback处理逻辑】。
# 8、API网关
<center><img src="https://cos.easydoc.net/40732029/files/ksy8los0.png"></center>
在微服务架构中,API Gateway作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡、服务自动熔断、灰度发布、统一认证、限流流控、日志统计等丰富的功能,帮助解决API管理难题。