缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中。以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器。
上面的这种说法是一种通俗的说法。在具体的项目架构中。缓存服务。往往指的把一些用户频繁访问的资源放入到内存里面。收到数据快速返还给用户。举一个简单的例子
通过上面的模型我们看出。当用户量少。这个访问速度还是可以接受。但是当用户量上来以后。可能对服务器造成致命性的打击。大家都知道查询数据库或者读取文件这是非常耗时的操作。当用户量少的时候。你或许感觉不出来速度的快慢。但是仔细想想当用户是成千上万的时候就会导致数据库的拥堵从而导致这个服务的宕机。
在上面的模型中我们很容易想到的解决方案是。1.增加数据库的配置。来满足更多用户的同时访问。2.想办法在登录服务器和数据库之间增加一层缓存层。把用户的热点数据放到内存里面不需要每次都请求数据库。
第一种方案仔细想一想是行不通的。因为硬件资源是有限。不能无限制的增加数据库的配置来满足我们的需求。
第二种方案使我们目前想到的最优解决方案了。我们可以通过软件层面的问题来解决一些硬件层面的问题。所以这个请求就会变成下面的这个图
上面的这个图目前可以说是我能想到的最优解决方案了。当用户访问缓存服务没有数据的时候就会从数据库服务拉去数据。同时在缓存服务里面留下缓存。下次用户再访问的时候就会从缓存服务直接返回给用户。因为数据都在内存里面所以速度会很快。
不过这个时候有人会可能看出问题来。那就是数据的一致性问题。因为同一份数据在缓存和数据库都有。所以我说这方面目前的方案是最优的但不是最好的。多一个地方存储数据。肯定会增加数据不一直的风险。这或许就是鱼和熊掌不可兼得。不过我们目前用它肯定是利大于弊。因为可以服务更多的用户。数据的一致性我们可以想很多的方案尽量来减少数据的不一致性。
不过缓存服务对于那些很久都不变一次的数据。绝对是一个利器。比如我们在游戏里面的排行榜。根本不需要做到实时变化。而这个数据又是一个热点数据。查询量居多。这个时候就体验到了缓存服务带来的快感。
现在比较成熟的数据服务器有redis和Memcache。这两种服务各有优缺点。大家可以根据自己的项目选择。还有一种就是自己实现的。不过这些需要注意在使用的时候不能乱用。例如大家都知道现在这种做法其实是拿空间换的时间。这里的空间大多指的是内存。内存也是硬件。所以肯定不能无线扩展。所以一定要定好淘汰策略。来释放内存。很多情况下需要根据自己的业务来定制这个淘汰策略。例如我们的用户信息在内存里面是缓存6个小时。这个是通过分析我们的用户行为之后得到的数据。所以这个度大家一定要把握好。
写了这么多。其实就是告诉大家项目架构的演化。都是在需求中进化出来。当你在实现一个业务功能的时候可以想的更多。上面的模型其实是很简单的项目模型了在实际项目中。我们还会出现二级缓存。三级缓存等等。在开发游戏服务器断时能让用户多块拿到数据就多块。要不整个游戏体验就感觉特别的卡。
本文地址:https://gpu.xuandashi.com/7228.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!