问题示例:
网站有千万个网页文件需要存储,占用空间大约有300-400G,导致问题:
1 小文件太多,备份困难
2 空间增长很难调整
3 前端做缓存,因为object很高,效率很低,squid和lighttpd都不合适
解决方案说明:
1 nginx+memcached接口
Nginx有一个模块是可以读取memcached的数据的,可以把网页文件内容保存到memcached里面,如果数据无效,则proxy到后端,后端服务器更新此数据
2 memcachedb接口
memcachedb是新浪的一个开源项目,用硬盘作为存储空间,用的是Berkeley DB的存储引擎,memcached的协议。
有memcached的方便性,同时有高效的读写性能,没有内存作为存储空间的限制,数据永久保留,同时使用局域网的机器就可以处理并且很容易共享,不限制为本地文件,有自动的备份机制。
3 php程序管理存储
php处理memcached很容易,和前端约定相应的key即可
4 计划任务处理更新
由于memcachedb是永久保存,前端无法判断是否过期,所以需要自己制定策略删除过期的网页,以便前端获取不到而自动更新
5 magent作为memcachedb的代理接口,解决备份问题
memcachedb有备份方法,我碰到过出现无法同步的情况,magent也可以帮助解决此问题,它是为memcached设计的,但由于memcachedb使用memcached协议,所以也同样适用
解决方案配置示例:
假设www.aslibra.com/article/xxx 地址需要使用此方案,那就可以用服务器A(2)和B(3)作为memcachedb服务,可以在A(2)上跑magent,C(4)服务器是后端服务器,负责存入memcachedb数据
前端Nginx配置判断:
upstream backend {
server 192.168.1.4;
}
upstream memcachedb {
server 192.168.1.2:11212;
server 192.168.1.3:11212 backup;
}
server {
server_name www.aslibra.com;
location / {
proxy_pass http://backend;
}
location ~* ^/article/ {
set $memcached_key $host$uri;
default_type text/html;
memcached_pass memcachedb;
error_page 404 = /fallback;
}
location = /fallback {
internal;
proxy_set_header memcached_key $memcached_key;
proxy_pass http://backend;
}
}
定义了memcachedb的upstream,有一个是backup标识的
/article/的请求会先查询memcachedb,找不到再发送到后端服务器
注意 proxy_set_header memcached_key $memcached_key 这句,可以保持key值的一致性
对于中文出现在地址的情况很实用,后端使用$_SERVER['REQUEST_URI'] 会和 $uri 不一致
A和B缓存服务器:
memcachedb -p 11212 -l 0.0.0.0 -u root -d -r -N -H /data/aslibra.com/article/
如果配置主从,那可以启用magent:
magent -s 192.168.1.2:11212 -b 192.168.1.3:11212
#默认监听 0.0.0.0:11211,提供给PHP使用
#比如这里是在192.168.1.2上运行
C服务器配置rewrite(lighttpd):
$HTTP["host"] == "www.aslibra.com" {
server.document-root = "/data/www.aslibra.com/"
url.rewrite-once = (
"^/article" => "/php/cache.php"
)
}
PHP代码参考:
<?
//do sth to build html
echo $html;
//如果有传递memcached_key值就把结果存入memcachedb
//不需要设置缓存时间,因为没有用 :)
//有需要更新,那就记录一下日志
if($_SERVER['HTTP_MEMCACHED_KEY']){
$m = new Memcache;
if($m->connect('192.168.1.2', 11211) ){
$key = $_SERVER['HTTP_MEMCACHED_KEY'];
$m->set($key, $html);
//有必要就记日志
//log to file...
}
}
?>
删除文件:
如果有记录日志(可以是web服务器日志或者php记录的日志),可以根据保存的日志处理
需要删除的 $m->delete($key) 即可
备份请参考memcachedb的操作指南。
此解决方案适合memcached的存储方式,况且不用处理过期的问题,php可以解决过期时间
文章更新请关注本文更新:
http://www.aslibra.com/blog/post/memcachedb_cache_solution.php
参考资料:
1 Berkeley DB
2 memcachedb
3 magent
4 NginxModules
5 嵌入式数据库系统Berkeley DB
6 memcached和magent的安装
7 memcachedb的安装
分享到:
相关推荐
它不是传统的缓存解决方案,而是一个完整的、用于持久化的 memcached 变体。与 memcached 不同的是,Memcachedb 不提供过期功能(尽管为了兼容 memcached 协议,该功能仍然保留但不执行任何操作)。Memcachedb 的...
BerkeleyDB作为Memcachedb的数据持久化存储解决方案,同样需要被安装。通常,用户应该安装与Memcachedb兼容的最新稳定版本。在Ubuntu上安装BerkeleyDB的命令通常如下: - 解压BerkeleyDB压缩包。 - 进入BerkeleyDB...
Ehcache和Memcache是两种广泛使用的缓存解决方案,它们各有特点,适用于不同的场景。本文将深入探讨这两种缓存技术的性能比较,以帮助开发者更好地选择适合自己的缓存策略。 首先,Ehcache是一款Java缓存框架,它...
总之,Memcached作为一款强大的内存缓存系统,能够显著提高Web应用的响应速度,降低数据库负载,同时其简洁的设计和丰富的客户端支持使得它成为许多开发者首选的缓存解决方案。了解和熟练掌握Memcached的原理与使用...
总的来说,Spring-DM分布式框架充分利用了Spring的强大力量和OSGi的模块化特性,为开发分布式服务提供了一个灵活、高效的解决方案。通过MemcacheDB等技术的集成,DSF能够在不断变化的环境中快速适应和响应,实现高效...
2. **MemcacheDB**:由新浪开源团队开发,它提供了一个更持久化的解决方案,可以在内存不足时将数据写入磁盘。 3. **tmcache**:这是一个由作者heiyeluren开发的个人项目,可能是对Memcached的一个增强或改进版本。 ...
新浪博客架构分享主要介绍了新浪博客这...以上是新浪博客架构的关键点,展现了大型Web服务在应对高访问量、优化性能、保证数据安全等方面的解决方案。这些经验对于理解大规模互联网应用的架构设计具有很高的参考价值。
1.1.2.2 云存储:在云计算环境中,Key-Value Store的分布式特性使其成为存储解决方案的理想选择。 1.1.2.3 Redis 实际应用案例:Redis的实际应用包括网页会话管理、社交网络缓存、发布/订阅消息系统等。 了解这些...
在设计分布式系统时,必须明确一致性、可用性和分区容忍性的优先级,并结合实际项目定制解决方案。例如,社交媒体网站可能更倾向于牺牲部分一致性以保证服务的可用性和响应速度,而金融交易系统则需要更高的数据一致...
2. **快速开发需求**:为了适应快速迭代和敏捷开发的需求,团队放弃了memcached和memcacheDB,转而使用Redis,后者支持更丰富的数据类型,如列表(Lists)、集合(Sets)、哈希(Hashes)和有序集(Sorted sets),从而提高...
1. 商业产品:Oracle Timesten、Altibase、eXtremeDB等,它们提供高性能、高可用性的解决方案,支持SQL和事务处理。 2. 开源产品:FastDB、MemcacheDB、Dbcached等,多用于实时和嵌入式环境,Key/Value操作。 3. ...
- Altibase:提供事务优先的高性能解决方案,支持客户端/服务器和嵌入式架构,有混合型数据库选项。 - eXtremeDB:实时和嵌入式数据库,系统开销小,速度快,支持SQL和日志功能。 除了商业产品,还有开源的内存...
6. **适用场合**:从简单的缓存解决方案到复杂的数据分析平台,Redis都能提供强大的支持。无论是处理高并发的在线交易还是进行大数据的实时分析,Redis都能展现出其卓越的性能和灵活性。 #### 三、Redis数据类型的...
因此,人们开始寻求一种新的数据存储解决方案,那就是键值存储系统。键值存储系统是一种以键值对形式存储数据的NoSQL数据库,它能够提供出色的读写性能,并且在水平扩展方面具有明显的优势。在众多键值存储解决方案...
- **云存储**:在云计算环境中,Key-Value存储系统的灵活性和可扩展性使其成为理想的解决方案。 - **Redis实际应用案例**:例如,作为缓存层提高网站性能;作为消息队列进行异步处理;在实时分析和监控系统中存储和...
主要考虑的因素可能包括它可以很好地服务于大规模互联网应用、云存储解决方案,以及在实际应用案例中Redis的优秀表现。 在"初识Redis"章节,将详细探讨Redis的数据类型,包括但不限于字符串、列表、集合、有序集合...
Memcachedb结合了Memcache的高性能和Berkeley DB的持久化特性,用于提供一种高可用性和高性能的存储解决方案。 1.1.4 Cassandra Apache Cassandra是一种列式存储数据库,它具有高可扩展性,支持分布在多个数据中心...
随着互联网应用规模的不断扩大,传统的关系型数据库难以满足高并发、大数据量的需求,Key-Value Store以其简单高效的数据模型和良好的扩展性,成为解决这些问题的理想方案。此外,云存储的普及也促进了Key-Value ...
- **Riak**:一个高度可用且分布式的数据存储解决方案。 - **Terrastore**:基于HBase的分布式键值存储系统。 - **ThruDB**:一种基于HBase的键值存储系统。 - **键值/元组存储** - **Amazon之SimpleDB**:一种...