1. 分布式系统简介
1.1 分布式系统背景
单一应用架构:当网站流量下的时候,所有功能都集成在一个应用,也只需要部署一个应用,这样可以减少部署节点和成本。
垂直应用架构:当网站流量较大的时候,靠新增机器数量提升效率达不到要求,便会将系统垂直拆分为几个不相干的应用。
分布式系统架构:当垂直应用越拆越多的时候,各应用之间无可避免的需要交互,这时候可以考虑拆分出一些核心业务作为单独服务部署,逐渐形成稳定的服务中心,以便更快的速度响应业务需要。
1.2 分布式系统简介
“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统”——《分布式系统原理和范型》。从进程角度看,两个程序分别运行在两台主机的进程上,他们互相协作最终完成同一个服务或者功能,那么理论上这两个程序所组成的系统,也可以称作是“分布式系统”。当然这两个程序可以是不同的程序,也可以是相同的程序。如果是相同的程序有另一个名称叫“集群”,即相同程序横向扩展提高服务能力的方式。
分布式听起来和微服务概念差不多,他们的区别是:微服务架构偏向于业务,比如可以将微服务按子业务、数据库、接口等维度拆分成不同的微服务;分布式架构偏向于机器,可以说微服务架构都是分布式架构,因为大部分微服务都是单独的部署。
1.3 分布式系统需要解决的问题
1.3.1 分布式Session
session粘滞
session粘滞即当用户访问集群中的某台机器后,将当前用户的后续请求都转发到这台机器上。
使用场景:服务器数量适中、对稳定性要求不是很苛刻
优点:实现简单、配置方便、没有额外网络开销
缺点:网络中有宕机时,用户session会丢失容易造成单点故障
方案:Nginx的ip_hash负载均衡算法
session复制
session复制即将一台服务器的session数据广播复制到集群中的其余集群上
使用场景:机器较少、网络流量较小
优点:实现简单、配置较少、宕机不影响用户访问
缺点:广播式复制session有延时,需要额外网络开销
方案:开源的Tomcat-redis-session-manager
缓存集中式管理
缓存集中式管理即将session写入分布式缓存集群中,当用户访问时优先从缓存中获取session信息
使用场景:服务器较多、网络环境复杂
优点:可靠性好
缺点:实现复杂,需要额外网络开销、稳定性依赖于缓存系统的稳定性
方案:开源的Spring Session,也可以自己实现,主要是重写HttpServletRequestWrapper中的getSession方法