异地部署(地理分布式)
完成了上述架构建设之后,我们的系统是否就已经足够强大了呢?答案当然是否定的哈,优化是无极限的 。Web系统虽然表面上看,似乎比较强大了,但是给予用户的体验却不一定是最好的 。因为东北的同学 , 访问深圳的一个网站服务,他还是会感到一些网络距离上的慢 。这个时候,我们就需要做异地部署,让Web系统离用户更近 。
一、 核心集中与节点分散
有玩过大型网游的同学都会知道 , 网游是有很多个区的 , 一般都是按照地域来分,例如广东专区,北京专区 。如果一个在广东的玩家,去北京专区玩,那么他会感觉明显比在广东专区卡 。实际上,这些大区的名称就已经说明了,它的服务器所在地,所以 , 广东的玩家去连接地处北京的服务器,网络当然会比较慢 。
当一个系统和服务足够大的时候,就必须开始考虑异地部署的问题了 。让你的服务,尽可能离用户更近 。我们前面已经提到了Web的静态资源,可以存放在CDN上,然后通过DNS/GSLB的方式,让静态资源的分散“全国各地” 。但是,CDN只解决的静态资源的问题,没有解决后端庞大的系统服务还只集中在某个固定城市的问题 。
这个时候,异地部署就开始了 。异地部署一般遵循:核心集中,节点分散 。
· 核心集中:实际部署过程中,总有一部分的数据和服务存在不可部署多套,或者部署多套成本巨大 。而对于这些服务和数据,就仍然维持一套,而部署地点选择一个地域比较中心的地方,通过网络内部专线来和各个节点通讯 。
· 节点分散:将一些服务部署为多套,分布在各个城市节点 , 让用户请求尽可能选择近的节点访问服务 。
例如,我们选择在上海部署为核心节点,北京,深圳,武汉 , 上海为分散节点(上海自己本身也是一个分散节点) 。我们的服务架构如图:
需要补充一下的是,上图中上海节点和核心节点是同处于一个机房的,其他分散节点各自独立机房 。
国内有很多大型网游,都是大致遵循上述架构 。它们会把数据量不大的用户核心账号等放在核心节点 , 而大部分的网游数据 , 例如装备、任务等数据和服务放在地区节点里 。当然,核心节点和地域节点之间,也有缓存机制 。
二、 节点容灾和过载保护
节点容灾是指,某个节点如果发生故障时,我们需要建立一个机制去保证服务仍然可用 。毫无疑问,这里比较常见的容灾方式,是切换到附近城市节点 。假如系统的天津节点发生故障,那么我们就将网络流量切换到附近的北京节点上 。考虑到负载均衡,可能需要同时将流量切换到附近的几个地域节点 。另一方面 , 核心节点自身也是需要自己做好容灾和备份的 , 核心节点一旦故障 , 就会影响全国服务 。
过载保护,指的是一个节点已经达到最大容量,无法继续接接受更多请求了 , 系统必须有一个保护的机制 。一个服务已经满负载 , 还继续接受新的请求,结果很可能就是宕机,影响整个节点的服务,为了至少保障大部分用户的正常使用,过载保护是必要的 。
解决过载保护,一般2个方向:
· 拒绝服务,检测到满负载之后,就不再接受新的连接请求 。例如网游登入中的排队 。
· 分流到其他节点 。这种的话,系统实现更为复杂,又涉及到负载均衡的问题 。
小结
Web系统会随着访问规模的增长,渐渐地从1台服务器可以满足需求,一直成长为“庞然大物”的大集群 。而这个Web系统变大的过程,实际上就是我们解决问题的过程 。在不同的阶段,解决不同的问题,而新的问题又诞生在旧的解决方案之上 。
推荐阅读
- 公众号怎么做赚钱,公众号要怎么赚钱
- 怎么让硬盘不被删除软件,如何让硬盘数据不被恢复
- 怎么用chatgpt手机,chatpic怎么打开
- 钉钉群家长会直播回放,钉钉群直播开家长会
- 二分查找java完整代码 二分查询 java
- 如何快速推广网站,怎么快速推广网站
- 手机上怎么看u盘视频,手机上怎么看u盘视频教程
- 火影手游直播素材免费吗,火影游戏直播视频
- c语言中源函数 c语言中源文件是什么意思