服务端缓存是服务实现中所常常采用的一种提高服务性能的方法,除了能够提高服务的运行效率之外,服务端缓存还常常用来提高服务的扩展性,因此在一些大规模的Web应用中常常构建一个庞大的服务端缓存,最常用的就是Memcached。 都玩过一些网络联机游戏吧。这些游戏常常添加了对战功能,并提供了来显示具有最优秀战绩的玩家以及当前玩家在系统中的排名。这是游戏开发商所常常采用的一种聚拢玩家人气的手段。而希望在游戏中证明自己的玩家则会由此激发斗志,进而花费更多时间来在中取得更好的成绩。 一个自然而然的想法就是在对排名进行一次计算后,在服务端将该排名缓存起来,并在其它玩家访问的时候直接返回该缓存中所记录的结果。而在一定时间段之后,如一个小时,再对缓存中的数据进行更新。这样就不再需要每个小时执行成千上万次的排名计算了。 而这就是服务端缓存所提供的最重要功能。既可以提高单个请求的响应速度,又可以降低服务层及数据库层的压力。除此之外多个服务实例都可以读取该服务端缓存所缓存的信息,因此也不再需要担心这些数据在各个服务实例中都保存了一份进而需要彼此同步的问题,也即是提高了扩展性。 而Memcached就是一个使用了BSD许可的服务端缓存实现。但是与其它服务端缓存实现不同的是,其主要由两部分组成:运行的Memcached服务实例,以及用于访问这些服务实例的客户端。因此相较于普通服务端缓存实现中各个缓存都运行在服务实例之上的情况,Memcached服务实例则是在服务实例之外运行的: 从上图中可以看出,由于Memcached缓存实例是于各个应用服务器实例运行的,因此应用服务实例可以访问任意的缓存实例。而传统的缓存则与特定的应用实例绑定,因此每个应用实例将只能访问特定的缓存。这种绑定一方面会导致整个应用所能够访问的缓存容量变得很小,另一方面也可能导致不同的缓存实例中存在着冗余的数据,从而降低了缓存系统的整体效率。
|