舍得网支撑 1 亿 pv/天构架,开源了
说是支持 1 亿 pv/天,也许有点夸张,也是为了吸引您能点进来,如果您能认真看完相信也
不会让您失望,当然,肯定有很多“高手”会对此会嗤之以鼻,没关系,有很多眼高手低的
人总喜欢评论别人却从不会看清自己。
如果大家真想支持我、支持中国人开源项目,请把该文贴到自己的博客中或者收藏本文,
记得包含文档的下载地址!!!!!!!谢谢。
我说的系统主要是构建在 hibernate 之上的高效数据库缓存系统,其中包含了分布式解决方
案,该系统已经应用在舍得网上了,没有发现大问题,本人也相信该系统已经足够强大,
应付数百万 IP/天的应用都不是问题,我这么说肯定有人会对此表示怀疑,其实系统到底能
撑多少 IP/天不在于系统本身而是在于使用该系统的人。
代码看上去很简单,其实却是两年经验的总结,整过过程也遇到了很多难点,最后一一解
决 了 , 所 以 也 请 各 位 珍 惜 他 人 的 劳 动 成 果 。 本 系 统 非 常 简 洁 易 用 , 主 程 序
BaseManager.java 不到 1000 行代码,用“精悍”来形容绝对不为过,1000 行代码却包含了数
据库对象的缓存、列表和长度的缓存、按字段散列缓存、update 延时更新、自动清除列表
缓存等功能,用它来实现像论坛、博客、校友录、交友社区等绝大部分应用网站都足够了。
我在理想状态下做了压力测试,在没有数据库操作的 jsp 页面(舍得网新首页)里可以完成
2000 多 requests 每秒(正常情况可能有 1/1000 的 request 有数据库查询,其余 999/1000 都是
直接从缓存里读取),物品详情页每秒可完成 3000 多 requests,纯静态 html 页面也只能完
成 7000 多 requests/ 秒 , 我 对 首 页 进 行 了 三 个 小时 的 压 力 测 试 , 完 成 了 24850800 个
requests,java 一点事都没有,内存没有上涨。按照 2000 个 requests/秒算,一天按 15 小时
计算,那么每天能完成 3600*15*2000=1 亿零 8 百万 requests,当然这是理想状态,实际状
态就算打一折,还能完成 1000 万 pv/天,要知道,这只是一个普通 1 万 3 千块钱买的服务
器,内存 4G,CPU2 个,LinuxAS4 系统,apache2.0.63/resin2.1.17/jdk6.0 的环境。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。现在进入正
题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
为什么要用缓存?如果问这个问题说明你还是新手,数据库吞吐量毕竟有限,每秒读写
5000 次了不起了,如果不用缓存,假设一个页面有 100 个数据库操作,50 个用户并发数据
库就歇菜,这样最多能支撑的 pv 也就 50*3600*15=270 万,而且数据库服务器累得半死,
搞不好什么时候就累死了。我的这套缓存系统比单独用 memcached 做缓存还要强大,相当
于在 memcached 上再做了两级缓存,大家都知道 memcached 很强了,但是吞吐量还是有限,
每秒 20000 次 get 和 put 当遇到超大规模的应用时还是会歇菜,本地 HashMap 每秒可执行上
百万次 put 和 get,在这上面损耗的性能几乎可以忽略不记了。温馨提示:能不用分布式的
时候就不要用分布式,非用分布式的时候再考虑用 memcached,我的缓存系统在这方面都
已经实现了,改个配置就可以了,有兴趣的可以仔细测试测试!
一般数据库缓存在我看来包含四种。第一种:单个对象的缓存(一个对象就是数据库一行
记录),对于单个对象的缓存,用 HashMap 就可以了,稍微复杂一点用 LRU 算法包装一
个 HashMap,再复杂一点的分布式用 memcached 即可,没什么太难的;第二种:列表缓存,
- 1
- 2
- 3
- 4
- 5
前往页