大型网站,比如门户网站。在面对大量用户访问、高并发要求方面,基本的办理方案集中在这样几个环节:利用高性能的做事器、高性能的数据库、高效率的编程措辞、还有高性能的Web容器。但是除了这几个方面,还没法根本办理大型网站面临的高负载和高并发问题。
上面供应的几个办理思路在一定程度上也意味着更大的投入,并且这样的办理思路具备瓶颈,没有很好的扩展性,下面我从低本钱、高性能和高扩展性的角度来说说我的一些履历。
1、HTML静态化
实在大家都知道,效率最高、花费最小的便是纯静态化的html页面,以是我们尽可能使我们的网站上的页面采取静态页面来实现,这个最大略的方法实在也是最有效的方法。但是对付大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是涌现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,乃至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最大略的信息录入自动天生静态页面,还能具备频道管理、权限管理、自动抓取等功能,对付一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对付交互性哀求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量利用的策略,像Mop的大杂烩便是利用了这样的策略,网易社区等也是如此。
同时,html静态化也是某些缓存策略利用的手段,对付系统中频繁利用数据库查询但是内容更新很小的运用,可以考虑利用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息实在大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问要求。
2、图片做事器分离
大家知道,对付Web做事器来说,不管是Apache、IIS还是其他容器,图片是最花费资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采取的策略,他们都有独立的图片做事器,乃至很多台图片做事器。这样的架构可以降落供应页面访问要求的做事器系统压力,并且可以担保系统不会由于图片问题而崩溃,在运用做事器和图片做事器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以只管即便少支持,尽可能少的LoadModule,担保更高的系统花费和实行效率。
3、数据库集群和库表散列
大型网站都有繁芜的运用,这些运用必须利用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法知足运用,于是我们须要利用数据库集群或者库表散列。
在数据库集群方面,很多数据库都有自己的办理方案,Oracle、Sybase等都有很好的方案,常用的MySQL供应的Master/Slave也是类似的方案,您利用了什么样的DB,就参考相应的办理方案来履行即可。
上面提到的数据库集群由于在架构、本钱、扩展性方面都会受到所采取DB类型的限定,于是我们须要从运用程序的角度来考虑改进系统架构,库表散列是常用并且最有效的办理方案。我们在运用程序中安装业务和运用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低本钱的提升系统的性能并且有很好的扩展性。sohu的论坛便是采取了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,终极可以在配置文件中进行大略的配置便能让系统随时增加一台低本钱的数据库进来补充系统性能。
4、缓存
缓存一词搞技能的都打仗过,很多地方用到缓存。网站架构和网站开拓中的缓存也是非常主要。这里先讲述最基本的两种缓存。高等和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟习的人都能知道Apache供应了自己的缓存模块,也可以利用外加的Squid模块进行缓存,这两种办法均可以有效的提高Apache的访问相应能力。
网站程序开拓方面的缓存,Linux上供应的Memory Cache是常用的缓存接口,可以在web开拓中利用,比如用Java开拓的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大型社区利用了这样的架构。其余,在利用web措辞开拓的时候,各种措辞基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多了,.net不是很熟习,相信也肯定有。
5、镜像
镜像是大型网站常采取的提高性能和数据安全性的办法,镜像的技能可以办理不同网络接入商和地域带来的用户访问速率差异,比如ChinaNet和EduNet之间的差异就匆匆使了很多网站在教诲网内搭建镜像站点,数据进行定时更新或者实时更新。在镜像的细节技能方面,这里岂论述太深,有很多专业的现成的办理架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。
6、负载均衡
负载均衡将是大型网站办理高负荷访问和大量并发要求采取的终极办理办法。
负载均衡技能发展了多年,有很多专业的做事供应商和产品可以选择,我个人打仗过一些办理方法,个中有两个架构可以给大家做参考。
1)硬件四层交流
第四层交流利用第三层和第四层信息包的报头信息,根据运用区间识别业务流,将全体区间段的业务流分配到得当的运用做事器进行处理。 第四层交流功能就象是虚IP,指向物理做事器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理做事器根本上,须要繁芜的载量平衡算法。在IP天下,业务类型由终端TCP或UDP端口地址来决定,在第四层交流中的运用区间则由源端和终端IP地址、TCP和UDP端口共同决定。
在硬件四层交流产品领域,有一些有名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够供应非常精良的性能和很灵巧的管理能力。Yahoo中国当初靠近2000台做事器利用了三四台Alteon就搞定了。
2)软件四层交流
大家知道了硬件四层交流机的事理后,基于OSI模型来实现的软件四层交流也就应运而生,这样的办理方案实现的事理同等,不过性能稍差。但是知足一定量的压力还是游刃有余的,有人说软件实现办法实在更灵巧,处理能力完备看你配置的熟习能力。
软件四层交流我们可以利用Linux上常用的LVS来办理,LVS便是Linux Virtual Server,他供应了基于心跳线heartbeat的实时灾害应对办理方案,提高系统的鲁棒性,同时可供了灵巧的虚拟VIP配置和管理功能,可以同时知足多种运用需求,这对付分布式的系统来说必不可少。
一个范例的利用负载均衡的策略便是,在软件或者硬件四层交流的根本上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采取,这样的架构低本钱、高性能还有很强的扩展性,随时往架构里面增减节点都非常随意马虎。这样的架构我准备空了专门详细整理一下和大家磋商。
一:高并发高负载类网站关注点之数据库
没错,首先是数据库,这是大多数运用所面临的首个SPOF。尤其是Web2.0的运用,数据库的相应是首先要办理的。
一样平常来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧低落。常用的优化方法是M-S(主-从)办法进行同步复制,将查询和操作和分别在不同的做事器上进行操作。我推举的是M-M-Slaves办法,2个主Mysql,多个Slaves,须要把稳的是,虽然有2个Master,但是同时只有1个是Active,我们可以在一定时候切换。之以是用2个M,是担保M不会又成为系统的SPOF。
Slaves可以进一步负载均衡,可以结合LVS,从而将select操作适当的平衡到不同的slaves上。
以上架构可以反抗到一定量的负载,但是随着用户进一步增加,你的用户表数据超过1千万,这时那个M变成了SPOF。你不能任意扩充Slaves,否则复制同步的开销将直线上升,怎么办?我的方法是表分区,从业务层面上进行分区。最大略的,以用户数据为例。根据一定的切分办法,比如id,切分到不同的数据库集群去。
全局数据库用于meta数据的查询。缺陷是每次查询,会增加一次,比如你要查一个用户nightsailer,你首先要到全局数据库群找到nightsailer对应的cluster id,然后再到指定的cluster找到nightsailer的实际数据。
每个cluster可以用m-m办法,或者m-m-slaves办法。这是一个可以扩展的构造,随着负载的增加,你可以大略的增加新的mysql cluster进去。
须要把稳的是:
1、禁用全部auto_increment的字段
2、id须要采取通用的算法集等分配
3、要具有比较好的方法来监控mysql主机的负载和做事的运行状态。如果你有30台以上的mysql数据库在跑就明白我的意思了。
4、不要利用持久性链接(不要用pconnect),相反,利用sqlrelay这种第三方的数据库链接池,或者干脆自己做,由于php4中mysql的链接池常常出问题。
二:高并发高负载网站的系统架构之HTML静态化
实在大家都知道,效率最高、花费最小的便是纯静态化 http://www.ablanxue.com/shtml/201207/776.shtml的html页面,以是我们尽可能使我们的网站上的页面采取静态页面来实现,这个最大略的方法实在也是 最有效的方法。但是对付大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是涌现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点 的新闻频道,乃至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最大略的信息录入自动天生静态页面,还能具备频道管理、权限 管理、自动抓取等功能,对付一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对付交互性哀求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量利用的策略,像Mop的大杂烩便是利用了这样的策略,网易社区等也是如此。
同时,html静态化也是某些缓存策略利用的手段,对付系统中频繁利用数据库查询但是内容更新很小的运用,可以考虑利用html静态化来实现,比如论坛 中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息实在大量被前台程序调用,但是更新频率很小,可以考虑将这 部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问要求高并发。
网站HTML静态化办理方案
当一个Servlet资源要求到达WEB做事器之后我们会添补指定的JSP页面来相应要求:
HTTP要求---Web做事器---Servlet--业务逻辑处理--访问数据--添补JSP--相应要求
HTML静态化之后:
HTTP要求---Web做事器---Servlet--HTML--相应要求
静态访求如下
Servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(request.getParameter(\"大众chapterId\"大众) != null){ String chapterFileName = \"大众bookChapterRead_\公众+request.getParameter(\公众chapterId\"大众)+\"大众.html\"大众; String chapterFilePath = getServletContext().getRealPath(\"大众/\"大众) + chapterFileName; File chapterFile = new File(chapterFilePath); if(chapterFile.exists()){response.sendRedirect(chapterFileName);return;}//如果有这个文件就见告浏览器转向 INovelChapterBiz novelChapterBiz = new NovelChapterBizImpl(); NovelChapter novelChapter = novelChapterBiz.searchNovelChapterById(Integer.parseInt(request.getParameter(\公众chapterId\"大众)));//章节信息 int lastPageId = novelChapterBiz.searchLastCHapterId(novelChapter.getNovelId().getId(), novelChapter.getId()); int nextPageId = novelChapterBiz.searchNextChapterId(novelChapter.getNovelId().getId(), novelChapter.getId()); request.setAttribute(\公众novelChapter\公众, novelChapter); request.setAttribute(\公众lastPageId\"大众, lastPageId); request.setAttribute(\"大众nextPageId\"大众, nextPageId); new CreateStaticHTMLPage().createStaticHTMLPage(request, response, getServletContext(), chapterFileName, chapterFilePath, \公众/bookRead.jsp\公众); } }
天生HTML静态页面的类:
package com.jb.y2t034.thefifth.web.servlet; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; / 创建HTML静态页面 功能:创建HTML静态页面 韶光:2009年1011日 地点:home @author mavk / public class CreateStaticHTMLPage { / 天生静态HTML页面的方法 @param request 要求工具 @param response 相应工具 @param servletContext Servlet高下文 @param fileName 文件名称 @param fileFullPath 文件完全路径 @param jspPath 须要天生静态文件的JSP路径(相对即可) @throws IOException @throws ServletException / public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponse response,ServletContext servletContext,String fileName,String fileFullPath,String jspPath) throws ServletException, IOException{ response.setContentType(\"大众text/html;charset=gb2312\"大众);//设置HTML结果流编码(即HTML文件编码) RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);//得到JSP资源 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//用于从ServletOutputStream中吸收资源 final ServletOutputStream servletOuputStream = new ServletOutputStream(){//用于从HttpServletResponse中吸收资源 public void write(byte[] b, int off,int len){ byteArrayOutputStream.write(b, off, len); } public void write(int b){ byteArrayOutputStream.write(b); } }; final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));//把转换字节流转换成字符流 HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response){//用于从response获取结果流资源(重写了两个方法) public ServletOutputStream getOutputStream(){ return servletOuputStream; } public PrintWriter getWriter(){ return printWriter; } }; rd.include(request, httpServletResponse);//发送结果流 printWriter.flush();//刷新缓冲区,把缓冲区的数据输出 FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath); byteArrayOutputStream.writeTo(fileOutputStream);//把byteArrayOuputStream中的资源全部写入到fileOuputStream中 fileOutputStream.close();//关闭输出流,并开释干系资源 response.sendRedirect(fileName);//发送指定文件流到客户端 } }
三:高并发高负载类网站关注点之缓存、负载均衡、存储
缓存是另一个大问题,我一样平常用memcached来做缓存集群,一样平常来说支配10台旁边就差不多(10g内存池)。须要把稳一点,千万不能用利用
swap,最好关闭linux的swap。
负载均衡/加速
可能上面说缓存的时候,有人第一想的是页面静态化,所谓的静态html,我认为这是知识,不属于要点了。页面的静态化随之带来的是静态做事的
负载均衡和加速。我认为Lighttped+Squid是最好的办法了。
LVS <------->lighttped====>squid(s) ====lighttpd
上面是我常常用的。把稳,我没有用apache,除非特定的需求,否则我不支配apache,由于我一样平常用php-fastcgi合营lighttpd,
性能比apache+mod_php要强很多。
squid的利用可以办理文件的同步等等问题,但是须要把稳,你要很好的监控缓存的命中率,尽可能的提高的90%以上。
squid和lighttped也有很多的话题要谈论,这里不赘述。
存储
存储也是一个大问题,一种是小文件的存储,比如图片这类。另一种是大文件的存储,比如搜索引擎的索引,一样平常单文件都超过2g以上。
小文件的存储最大略的方法是结合lighttpd来进行分布。或者干脆利用Redhat的GFS,优点是运用透明,缺陷是用度较高。我是指
你购买盘阵的问题。我的项目中,存储量是2-10Tb,我采取了分布式存储。这里要办理文件的复制和冗余。
这样每个文件有不同的冗余,这方面可以参考google的gfs的论文。
大文件的存储,可以参考nutch的方案,现在已经独立为hadoop子项目。(你可以google it)
其他:
此外,passport等也是考虑的,不过都属于比较大略的了。
四:高并发高负载网站的系统架构之图片做事器分离
大家知道,对付Web 做事器来说,不管是Apache、IIS还是其他容器,图片是最花费资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采取的策略,他 们都有独立的图片做事器,乃至很多台图片做事器。这样的架构可以降落供应页面访问要求的做事器系统压力,并且可以担保系统不会由于图片问题而崩溃,在运用 做事器和图片做事器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以只管即便少支持,尽可能少的LoadModule, 担保更高的系统花费和实行效率。
利用Apache实现图片做事器的分离
缘由:
起步阶段的运用,都可能支配在一台做事器上(用度上的缘故原由)
第一个优先分离的,肯定是数据库和运用做事器。
第二个分离的,会是什么呢?各有各的考虑,我所在的项目组重点考虑的节约带宽,做事器性能再好,带宽再高,并发来了,也随意马虎撑不住。因此,我这篇文章的重点在这里。这里重点是先容实践,不一定符合所有情形,供看者参考吧,
环境先容:
WEB运用做事器:4CPU双核2G, 内存4G
支配:Win2003/Apache Http Server 2.1/Tomcat6
数据库做事器:4CPU双核2G, 内存4G
支配:Win2003/MSSQL2000
步骤:
步骤一:增加2台配置为:2CPU双核2G,内存2G普通做事器,做资源做事器
支配:Tomcat6,跑了一个图片上传的大略运用,(记得指定web.xml的<distributable/>),并指定域名为res1..com,res2..com,采取ajp协议
步骤二:修正Apache httpd.conf配置
原来运用的文件上传功能网址为:
1、/fileupload.html
2、/otherupload.html
在httpd.conf中增加如下配置
<VirtualHost :80> ServerAdmin webmaster@.com ProxyPass /fileupload.html balancer://rescluster/fileupload lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 ProxyPass /otherupload.html balancer://rescluster/otherupload.html lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 #<!--负载均衡--> <Proxy balancer://rescluster/> BalancerMember ajp://res1..com:8009 smax=5 max=500 ttl=120 retry=300 loadfactor=100 route=tomcat1 BalancerMember ajp://res2..com:8009 smax=5 max=500 ttl=120 retry=300 loadfactor=100 route=tomcat2 </Proxy> < /VirtualHost>
步骤三,修正业务逻辑:
所有上传文件在数据库中均采取全url的办法保存,例如产品图片路径存成:http://res1..com/upload/20090101/product120302005.jpg
现在,你可以无忧无虑了,带宽不足时,增加个几十台图片做事器,只须要轻微修正一下apache的配置文件,即可。
五:高并发高负载网站的系统架构之数据库集群和库表散列
大型网站都有繁芜的运用,这些运用必须利用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法知足运用,于是我们须要利用数据库集群或者库表散列。
在数据库集群方面,很多数据库都有自己的办理方案,Oracle、Sybase等都有很好的方案,常用的MySQL供应的Master/Slave也是类似的方案,您利用了什么样的DB,就参考相应的办理方案来履行即可。
上面提到的数据库集群由于在架构、本钱、扩展性方面都会受到所采取DB类型的限定,于是我们须要从运用程序的角度来考虑改进系统架构,库表散列是常用并 且最有效的办理方案。我们在运用程序中安装业务和运用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者 功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低本钱的提升系统的性能并且有很好的扩展性。sohu的论坛便是采取了这样的 架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,终极可以在配置文件中进行大略的配置便能让系 统随时增加一台低本钱的数据库进来补充系统性能。
集群软件的分类:
一样平常来讲,集群软件根据侧重的方向和试图办理的问题,分为三大类:高性能集群(High performance cluster,HPC)、负载均衡集群(Load balance cluster, LBC),高可用性集群(High availability cluster,HAC)。
高性能集群(High performance cluster,HPC),它是利用一个集群中的多台机器共同完成同一件任务,使得完成任务的速率和可靠性都远远高于单机运行的效果。填补了单机性能上的不敷。该集群在景象预报、环境监控等数据量大,打算繁芜的环境中运用比较多;
负载均衡集群(Load balance cluster, LBC),它是利用一个集群中的多台单机,完成许多并行的小的事情。一样平常情形下,如果一个运用利用的人多了,那么用户要求的相应韶光就会增大,机器的性能也会受到影响,如果利用负载均衡集群,那么集群中任意一台机器都能响运用户的要求,这样集群就会在用户发出做事要求之后,选择当时负载最小,能够供应最好的做事的这台机器来接管要求并相应,这样就可用用集群来增加系统的可用性和稳定性。这类集群在网站中利用较多;
高可用性集群(High availability cluster,HAC),它是利用集群中系统 的冗余,当系统中某台机器发生破坏的时候,其他后备的机器可以迅速的接替它来启动做事,等待故障机的维修和返回。最大限度的担保集群中做事的可用性。这类系统一样平常在银行,电信服务这类对系统可靠性有高的哀求的领域有着广泛的运用。
2 数据库集群的现状
数据库集群是将打算机集群技能引入到数据库中来实现的,只管各厂商流传宣传自己的架构如何的完美,但是始终不能改变Oracle当先,大家追逐的事实,在集群的办理方案上Oracle RAC还是领先于包括微软在内的其它数据库厂商,它能知足客户高可用性、高性能、数据库负载均衡和方便扩展的需求。
Oracle’s Real Application Cluster (RAC)
Microsoft SQL Cluster Server (MSCS)
IBM’s DB2 UDB High Availability Cluster(UDB)
Sybase ASE High Availability Cluster (ASE)
MySQL High Availability Cluster (MySQL CS)
基于IO的第三方HA(高可用性)集群
当前紧张的数据库集群技能有以上六大类,有数据库厂商自己开拓的;也有第三方的集群公司开拓的;还有数据库厂商与第三方集群公司互助开拓的,各种集群实现的功能及架构也不尽相同。
RAC(Real Application Cluster,真正运用集群)是Oracle9i数据库中采取的一项新技能,也是Oracle数据库支持网格打算环境的核心技能。它的涌现办理了传统数据库运用中面临的一个主要问题:高性能、高可伸缩性与低价格之间的抵牾。在很长一段韶光里,甲骨文都以其实时运用集群技能(Real Application Cluster,RAC)统治着集群数据库市场
六:高并发高负载网站的系统架构之缓存
缓存一词搞技能的都打仗过,很多地方用到缓存。网站架构和网站开拓中的缓存也是非常主要。这里先讲述最基本的两种缓存。高等和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟习的人都能知道Apache供应了自己的缓存模块,也可以利用外加的Squid模块进行缓存,这两种办法均可以有效的提高Apache的访问相应能力。
网站程序开拓方面的缓存,Linux上供应的Memory Cache是常用的缓存接口,可以在web开拓中利用,比如用Java开拓的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大 型社区利用了这样的架构。其余,在利用web措辞开拓的时候,各种措辞基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多 了,.net不是很熟习,相信也肯定有。
Java开源缓存框架
JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它许可你缓存企业级运用数据来更好的改进性能。缓存数据被自动复制,让你轻松进行Jboss做事器之间的集群事情。JBossCache能够通过Jboss运用做事或其他J2EE容器来运行一个Mbean做事,当然,它也能独立运行。 JBossCache包括两个模块:TreeCache和TreeCacheAOP。 TreeCache --是一个树形构造复制的事务处理缓存。 TreeCacheAOP --是一个“面向工具”缓存,它利用AOP来动态管理POJO
OSCache OSCache标记库由OpenSymphony设计,它是一种首创性的JSP定制标记运用,供应了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采取的高性能的J2EE缓存框架,OSCache能用于任何Java运用程序的普通的缓存办理方案。OSCache有以下特点:缓存任何工具,你可以不受限定的缓存部分jsp页面或HTTP要求,任何java工具都可以缓存。 拥有全面的API--OSCache API给你全面的程序来掌握所有的OSCache特性。 永久缓存--缓存能随意的写入硬盘,因此许可昂贵的创建(expensive-to-create)数据来保持缓存,乃至能让运用重启。 支持集群--集群缓存数据能被单个的进行参数配置,不须要修正代码。 缓存记录的过期--你可以有最大限度的掌握缓存工具的过期,包括可插入式的刷新策略(如果默认性能不须要时)。
JCACHE JCACHE是一种即将公布的标准规范(JSR 107),解释了一种对Java工具临时在内存中进行缓存的方法,包括工具的创建、共享访问、假脱机(spooling)、失落效、各JVM的同等性等。它可被用于缓存JSP内最常常读取的数据,如产品目录和价格列表。利用JCACHE,多数查询的反应韶光会由于有缓存的数据而加快(内部测试表明反应韶光大约快15倍)。
Ehcache Ehcache出自Hibernate,在Hibernate中利用它作为数据缓存的办理方案。
Java Caching System JCS是Jakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将工具缓冲到内存、硬盘。具有缓冲工具韶光过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的运用。 对付一些须要频繁访问而每访问一次都非常花费资源的工具,可以临时存放在缓冲区中,这样可以提高做事的性能。而JCS正是一个很好的缓冲工具。缓冲工具对付读操作远远多于写操作的运用性能提高非常显著。
SwarmCache SwarmCache是一个大略而功能强大的分布式缓存机制。它利用IP组播来有效地在缓存的实例之间进行通信。它是快速提高集群式Web运用程序的性能的空想选择。
ShiftOne ShiftOne Object Cache这个Java库供应了基本的工具缓存能力。实现的策略有前辈先出(FIFO),最近利用(LRU),最不常利用(LFU)。所有的策略可以最大化元素的大小,最大化其生存韶光。
WhirlyCache Whirlycache是一个快速的、可配置的、存在于内存中的工具的缓存。它能够通过缓存工具来加快网站或运用程序的速率,否则就必须通过查询数据库或其他代价较高的处理程序来建立。
Jofti Jofti可对在缓存层中(支持EHCache,JBossCache和OSCache)的工具或在支持Map接口的存储构造中的工具进行索引与搜索。这个框架还为工具在索引中的增编削供应透明的功能同样也为搜索供应易于利用的查询功能。
cache4j cache4j是一个有大略API与实现快速的Java工具缓存。它的特性包括:在内存中进行缓存,设计用于多线程环境,两种实现:同步与壅塞,多种缓存打消策略:LFU, LRU, FIFO,可利用强引用(strong reference)与软引用(soft reference)存储工具。
Open Terracotta 一个JVM级的开源群集框架,供应:HTTP Session复制,分布式缓存,POJO群集,超过群集的JVM来实现分布式运用程序折衷(采代替码注入的办法,以是你不须要修正任何)。
sccache SHOP.COM利用的工具缓存系统。sccache是一个in-process cache和二级、共享缓存。它将缓存工具存储到磁盘上。支持关联Key,任意大小的Key和任意大小的数据。能够自动进行垃圾网络。
Shoal Shoal是一个基于Java可扩展的动态集群框架,能够为构建容错、可靠和可用的Java运用程序供应了根本架构支持。这个框架还可以集成到不肯望绑定到特定通信协议,但须要集群和分布式系统支持的任何Java产品中。Shoal是GlassFish和JonAS运用做事器的集群引擎。
Simple-Spring-Memcached Simple-Spring-Memcached,它封装了对MemCached的调用,使MemCached的客户端开拓变得超乎平凡的大略。