在网站开发初期,我们习惯把所有的代码都写在一个项目中。前台、后台、缓存、数据库、静态资源……等等。如果网站系统在物理上是分开的,系统会变得更大。显然,它需要面对海量用户的高并发访问,存储海量数据。许多用户请求无法在一台服务器上完成。很多缓存数据,数据库数据,不能在一台服务器上搞定。这就是网站的可扩展架构变得尤为重要的地方。如下所示。原理我们使用多台服务器组装成一个整体,共同提供服??务。通过不断地向集群中添加服务器,我们可以缓解不断上升的用户并发访问压力和不断增长的数据存储需求。衡量架构可扩展性的主要标准:是否容易向集群添加新的服务器。添加新服务器时,能否提供与原服务器相同的服务?集群中可以容纳的服务器总数是否有限制。在应用服务器集群中,只要服务器上没有保存数据,所有服务器都是平等的,可以通过负载均衡设备向集群中添加服务器。关系型数据库集群(MYSQL)关系型数据库的集群可扩展性解决方案必须在数据库外实现,将多个数据部署的服务器通过路由分区等方式组成一个集群。例如:Mysql等。非关系数据库集群(NOSQL)非关系数据库天生就是为海量数据库做准备的,所以对扩展性的支持非常好。例如:Redis、Memcache等。在缓存服务器集群中添加新的服务器可能会使缓存路由失效,导致集群中的大部分缓存数据无法访问。在部署之前,需要改进缓存路由算法以保证缓存数据的可访问性。静态资源服务器集群,如CSS、JS、Img等资源部署到服务器集群,减少流量,提高页面渲染速度。网站的垂直分离将业务流程的不同部分分开部署,以实现系统的可扩展性。如下所示。网站横向分离,将不同的业务模块分开部署,实现系统的可扩展性。如下所示。单个函数随集群大小而扩展。将不同的功能分开部署可以实现一定的扩展性,但是随着网站访问量的逐渐增加,即使是单台服务器分离到最小粒度,独立部署也无法满足业务规模的要求。所以必须使用服务器集群,即将同一个服务部署在多台服务器上,形成一个整体的集群,对外提供服务。例如:搜索功能。如果一台服务器每秒可以提供1000个请求,如果网站在高峰期,那么每秒的搜索流量就是10000。然后,需要部署10台服务器组成一个集群。同理,缓存服务器也会出现这种情况。事实上,要计算一个服务的集群规模,需要考虑它对可用性、性能和相关服务集群的影响。概括集群可扩展性,可以分为应用服务器集群可扩展性和数据服务器集群可扩展性。由于这两个集群在数据状态管理上的差异,技术实现上也有很大差异。大家可以深入研究每一个具体的架构设计。文章借用《大型网站技术架构》一书。
