应用架构、CAP理论

一、软件架构

1.1 单一应用架构

当网站流量很小,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。

1.2 垂直应用架构

当访问量主键增大,单一应用增加机器带来的加速度越来越小,将应用拆分成互不干扰的几个应用,以提升效率。

1.3 分布式服务架构

当垂直应用越来越多,应用之间的交互不可避免,将核心业务抽取出来,作为独立应用,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的需求。

二、分布式系统带来的问题

2.1 分布式session

session粘滞

即粘性 session,当用户访问集群中的某台机器后,强制指定后续的所有请求均落在此机器上。

使用场景:机器数量适中、对稳定性要求不是非常严格。

优点:实现简单、配置方便、没有额外的网络开销。

缺点:网络中有宕机时,用户 session 会丢失,容易造成单点故障。

方案:Nginx 的 ip_hash 负载均衡方案。

session复制

将一台机器上的 session 数据广播复制到集群中其余的机器上。

使用场景:机器较少、网络流量小。

优点:实现简单、配置方便、当网络中有宕机时不影响用户访问。

缺点:广播式复制到其他机器有一定的网络延迟,带来一定的网络开销。

方案:开源方案 tomcat-redis-session-manager,暂不支持 tomcat8。

缓存集中式管理

将 session 存入分布式缓存中的某台机器上,当用户访问不同的节点时先从缓存中拿 session 信息。

使用场景:集群中机器数量较多、网络环境复杂。

优点:可靠性好。

缺点:实现复杂、稳定性依赖于缓存的稳定性、session 信息放入缓存时要有合理的策略写入

方案:开源方案 Spring-Session,也可以自己实现,主要是重写 HttpServletRequestWrapper 中的 getSession() 方法。

2.2 分布式配置中心

每一个大型分布式系统都应该有一个配置中心。

开源解决方案:

  1. disconf
  2. diamond
  3. doozer
  4. etcd
  5. zookeeper

2.3 分布式事务、分布式锁

常见的分布式锁实现方案

  1. mysql(数据库)
  2. redis、memcached(内存数据库等)
  3. zookeeper

CAP理论

一个分布式系统最多只能同时满足:一致性(Consistency)可用性(Availability)分区容错性(Partition tolerance) 这三项中的两项。

一致性

一致性分为:强一致性弱一致性最终一致性

可用性

可用性:指服务一直可用,且是正常的响应时间。

分区容错性

分区容错性:指分布式系统在遇到某节点或网络故障时,仍然能够对外提供满足一致性和可用性的服务。

BASE理论

BASE 理论指:基本可用(Basically Available)软状态(Soft State)最终一致性(Eventual Consistency)

BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性,但应用可以采用合适的方式达到最终一致性。

基本可用

指分布式系统出现故障时,允许损失部分可用性,保障核心可用。

软状态

指允许系统存在中间状态,而该中间状态不影响系统整体的可用性。分布式存储系统中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。

最终一致性

指系统中所有数据副本经过一段时间后,最终能够达到一致的状态。

2.4 一致性算法和协议

由于 BASE 理论需要在一致性和可用性方面做出权衡,因此出现了很多一致性算法和协议:

  1. 两阶段提交
  2. 三阶段提交
  3. Paxos算法
  4. Zab协议

分布式系统介绍
https://cuilan.github.io/2021/04/18/中间件/zookeeper/zk1/
作者
zhang.yan
发布于
2021年4月19日
许可协议