一、分布式的概念

1、什么是分布式
  • 《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。

  • 分布式系统(distributed system)是建立在网络之上的软件系统。

2、分布式与集群的关系
  • 集群指的是将几台服务器集中在一起,实现同一业务。
  • 分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。

在这里插入图片描述

集群就是将使用"单体应用架构"的项目,放于不同的服务器(每个服务器上的项目完全一致,也就是同一个项目),实现了“水平”上的扩展。之后解决“负载均衡”即可。

分布式:首先分布式一定是集群的模式,而集群确不一定是分布式。分布式可以理解为将“单体应用的项目”分解为不同的模块,成为不同的子系统(如:京东——将用户、支付、售后、物流、订单、仓储。。。等分解为子系统),将每个子系统形成自己的集群,成为独立的服务器。分布式的关键点在于,每个子系统之间需要进行通信,则使用RPC进行远程调度。

分布式中牵涉到负载均衡(请求的合理分配到每个独立的服务器)和心跳机制(集群中的每个服务器需要在设定的时间内给服务注册中心进行报告自己的情况,如果长时间不报告、无回应,注册中心将视该服务器宕机)。

数据库服务器–集群的分库分表:

将每个子系统需要用到的表,存放与独立的数据库中。独立的数据库也可以进行主从复制(将主机上的数据同步到从机上)和双机热备(当检测到主机出现状况,无法支撑项目的运行,备机上去顶替)。为了减轻数据库的访问压力,也可以使用集群的方式进行减压。

3、软件架构演变

在这里插入图片描述

单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的==数据访问框架(ORM)是关键==。

在这里插入图片描述
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的***Web框架(MVC)是关键***。
在这里插入图片描述
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键
在这里插入图片描述
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键
在这里插入图片描述
4、RPC是什么

RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。

它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。

即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

  1. 他来解决分布式系统的各个服务之间互相交互问题

  2. RPC思想原理

在这里插入图片描述

​ 参考代码:https://javatar.iteye.com/blog/1123915

在这里插入图片描述

  1. 服务之间的交互可以用两种方式
  • RPC

    Netty(Socket)+自定义序列化

  • RestAPI (严格来说,SpringCloud是使用Rest方式进行服务之间交互的,不属于RPC)

    HTTP+JSON

二、分步式思想与基本概念

1、高并发
1.1 通过设计保证系统可以并行处理很多请求。应对大量流量请求
1.2 高并发衡量指标
  • 响应时间(RT)

    系统对请求做出响应的时间,即一个http请求返回所用的时间

  • 吞吐量

    系统在单位时间内处理请求的数量

  • QPS(Query/Request Per Second)、 TPS(Transaction Per Second)

    每秒查询(请求)数、每秒事务数

    专业的测试工具

    Apache ab

    Apache JMeter

  • 并发用户数

    指系统可以同时承载的正常使用系统功能的用户的数量

2、高可用
2.1 服务集群部署
2.2 数据库主从+双机热备

​ 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:

主-备方式(Active-Standby方式)

​ 主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。

双主机方式(Active-Active方式)

​ 双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)

3、注册中心
  • 保存某个服务所在地址等信息,方便调用者实时获取其他服务信息

  • 服务注册

    • 服务提供者
  • 服务发现

    • 服务消费者
4、负载均衡
  • 动态将请求派发给比较闲的服务器
  • 策略:(陈述常用的几种策略)
    • 轮询(Round Robin)
    • 加权轮询(Weighted Round Robin)
    • 随机Random
    • 哈希Hash
    • 最小连接数LC
    • 最短响应时间LRT

在这里插入图片描述

5、服务雪崩

服务之间复杂调用,一个服务不可用,导致整个系统受影响不可用

在这里插入图片描述

解释:

家庭用电中的保险丝,当出现短路时,会烧断保险丝,达到保护家庭用电的安全。

高速上出现严重的交通事故,造成高速交通的堵塞。

6、熔断

某个服务频繁超时,直接将其短路,快速返回mock(模拟/虚拟)值

在这里插入图片描述
当发生服务雪崩时,启用熔断器,避免服务雪崩造成的影响,返回一个兜底数据。

7、限流

限制某个服务每秒的调用本服务的频率

在这里插入图片描述
比如:

黄牛抢票,在很短的时间内购买几百张的车票,导致其他人买不到票。我们就可以使用限流,让它每秒钟只能买一张,否则就阻止它购票。

8、API网关

API网关要做很多工作,它作为一个系统的后端总入口,承载着所有服务的组合路由转换等工作,除此之外,我们一般也会把安全,限流,缓存,日志,监控,重试,熔断等放到 API 网关来做

9、服务跟踪

追踪服务的调用链,记录整个系统执行请求过程。如:请求响应时间,判断链中的哪些服务属于慢服务(可能存在问题,需要改善)。

10、弹性云
  • Elastic Compute Service(ECS)弹性计算服务
  • 动态扩容,压榨服务器闲时能力
  • 例如:淘宝双11,京东618,高峰时多配置些服务器,平时就减少使用服务器的数量,避免浪费资源。这就是“弹性服务”,利用“按需付费”,去租用相应数量的服务器。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐