谷粒商城项目笔记——分布式基础

1. 微服务

微服务是什么?

微服务是一种架构风格,如同把一个单独的应用程序开发为一套小服务,每一个小服务运行在自己的进程中,并使用轻量级机制进行通信,通常是 HTTP API。这些服务围绕业务能力进行构建,并通过完全自动化部署机制来独立部署。这些服务可以采用不同的编程语言进行编写,以及不同的数据存储技术,并保持最低限度的集中式管理。

概述 拒绝大型单体应用,基于业务边界进行微服务化拆分,各个服务独立部署运行。

微服务的优缺点? 摘自知乎-微服务的定义和优缺点

  • 优点
  • 逻辑清晰 一个微服务只负责一个明确业务的模块,提高了项目的可维护性
  • 简化部署 在一个单块系统中,只要修改了一行代码,就需要对整个系统进行重新构建,测试.部署。而微服务只需要对修改的微服务进行部署
  • 可扩展 应对系统业务增长的方法通常有纵向和横向扩展(比如数据库查询过慢?纵向使用性能更好的数据库来代替当前数据库。横向 分库分表,读写分离,使用多个数据库来提升性能,以空间换时间)。分布式系统中通常采用横向扩展的方式。因为不同的功能(业务模块)会面对不同的负荷变化,因此微服务相比单块系统具备更好的扩展性。
  • 灵活组合 在微服务架构中可以采用组合已有的微服务以达到功能重用的目的。
  • 技术异构 不同的微服务模块可以采用不同的编程语言去实现。
  • 高可靠 微服务之间独立部署,一个微服务的异常并不会导致其他微服务同时异常,通过隔离,熔断等技术可以极大的提升微服务的可靠性
  • 缺点
  • 复杂度高
  • 分布式系统通常采用REST,RPC等形式进行交互,由于网络并不是百分百保证信息传输的,因此需要考虑被调用方故障,过载,消息丢失等各种异常情况,代码逻辑复杂。单块系统所有模块都位于一台服务器上,各个模块之间的调用是可靠的相对简单。
  • 微服务之间的事务性操作存在一定问题, 不同的微服务模块之间可能使用不同的数据库,不能利用数据库本身的事务机制保证一致性,需要引入二阶段提交等技术
  • 运维复杂 在采用微服务架构时,系统通过多个独立运行的微服务构成,需要一个设计良好的监控技术对各个微服务的运行状态进行监控。运维人员需要花费额外的精力了解监控系统才能对系统进行更好的维护
  • 影响性能 微服务采用REST,RPC等形式进行交互,通信的时延会受到较大的影响

2. 集群&分布式&节点

集群,分布式,节点的概念和区别

区别: 集群是物理形态,分布式是一个工作方式, 节点是集群中的一个服务器。分布式中的每一个节点都可以做集群,而集群不一定就是分布式的。

分布式: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统,分布式系统是建立在网络之上的软件系统(简述: 是指将不同的业务分布在不同的地方)

集群: 指的是将几台服务器集中在一起,实现同一业务

节点: 集群中的一个服务器

3. 远程调用

远程调用

在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要互相调用,我们称为远程调用。(SpringCloud中使用HTTP + JSON的方式完成远程调用)

负载均衡

分布式系统中,A服务需要调用B服务,B服务在多台机器中都存在,A调用任意一个服务器均可完成功能。为了使每一个服务器都不要太忙或者太闲,我们可以负载均衡的调用每一个服务器,提升网站的健壮性。

常见的负载均衡算法

  • 轮询
  • 为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后依次选择,直到最后一个,然后循环。
  • 最小连接
  • 优先选择连接数最少的,也就是压力最小的后端服务器,在会话较长的情况下可以考虑采取这种方式。

4. 服务注册/发现

服务注册/发现,注册中心的关系

服务注册是指将已上线的微服务注册到注册中心去。

服务发现是指调用者在注册中心发现上线的微服务,避免了调用下线的微服务的情景。

注册中心是一个容器,用于存放微服务节点的信息。

5. 配置中心

配置中心

为什么会有配置中心?

  • 每一个服务最终都有大量的配置,并且每个服务都有可能部署到多台机器上。我们有可能经常需要变更配置,我们可以让每一个服务在配置中心获取自己的配置就节省了维护时间。

配置中心用来集中管理微服务的配置信息

6. 服务熔断

服务熔断和服务降级

在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当其中一个服务不可用时,有可能会造成雪崩的效应。要放置这样的情况,必须要有容错机制来进行保护服务。

分布式 还有 微服务 分布式微服务的优缺点_分布式系统

在上图中每一个模块代表一个微服务,其中订单服务依赖于商品服务,商品服务又依赖于库存服务。当库存服务内部故障时会导致整个服务调用链不可用。假设整个服务调用链执行完毕需要10秒,当多个请求同时发生时就会产生积压。会导致服务器资源耗尽,有可能其中某一个模块崩掉使得整个服务调用链不可用。

如何解决?

  • 服务熔断
  • 设置服务的超时,当被调用的服务经常失败到达某个阈值时,我们可以开启短路保护机制,后来的请求不再去调用这个服务。本地直接返回默认的数据
  • 服务降级
  • 在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。降级: 某些服务不处理,或者简单处理(例如双11,某些应用暂停退货服务也算服务降级)[抛异常,返回NULL,调用Mock数据,调用Fallback处理逻辑]。

7. API网关

概念

在微服务架构中,API Gateway作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端的负载均衡,服务自动熔断,灰度发布,同一认证,限流流控,日志统计等丰富的功能,帮助我们解决很多API管理难题