首页 > 网站建设 >

大型网站建设怎样利用分布式缓存进行伸缩性设计

发布时间:2018-11-08 作者:深圳网站建设

大型网站建设怎样利用分布式缓存进行伸缩性设计
  分布式缓存集群的伸缩性设计深圳网站建设公司在本本站前面的文章中讨论过分布式缓存,不同于应用服务器集群的伸缩性设计,分布式缓存集群的伸缩性不能使用简单的负载均衡手段来实现。
 和所有服务器都部署相同应用的应用服务器集群不同,分布式缓存服务器集群中不同服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问。这个特点会严重制约分布式缓存集群的伸缩性设计,因为新上线的缓存服务器没有缓存任何数据,而己下线的缓存服务器还缓存着网站的许多热点数据。
  必须让新上线的缓存服务器对整个分布式缓存集群影响最小,也就是说新加入缓存服务器后应使整个缓存服务器集群中已经缓存的数据尽可能还被访问到,这是分布式缓存集群伸缩性设计的最主要目标。
一、大型网站建设Memcached分布式缓存集群的访问模型
 以Memcached为代表的分布式缓存,访问模型如图6-10所示。
大型网站建设集群模式之分布缓存访问模型示意图6-10
  应用程序通过Memcached客户端访问Memcached服务器集群,Memcached客户端主要由组API、Memcached服务器集群路由算法、Memcached服务器集群列表及通信模块构成。
  其中路由算法负责根据应用程序输入的缓存数据KEY计算得到应L亥将数据写入到Memcached的哪台服务器(写缓存)或者应该从哪台服务器读数据(读缓存)。
  一个典型的写缓存操作如图6-10中箭头所示路径。应用程序输入需要写缓存的数据路<’BEIJING’,DATA>,API将KEY(’BEIJING’)输入路由算法模块,路由算法根据KEY和Memcached集群服务器列表计算得到一台服务编号(NODEl).进而得到该机器的IP地址和端口(10. 0 0 0:91000)。API调用通信模块和编号为NODE1的服务器通信,将数据的<’BEIjING’,DATA>写入该服务器。完成次分布式缓存的写操作。
  读缓存的过程和写缓存一样,由于使用同样的路由算法和服务器列表总是访问相同的服务器(NODEl)去读取数据。只要应用程序提供相同的KEY(’BEIJING’),Memcached客户端只要服务器还缓存着该数据就能保证缓存命中。
二、大型网站建设之Memcached分布式缓存集群的伸缩性挑战
  由上述讨论可得知,在Memcached分布式缓存系统中,对于服务器集群的管理,路由算法至关重要,和负载均衡算法样,决定着究竟该访问集群中的哪台服务器。
  简单的路由算法可以使用余数Hash:用服务器数目除以缓存数据KEY的Hash值余数为服务器列表下标编号。假设图6-10中BEIJING的Hash值是490806430 (Java中的HashCode()返回值),用服务器数目3除以该值,得到余数l,对应节点NODE1。由于HashCode具有随机性,因此使用余数Hash路由算法可保证缓存数据在整个Memcached服务器集群中比较均衡地分布。
  对余数Hash路由算法稍加改进,就可以实现和负载均衡算法中加权负载均衡样的加权路由。事实上,如果不需要考虑缓存服务器集群伸缩性,余数Hash几乎可以满足绝大多数的缓存路由需求。但是,当分布式缓存集群需要扩容的时候,事情就变得棘手了。
  假设由于业务发展,网站需要将3台缓存服务器扩容至4台。更改服务器列表,仍旧使用余数Hash.用4除以’BEIjING’的Hash值49080643余数为2,对应服务器NODE2。由于数据。<’BEIJING’,DATA>缓存在NODE1,对NODE2的读缓存操作失畋,缓存没有命中。
  很容易就可以计算出.3台服务器扩容至4台服务器,大约有75% (3/4)被缓存了的数据不能正确命中,随着服务器集群规模的增大这个比例线性上升。当100台服务器的集群中加入台新服务器,不能命中的概率是99%(Ⅳ(.V+l))。
  这个结果显然是不能接受的,在网站业务中,大部分的业务数据读操作请求事实上是通过缓存获取的,只有少量读操作请求会访问数据库,因此数据库的负载能力是以有缓存为前提而设计的。当大部分被缓存了的数据因为服务器扩容而不能正确读取时,这些数据访问的压力就落到了数据库的身上,这将大大超过数据库的负载能力,严重的可能会导致数据库宕机(这种情况下,不能简单重启数据库,网站也需要较长时间才能逐渐恢复正常。
  本来加入新的缓存服务器是为了降低数据库的负载压力,但是操作不当却导致了数据库的崩溃。如果不对问题和解决方案有透彻了解,网站技术总有想不到的陷阱,让网站建设架构师一脚踩空。遇到这种情况,用某网站位资源架构师的话说,就是“一股寒气从脚底板窜到了脑门心”。
  一种解决办法是在网站访问量最少的时候扩容缓存服务器集群,这时候对数据库的负载冲击最小。然后通过模拟请求的方法逐渐预热缓存,使缓存服务器中的数据重新分布。但是这种方案对业务场景有要求,还需要技术团队通宵加班(网站访问低谷通常是在半夜)。能不能通过改进路由算法,使得新加入的服务器不影响大部分缓存数据的正确命中呢?网站建设公司认为目前比较流行的算法是一致性Hash算法。好了本文关于大型网站建设集群分布式缓存伸缩性架构设计本文就到这里,博纳网络会在下一篇文章中详细介绍一致性Hash算法的详细操作步骤。谢谢关注。
 
文章标题:大型网站建设怎样利用分布式缓存进行伸缩性设计
本文地址:https://www.198bona.com/news/1676.html
如果您觉得案例还不错请帮忙分享:

网站建设

网络推广

解决方案

域名主机

建站行业资讯