分布式基础

ZooKepper: 一个用于分布式应用的分布式协调系统

CAP理论:

  • 一个计算机不能同时满足以下三点:
    1. Consistency 一致性:多个副本之间的一致性
    2. Availability可用性:每次都能获取正确的响应,但不能保证获取的是最新的数据
    3. Partition Tolerance分区容错性:遇到任何网络分区故障,仍提供满足一致性和可用性的服务
  • Zookeeper 保证了CP ;Spring cloud的ERUKA 实现的是AP

BASE 理论:

  • 是对CAP中一致性和可用性的权衡
  • 包括
    1. Basically Available 基本可用: 分布式系统出现故障 允许损失部分可用( 服务降级、页面降级
    2. Soft-state 软状态: 分布式系统出现中间状态,指不同的data replication 可出现延时的最终一致性
    3. Eventually Consistent 最终一致性: 经过一段时间达到一致性

集群:http://www.cyc2018.xyz/

  • 负载均衡
    1. 服务器(节点)通常设计成无状态的 用户可以请求任何一个节点
    2. 负载均衡器 根据节点的负载 将请求转发到合适的节点上
    3. 负载均衡器 可 实现高可用伸缩性
      1. 高可用:某节点故障 负载均衡器 将请求转发到其他节点 保证所有服务的持续给用
      2. 伸缩性: 根据集群负载情况 很容易的添加 移除节点
    4. 负载均衡器 包含两部分
      1. 负载均衡算法 得到转发节点
      2. 转发
    5. 负载均衡算法(六种)
      1. 轮询:将请求轮流发送到每个服务器上,适用于每台服务器性能相似,若性能差异大,性能差的服务器可能无法承受过大的负载
      2. 加权轮询:为不同性能的服务器赋予不同的轮询权值
  • 最少连接:每个请求的连接时间不同,轮询可能会使一台服务器的连接数过大,最少连接指的是 将请求发送给连接数最少的服务器
  1. 加权最少连接
  2. 随机算法:与轮询类似(dubbo默认 加权随机 例如权重7,3:随机一个0-9的数 看落到哪个区间,[0-7],[7-10])
  3. 源地址哈希法:对IP地址计算哈希后 对服务器数量取模得到目标服务器序号、保证统一IP的客户端的请求转发到同一台服务器上,可实现会话粘滞 Sticky Session,也称为会话保持
  1. 转发方法
    1. HTTP 重定向:负债均衡器将目标节点IP地址 写入HTTP重定向报文 状态码302,客户端根据重定向报文重新发起请求。 缺点:2次请求 访问延迟高;负载均衡器处理能力有限 限制集群规模
    2. DNS域名解析:在DNS域名解析的同时 使用负载均衡算法 计算服务器IP地址。优点: 可根据地理位置 返回离用户近的IP地址 ;缺点:修改DNS时 需一段时间生效
  • 反向代理服务器:反向代理服务器位于源服务器前面,用户的请求需要经过反向代理服务器才能到达源服务器。可以用来缓存、日志记录、负载均衡服务器。缺点:所有请求经过反向代理服务器,它可能成为性能瓶颈。
  1. 网络层:在操作系统内核进程获取网络数据包,修改请求数据包的IP地址进行转发,返回相应需要经过负载均衡服务器。 优点:在内核进程中进行处理,性能高;缺点:同iii
  2. 链路层:计算源服务器MAC地址,并修改请求数据包的目的MAC地址,进行转发。
    1. 通过配置源服务器的虚拟IP和负载均衡服务器的IP地址一致,不需要修改IP地址就可以进行转发。 源服务器的响应也不用转发回负载均衡服务器,直接转发给客户端,避免了负载均衡服务器成为瓶颈
    2. 三角传输模式,直接路由,避免了大量网络传输经过负载均衡服务器
    3. 目前使用最广,在Linux中 可以使用LVS负载均衡服务器(linux virtual server)
  • 集群下的Session管理

若Session存储在一台服务器上,若请求转发到另一台,就需要重新进行登录等操作

  • Sticky Session: 使用源地址hash法将同一ip地址的请求路由到同一个服务器;缺点:服务器宕机时,丢失该服务器上存储的所有session
  • Session Replication
    1. 服务器间进行 Session 同步,每个服务器都又所有用户的Session信息,用户可以向任何一个服务器进行请求
    2. 缺点:占用内存过多;同步占用网络带宽及CPU处理时间
  • Session Server
    1. 使用单独的服务器存储Session,可用MySQL或Redis或Memcached
    2. 优点:应用服务器无状态,保证了伸缩性
    3. 缺点:自己实现存取Session的代码
原文地址:https://www.cnblogs.com/lancelee98/p/15259107.html