高效缓存Memcached 集成使用说明_第1页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高效缓存memcached 集成使用说明from: 介绍与分析 memcached是一种集中式cache,支持分布式横向扩展。总结几个它的特点来理解一下它的优点和限制。 memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化。对于cpu要求很低,所以经常采纳将memcached服务端和一些cpu高消耗memory低消耗应用部属在一起。(作为我们aep正巧有这样的环境,我们的接口服务器有多台,接口服务器对于cpu要求很高(因为ws-security),但是对于memory要求很低,因此可以用作memcached的服务端部属机器) 集中式cache:避免了分布式

2、cache的传扬问题,但是需要非单点保证其牢靠性,这个就是后面集成中所作的cluster的工作,可以将多个memcached作为一个虚拟的cluster,同时对于cluster的读写和一般的memcached的读写性能没有差别。 分布式扩展:memcached的很突出一个优点,就是采纳了可分布式扩展的模式。可以将部属在一台机器上的多个memcached服务端或者部署在多个机器上的memcached服务端组成一个虚拟的服务端,对于调用者来说彻低屏蔽和透亮。提高的单机器的内存利用率,也提供了scale out的方式。 socket通信:传输内容的大小以及序列化的问题需要注重,虽然memcached

3、通常会被放置到内网作为cache,socket传输速率应当比较高(当前支持t和udp两种模式,同时按照客户端的不同可以挑选用法nio的同步或者异步调用方式),但是序列化成本和带宽成本还是需要注重。这里也提一下序列化,对于对象序列化的性能往往让大家头痛,但是假如对于同一类的class对象序列化传输,第一次序列化时光比较长,后续就会优化,其实也就是说序列化最大的消耗不是对象序列化,而是类的序列化。假如穿过去的只是字符串,那么是最好的,省去了序列化的操作,因此在memcached中保存的往往是较小的内容。 特别的内存分配机制:首先要解释的是memcached支持最大的存储对象为1m。它的内存分配比较

4、特别,但是这样的分配方式其实也是对于性能考虑的,容易的分配机制可以更简单回收再分配,节约对于cpu的用法。这里用一个酒窖比方来解释这种内存分配机制,首先在memcached起来的时候可以通过参数设置用法的总共的memory,这个就是建筑一个酒窖,然后在有酒进入的时候,首先申请(通常是1m)的空间,用来建酒架,酒架按照这个酒瓶的大小分割酒架为多个小格子安放酒瓶,将同样大小范围内的酒瓶都放置在一类酒架上面。例如20cm半径的酒瓶放置在可以容纳20-25cm的酒架a上,30cm半径的酒瓶就放置在容纳25-30cm的酒架b上。回收机制也很容易,首先新酒入库,看看酒架是否有可以回收的地方,假如有挺直用法

5、,假如没有申请新的地方,假如申请不到,采纳配置的过期策略。这个特点来看,假如要放的内容大小非常离散,同时大小比例相差梯度很显然,那么可能对于用法空间来说不好,可能在酒架a上就放了一瓶酒,但占用掉了一个酒架的位置。 cache机制容易:有时候无数开源的项目做的四平八稳,但是最后也就是由于过于注意一些非须要性的功能而拖累了性能,这里要提到的就是memcached的容易性。首先它没有什么同步,消息分发,两阶段提交等等,它就是一个很容易的cache,把东西放进去,然后可以取出来,假如发觉所提供的key没有命中,那么就很直白的告知你,你这个key没有任何对应的东西在缓存里,去数据库或者其他地方取,当你在

6、外部数据源取到的时候,可以挺直将内容置入到cache中,这样下次就可以命中了。这里会提到怎么去同步这些数据,两种方式,一种就是在你修改了以后立即更新cache内容,这样就会即时生效。另一种是说容许有失效时光,到了失效时光,自然就会将内容删除,此时再去去的时候就会命中不了,然后再次将内容置入cache,用来更新内容。后者用在一些时时性要求不高,写入不常见的状况。 客户端的重要性:memcached是用c写的一个服务端,客户端没有规定,反正是socket传输,只要语言支持socket通信,通过command的容易协议就可以通信,但是客户端设计的合理非常重要,同时也给用法者提供了很大的空间去扩展和设

7、计客户端来满足各种场景的需要,包括容错,权重,效率,特别的功能性需求,嵌入框架等等。 几个应用点:小对象的缓存(用户的token,权限信息,资源信息)。小的静态资源缓存。sql结果的缓存(这部分用的好,性能提高相当大,同时因为memcached自身提供scale out,那么对于db scale out的老大难问题无疑是一剂好药)。esb消息缓存。 集成设计 为什么需要集成?挺直用法现有的两个java实现memcached是否就可以了? 当前集成主要为了两方面考虑,首先是便利的配置用法,如何将memcached内嵌到类似于asf以及其他框架中去,并且通过配置文件便利用法,这就需要作部分的集成工

8、作,这部分工作主要是定义了配置文件以及通过stax去解析配置的功能。然后是如何管理memcached,这部分内容包括了初始化,运行期检测,资源回收的工作。最后是扩展,这里的扩展分成两部分(功能的扩展以及框架实现的扩展),功能扩展例如当前扩展了虚拟的cluster,可以让多个memcached client组成一个虚拟的cluster,假如通过放入cluster的方式放入到其中一个cache client中的话,那么就可以在囫囵cluster都作好备份,这样其实可以按照memcached的单机多实例以及多机多实例作交互备份,提高牢靠性。固然后续还有无数可以扩展的内容,这里只是一个开始。框架实现的

9、扩展指的是这里采纳了类似于jdk的jaxp的框架设计,只是规定了框架api结构,至于实现者动态载入,这个和asf等现在可扩展的框架一样,提供了很便利的扩展点,后续的设计中会提到。 接口设计类图:图1 cache接口包类图 icache和imemcachedcache实现的是最基本的cache的功能,只是imemcachedcache有所增加,提供了对于虚拟的cluster的操作,批量操作,统计的功能。icachemanager和imemcachedcachemanager分离是对于上面两个cache的管理类,按照配置文件解析,初始化客户端池,建立虚拟,销毁客户端池等工作。 图2 memcach

10、ed 实现包 省略了一些辅助类定义。这部分是详细的实现,同时可以在图上看到spi包内的cachemanagerfactory就是用来提供扩展用法的接口。只需要定义在jar的meta-inf下面建立services名目,建立两个名为:com.alisoft.xplatfo.asf.cache.imemcachedcachemanager和com.alisoft.xplatform.asf.cache.spi.cachemanagerfactory的文件就可以替换memcachedcachemanager和cachemanagerfactory的实现类,从而转变memcached client实现

11、机制。假如没有这两个文件在classpath名目下面,那么默认将会用法当前框架中的两个实现。 图3 memcached的结构图 memcached server就是部署在不同服务器或者在同一台服务器上的memcached实例,普通采纳后台守护进程方式运行。socketpool是客户端衔接到服务端的socket通信层,memcached client可以归属为虚拟的cluster,memcachedcachemanager作用是管理cluster和cache。从这个结构图可以看出客户端的每一层都是很自立,这样有利于层次的交互,以及组合扩展。测试与用法1 配置:需要有一个名为memcached.x

12、ml的文件在classpath中,可以在jar里面也可以在随意classpath可以找的到的地方,需要注重的是,cachemanager实现了对于多个memcached.xml merge的功能。详细的配置内容如下: ?xml version="1.0" encoding="utf-8"? memcached /总标签 /memcached client的配置,也就是一个imemcachedcache的配置。name必需填,表示cache的名称,socketpool必需填,表示用法的远程通信衔接池是哪一个,参看后面向于socketpool的定义。后面都是

13、可选的,第三个参数表示传输的时候是否,第四个参数表示默认的编码方式 client name="mclient1" socketpool="pool1" enable="ue" defaultencoding="utf-8" !-errorhandler /errorhandler- /可定义错误处理类,普通不需要定义 /client client name="mclient2" socketpool="pool2" compressenable="true"

14、; defaultencoding="utf-8" /client /socketpool是通信衔接池定义,每一个memcached client要和服务端交互都必需有通信衔接池作为底层数据通信的支持,name必填,表示名字,同时也是memcached client指定socketpool的依据,failover表示对于服务器浮现问题时的自动修复。initconn初始的时候衔接数,minconn表示最小闲置衔接数,maxconn最大衔接数,maintsleep表示是否需要延时结束(最好设置为0,假如设置延时的话那么就不能够立即回收全部的资源,假如此时从新启动同样的资源分配,

15、就会浮现问题),nagle是tcp对于socket创建的算法,socketto是socket衔接超时时光,alivecheck表示心跳检查,确定服务器的状态。servers是memcached服务端开的地址和ip列表字符串,weights是上面服务器的权重,必需数量全都,否则权重无效 socketpool name="pool1" failover="true" initconn="10" minconn="5" maxconn="250" maintsleep="0" na

16、gle="false" socketto="3000" alivecheck="true" servers 10.0.68.210:12000,10.0.68.210:12222 /servers weights 5,5 /weights /socketpool socketpool name="pool2" failover="true" initconn="10" minconn="5" maxconn="250" maintsleep="0" nagle="false" socketto="3000" alivecheck="true" servers 10.0.68.210:22000,10.0.68.210:22222 /servers weights 5,5 /weights /socketpool /虚拟集群设置,这里将几个client的cache设置为一个虚拟集群,当对这些imemcachedcache作集群操作的时候,就会自动地对集群中全

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论