## 18.1 水平扩展实现 当系统想提升处理能力的时候,通常用俩种选择,一种是重置扩展架构,即提升现有系统硬件的处理能能力,比如提高CPU频率,使用更好的存储器。另外一种选择是水平扩展架构,即部署系统到更多的服务器上同时提供服务。这俩种方式各有利弊,现在通常都优先采用水平扩展架构,这是因为 * 重置扩展架构 缺点:架构中,硬件提升能力有限,而且,硬件能力提升往往需要更多的花费 优点:应用系统不需要做任何改变。 * 水平扩展 优点:成本便宜 缺点:更多的应用导致管理更加复杂。对于Spring Boot 应用,会话管理是个难点 Spring Boot 应用水平扩展有俩个问题需要解决,一个是将用户的请求派发到水平部署的任意一台Spring Boot应用,这通常用一个反向代理服务器来实现,本书将使用nginx作为反向代理服务器 > 反向代理(Reverse Proxy)方式是指来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 > > 正向代理服务器:是指局域网内,访问外网,通过一个正向代理服务器访问外网。 另外一个需要解决的是会话管理, 单个Spring Boot应用,会话管理是Tomcat 来管理,会话信息跟Tomcat存放在一起.如果部署多个Spring Boot应用,对于同一个用户请求,即使被请求通过Nginx派发到不同的Web服务器上,也能共享会话信息。有俩种方式可以实现。 * 复制会话:Web服务器通常都支持Session复制,一台应用的会话信息改变将立刻复制到到其他集群的web服务器上 * 集中式会话:所有Web服务器都共享一个会话,会话信息通常是存放在一台服务器来实现,本章讲使用Redis服务器来存放会话 复制会话的缺点是每次会话改变需要复制到多台Web服务器上,效率较低。因此Spring Boot 应用是采用第二种方式集中式会话方式,结构如下: ![](https://img.kancloud.cn/5a/f1/5af17fdfa951d76582893251aa657c51_1502x866.png) 上图是一个大型分布式系统架构,包含了三个独立的子系统。业务子系统一和业务子系统二各部署在一台Tomcat服务器上,业务子系统三部署在俩台Tomcat服务器上,采用水平扩展。 架构采用Nginx作为反向代理,其后的各个子系统都采用Spring Session,将会话存放在Redis里,因此,这些子系统虽然是分开部署,支持水平扩展,但能整合成一个大的系统。Nginx提供统一的入口,对于用户访问,将按照某种策略,比如根据访问路径派发到后面的对应的Spring Boot应用,Spring Boot取得调用Spring Session取得会话信息,Spring Session并没有从本地存取会话,会话信息是存放在Redis服务器上。