1. 微服务
微服务架构风格,就是把一个单体架构按照业务拆分成多个服务模块,每个模块之间独立部署运行、互不影响,并使用轻量级机制通信,通常是 HTTP API。
2. 集群&分布式&节点
集群是个物理形态,分布式是个工作方式。
只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;
《分布式系统原理与泛型》定义:
“分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统”,分布式系统(distributed system)是建立在网络之上的软件系统。
分布式是指不同的业务分布在不同的地方。
集群指的是将几台服务器集中在一起,实现同一业务。
例如:京东是一个分布式系统,众多业务运行在不同的机器,所有业务构成一个大型的业务集群。每个小的业务,比如用户系统,访问压力大的时候一台服务器是不够的。我们就应该将用户系统部署到多个服务器,也就是每个业务系统也可以做集群化。用户会感觉他是在使用一个系统,而不是在使用一堆计算机。
分布式中的每一个节点(节点:集群中的一个服务器),都可以做集群。而集群并不一定是分布式的。
3. 远程调用
在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免地需要互相调用,我们称为远程调用。
SpringCloud 中使用 HTTP+JSON 的方式完成远程调用,因为HTTP 和 JSON 天然地支持跨平台。
4. 负载均衡
负载均衡的意思是,A服务发送请求给B服务,B服务为了保证集群中的每个机器能够处理的请求数量尽可能均匀一些,从而做出的一些操作,就是负载均衡算法。
常见的负载均衡算法:
- 轮询:第一个请求选择交给连接池中第一个后端服务器去处理,然后依次往后选择,直到最后一个,然后循环。
- 最小连接:优先选择连接数最少,也就是压力最小的服务器,在会话比较长的情况下,可以考虑采取这种方式。
- s散列:根据请求源的 IP地址 的散列(hash)来选择要转发的服务器。同一个IP地址(即同一个用户)的请求,都会被传到相同的服务器。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以考虑采用这种方式。
5. 服务注册/发现&注册中心
A服务调用B服务,A服务并不知道当前在哪几台服务器上有B服务,哪些服务器是正常的,哪些服务器是下线的。解决这个问题可以引入注册中心:
如果某些服务下线,我们其他人可以实时地感知到其他服务的状态,从而避免不可用的服务。
6. 配置中心
每一个服务最终都有大量的配置,并且每个服务都可能部署在多台机器上。但是我们经常需要变更配置,所以可以设计一个配置中心,让服务器自动去配置中心获取自己的配置。
7. 服务熔断&服务降级
在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当其中一个服务不可用时,有可能连锁效应地造成所有的服务都不可用,从而造成雪崩效应。要防止这样的情况,必须要有容错机制来保护服务。
1)服务熔断
a. 设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开启断路保护机制,后面的请求不再去调用这个服务。本地直接返回默认的数据。
2)服务降级
b. 在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行,比如:双十一的时候,会让非核心业务降级,将腾出来的其服务器资源用到更重要的地方。降级:某些服务不处理,或者简单处理(抛异常、返回NULL、调用Mock数据、调用 Fallback 处理逻辑)
8. API网关
API Gateway 抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡、服务自动熔断、灰度发布、统一认证、限流流控、日志统计等丰富的功能,帮助我们解决很多 API 管理难题。
本项目是采用前后端分离,需要通过 HTTP 进行通信,当请求从客户端发送到服务器的期间,HTTP请求会先经过网关,这个网关就相当于安检入口,检查请求是否合法,如果合法,就可以放行。当请求量暴增的时候,网关也能够让请求以恒定速度放行。