- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                
Web        缓存架构介绍 
                                                                             1 
   计算机领域多处地方用到缓存,比如说为了缓解               CPU  和内存之间的速度不匹配问题,我们往往通过 
   增加一级、二级、三级缓存,         CPU 先从缓存中取指令,如果取不到,再从内存中取,并更新缓存,同 
   时,根据程序的局部性原理,使得大部分情况下缓存都会命中。 
   目前,Web   应用的核心数据通常存放在数据库中,            比如说用户信息、  订单信息、 交易信息等,  同时, 
   数据库和编程语言是无关的,通过           SQL  交互, Java 、Php  等语言写的程序需要访问数据库,执行业 
   务逻辑, 展示结果给用户。  但是数据库有一定的局限性,              譬如: 1.数据库连接是非常       昂贵  的资源, 
   为了复用这些资源,目前采用连接池技术,             2. 连接池的连接数是有限的,如果用户过多,势必要等 
   待, 3. 读写数据时需要加锁。 
   通过上述介绍,我们知道一个大型系统中数据库往往会成为瓶颈,我们不能每次访问都访问数据库, 
   尤其是在多用户,大并发的情况下。面对这种情况,我们通常采用何种方法呢?在计算机行业中的所 
   有问题,都可以通过增加一个抽象层来解决。那么,针对数据库这个瓶颈,我们可以在应用层和数据 
   库层增加一层,即缓存层。 
   如何实现缓存 
   如果你是某某大型公司的首席架构师,现在公司需要自研一套缓存系统,你应该怎么设计呢?我想在 
   设计之前应该想好以下几个问题: 
1. 缓存里放什么格式的数据? 
2. 应用程序(客户端)如何访问缓存? 
3. 缓存空间被应用程序用完了怎么办? 
4. 要不要支持分布式存储(数据的分片),怎么实现? 
                                                                             2 
   1. 缓存里存放什么格式的数据 
   目前常见的数据格式有序列化对象、           XML 、JSON 、字符串( key,value )和基本的数据结构,其中针 
   对 Java  语言的序列化对象有序列化和反序列化,          而 Google 研发的  protobuf 是和语言无关的,  比如 
   说 Python 将某对象序列化,     Java  能将这个对象进行反序列化。 
   2. 应用程序该如何访问缓存 
   考虑到公司有很多后端小组,并且使用不同的编程语言,这就要求我们自研的缓存系统应该和编程语 
   言无关,基于此,我们需要制定一套协议来支持各种语言。客户端如何使用这套协议?最常见的就是 
   客户端 / 服务器模型。首先,服务器监听请求;接着,客户端发送请求,获得响应,其中客户端发送 
   的请求就是协议;最后,基于         Socket 通信。比如说:    set name mukedadaget name 
   3. 缓存空间被用完了怎么办? 
   缓存服务器端在启动的时候,应该设置缓存大小,当缓存被沾满时,采用                       LRU 算法。 
   4. 实现分布式存储 
   对于大型应用服务器,      单机的缓存服务器是支撑不了的。          那么,就需要对缓存服务器进行水平扩展             (即 
   增删服务器,当活动结束后,就需要考虑删减服务器),那么用什么算法让数据相对平均的分配到每 
   台服务器?同时,这个算法应该放在客户端还是服务端呢? 
1. 客户端实现 
                                                                             3 
注意这里的客户端指的是         Web 应用服务,服务器列表信息通过配置文件获得。               当节点数发生变化时, 
需要让客户端知晓。 
它的典型应用是      Memcached ,Memcached   使用的是一致性      Hash 算法,在介绍它之前,我们先来 
看一下余数算法。对于用户要存储的(             key ,value  ),计算 key 的整数哈希值,然后对服务器的数目 
求余,这样来确
                 原创力文档
原创力文档 
                        

文档评论(0)