<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://draft.blogger.com/navbar.g?targetBlogID\x3d4684235500622716427\x26blogName\x3dCaiwangqin\x27s+blog\x26publishMode\x3dPUBLISH_MODE_HOSTED\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttp://blog.caiwangqin.com/search\x26blogLocale\x3dzh_CN\x26v\x3d2\x26homepageUrl\x3dhttp://blog.caiwangqin.com/\x26vt\x3d3393395200455623441', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe", messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER, messageHandlers: { 'blogger-ping': function() {} } }); } }); </script>

Caiwangqin's blog

Focus on Life, Cloud Service, Smart Hardware, Architecture, Technic and beyond…

Ruby on Rails + Memcached

2006年12月21日星期四

这篇BLOG来自 thegiive blog: Rails + Memcached ,他写了一系列的Rails有关的非常有用的文章,我选取转换成简体中文转发布了,能习惯繁体中文的朋友订阅他的blog, 将会获得不少帮助。

先介绍一下 Memcached ,Memcached 是一个分布式的 Memory Object 架构,最早由 Life Journal 所采用。 他可以启动一支 Deamon 来将所有其它 Client 的 Object 都集合起来,并且做到多机器同步化的工作。

當然,我們可以使用 Database 去做到一模一樣的事情,但是其實 Database 在 ACID 上面已經付出太多 Overhaed。如果今天需要分散式操作的東西,是一些不需要考慮 ACID 的東西,像是 Cache ,Session 之類真的不見就算了的東西的話,你可以考慮使用效率比 Database 快的 Memcached。目前已經有相當多的網站使用 Memcached 的技術,可說是相當成熟。並且在 Web Server 使用考量上,Web Server 通常使用資源是高 CPU 低 Memory ,而 Memcached 是低 CPU 高 Memory 的使用方式,兩者可以結合彼此優缺點,讓 Web Server 跟 Memcached 跑在同一台機器上面來避免浪費資源使用率。

以 Ruby on Rails 来看,Memcached 可以用在


这三个用途。

我目前使用他都是在 Session Store 这个部分,他可以将 Multi Backend Application Server 的 Session 存放放在同一处,当然可以提高Rails Scaling 的部分。而在实做上面,Memcache 没有设定档。要在 Master 启动一个 2G Memory,listen 在 1.2.3.4 ,port 11211 的 Memcache Deamon 是这样启动的


# ./memcached -d -m 2048 -l 1.2.3.4 -p 11211


Ruby 要使用 Memcached 是非常的简单,只要安装 ruby memcache 就没问题了。


gem i ruby-memcache


但是现在还有更新的,而且也很快的 Ruby Memcached Client AP


# gem install memcache-client


要在 Rails 上面使用 Memcached 来当作 Session Handler 也相当的简单,将 session store 设为 memcached 即可。你可以在 enviroment.rb 加入



require ‘memcache’

memcache_options = {



:compression => false,



:debug => false,



:namespace => “app-#{RAILS_ENV},



:readonly => false,



:urlencode => false



}



memcache_servers = [ ‘192.168.1.150:2222′, ‘192.168.1.150:2223′ ]



Rails::Initializer.run do |config|

….

config.action_controller.session_store = :mem_cache_store




config.action_controller.fragment_cache_store 

= :mem_cache_store, memcache_servers, memcache_options




end






cache_params = *([memcache_servers, memcache_options].flatten)



CACHE = MemCache.new *cache_params

ActionController::CgiRequest::

DEFAULT_SESSION_OPTIONS.merge!({ ‘cache’ => CACHE })

 


其实 Rails 对于 Scale 的准备还算是相当的完整,很多地方都有相当简单方便的实做。


延伸阅读



标签:

posted by Caiwangqin, 08:37

0 Comments:

发表评论

订阅 博文评论 [Atom]

<< 主页