【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群(三)

异地部署(地理分布式)

完成了上述架构建设以后,咱们的系统是否就已经足够强大了呢?答案固然是否认的哈,优化是无极限的。Web系统虽然表面上看,彷佛比较强大了,可是给予用户的体验却不必定是最好的。由于东北的同窗,访问深圳的一个网站服务,他仍是会感到一些网络距离上的慢。这个时候,咱们就须要作异地部署,让Web系统离用户更近。web

1、 核心集中与节点分散后端

有玩过大型网游的同窗都会知道,网游是有不少个区的,通常都是按照地域来分,例如广东专区,北京专区。若是一个在广东的玩家,去北京专区玩,那么他会感受明显比在广东专区卡。实际上,这些大区的名称就已经说明了,它的服务器所在地,因此,广东的玩家去链接地处北京的服务器,网络固然会比较慢。缓存

当一个系统和服务足够大的时候,就必须开始考虑异地部署的问题了。让你的服务,尽量离用户更近。咱们前面已经提到了Web的静态资源,能够存放在CDN上,而后经过DNS/GSLB的方式,让静态资源的分散“全国各地”。可是,CDN只解决的静态资源的问题,没有解决后端庞大的系统服务还只集中在某个固定城市的问题。服务器

这个时候,异地部署就开始了。异地部署通常遵循:核心集中,节点分散。网络

  • 核心集中:实际部署过程当中,总有一部分的数据和服务存在不可部署多套,或者部署多套成本巨大。而对于这些服务和数据,就仍然维持一套,而部署地点选择一个地域比较中心的地方,经过网络内部专线来和各个节点通信。
  • 节点分散:将一些服务部署为多套,分布在各个城市节点,让用户请求尽量选择近的节点访问服务。

例如,咱们选择在上海部署为核心节点,北京,深圳,武汉,上海为分散节点(上海本身自己也是一个分散节点)。咱们的服务架构如图: 架构

 

须要补充一下的是,上图中上海节点和核心节点是同处于一个机房的,其余分散节点各自独立机房。 
国内有不少大型网游,都是大体遵循上述架构。它们会把数据量不大的用户核心帐号等放在核心节点,而大部分的网游数据,例如装备、任务等数据和服务放在地区节点里。固然,核心节点和地域节点之间,也有缓存机制。 负载均衡

2、 节点容灾和过载保护分布式

节点容灾是指,某个节点若是发生故障时,咱们须要创建一个机制去保证服务仍然可用。毫无疑问,这里比较常见的容灾方式,是切换到附近城市节点。假如系统的天津节点发生故障,那么咱们就将网络流量切换到附近的北京节点上。考虑到负载均衡,可能须要同时将流量切换到附近的几个地域节点。另外一方面,核心节点自身也是须要本身作好容灾和备份的,核心节点一旦故障,就会影响全国服务。优化

过载保护,指的是一个节点已经达到最大容量,没法继续接接受更多请求了,系统必须有一个保护的机制。一个服务已经满负载,还继续接受新的请求,结果极可能就是宕机,影响整个节点的服务,为了至少保障大部分用户的正常使用,过载保护是必要的。网站

解决过载保护,通常2个方向:

  • 拒绝服务,检测到满负载以后,就再也不接受新的链接请求。例如网游登入中的排队。
  • 分流到其余节点。这种的话,系统实现更为复杂,又涉及到负载均衡的问题。

小结

Web系统会随着访问规模的增加,渐渐地从1台服务器能够知足需求,一直成长为“庞然大物”的大集群。而这个Web系统变大的过程,实际上就是咱们解决问题的过程。在不一样的阶段,解决不一样的问题,而新的问题又诞生在旧的解决方案之上。

系统的优化是没有极限的,软件和系统架构也一直在快速发展,新的方案解决了老的问题,同时也带来新的挑战。

 

观后感:这个web系统级的搭建设计,从小到大,由浅及深,感受做者再写的不是技术经验,而是web这个武林的葵花宝典啊,熟读几遍能够窥见武林的宏大,深刻了解后切忌不可走火入魔,仍是要有本身的路走出来

相关文章
相关标签/搜索