十二月
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 的准备还算是相当的完整,很多地方都有相当简单方便的实做。

延伸阅读

Share and Enjoy:These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • digg

Tags:

No Responses

Leave a Response

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>