5. NoSQL存储
不管数据库的读还是写,当流量再进一步上涨 , 终会达到“人力有穷时”的场景 。继续加机器的成本比较高,并且不一定可以真正解决问题的时候 。这个时候,部分核心数据,就可以考虑使用NoSQL的数据库 。NoSQL存储,大部分都是采用key-value的方式,这里比较推荐使用上面介绍过Redis,Redis本身是一个内存cache,同时也可以当做一个存储来使用,让它直接将数据落地到磁盘 。
这样的话,我们就将数据库中某些被频繁读写的数据 , 分离出来,放在我们新搭建的Redis存储集群中,又进一步减轻原来MySQL数据库的压力,同时因为Redis本身是个内存级别的Cache,读写的性能都会大幅度提升 。
国内一线互联网公司,架构上采用的解决方案很多是类似于上述方案,不过,使用的cache服务却不一定是Redis,他们会有更丰富的其他选择,甚至根据自身业务特点开发出自己的NoSQL服务 。
6. 空节点查询问题
当我们搭建完前面所说的全部服务,认为Web系统已经很强的时候 。我们还是那句话,新的问题还是会来的 。空节点查询,是指那些数据库中根本不存在的数据请求 。例如,我请求查询一个不存在人员信息,系统会从各级缓存逐级查找,最后查到到数据库本身,然后才得出查找不到的结论,返回给前端 。因为各级cache对它无效,这个请求是非常消耗系统资源的,而如果大量的空节点查询,是可以冲击到系统服务的 。
在我曾经的工作经历中 , 曾深受其害 。因此 , 为了维护Web系统的稳定性,设计适当的空节点过滤机制 , 非常有必要 。
我们当时采用的方式 , 就是设计一张简单的记录映射表 。将存在的记录存储起来 , 放入到一台内存cache中,这样的话 , 如果还有空节点查询,则在缓存这一层就被阻挡了 。
异地部署(地理分布式)
完成了上述架构建设之后,我们的系统是否就已经足够强大了呢?答案当然是否定的哈,优化是无极限的 。Web系统虽然表面上看,似乎比较强大了,但是给予用户的体验却不一定是最好的 。因为东北的同学,访问深圳的一个网站服务,他还是会感到一些网络距离上的慢 。这个时候,我们就需要做异地部署,让Web系统离用户更近 。
一、 核心集中与节点分散
有玩过大型网游的同学都会知道,网游是有很多个区的,一般都是按照地域来分,例如广东专区,北京专区 。如果一个在广东的玩家,去北京专区玩 , 那么他会感觉明显比在广东专区卡 。实际上,这些大区的名称就已经说明了,它的服务器所在地,所以,广东的玩家去连接地处北京的服务器,网络当然会比较慢 。
当一个系统和服务足够大的时候,就必须开始考虑异地部署的问题了 。让php多线程处理大数据库你的服务,尽可能离用户更近 。我们前面已经提到了Web的静态资源 , 可以存放在CDN上,然后通过DNS/GSLB的方式,让静态资源的分散“全国各地” 。但是,CDN只解决的静态资源的问题,没有解决后端庞大的系统服务还只集中在某个固定城市的问题 。
这个时候,异地部署就开始了 。异地部署一般遵循:核心集中,节点分散 。
· 核心集中:实际部署过程中,总有一部分的数据和服务存在不可部署多套,或者部署多套成本巨大 。而对于这些服务和数据,就仍然维持一套,而部署地点选择一个地域比较中心的地方,通过网络内部专线来和各个节点通讯 。
· 节点分散:将一些服务部署为多套,分布在各个城市节点,让用户请求尽可能选择近的节点访问服务 。
推荐阅读
- b站竖屏全景直播,b站如何竖屏直播
- c语言输出属于什么工程,c语言输出到文件用什么函数
- oracle查询换行符,oracle replace换行符
- c语言指针函数是什么 c语言指针的定义和使用
- 手机什么型号换系统好些,手机什么系统好用好用
- 虚拟空间什么,虚拟空间运行
- 直播运营助理跟运营的区别,直播助理和运营助理
- php数据库类型 php的数据库在哪个目录下
- postgresql密码访问的简单介绍