Java使用starling分佈式消息隊列異步處理事務

介紹:
   Starling是一個支持MemCache協議的輕量級持久化服務器。Starling是讓創建網絡訪問隊列或者多個隊列異常簡單,也就是說多點和多臺機器間的異步工作進程。它是著名微博客網站Twitter開發用來處理大量的隊列消息,以及保持服務的響應。Starling已經在生產環境中使用,不僅是Twitter在使用,FiveRuns同樣在使用。FiveRuns甚至還根據自己的應用做了改進 ,他們認爲網站速度快了很多.
   這是一個支持memcache協議的輕量級持久化服務器,因此使用php/perl/ruby/java等多種客戶端都沒問題,可以將較慢的處理邏輯通過消息隊列放在後臺處理,同時也支持多點分佈式處理。
   由於starling是目前twitter在生產環境中運行的,經過實踐檢驗過,穩定性應該不成問題。

 


安裝:
   1.安裝linux下的開發工具包,最好使用red hat的添加刪除程序安裝.
 (1)在可視化窗口下載打開"添加刪除程序",找到"開發->開發工具"打鉤,更新.插入 對應的linux安裝盤.
   2.安裝ruby和ruby gem
 (1)安裝錢的準備
 檢查系統是否已經安裝了 ruby,
 #rpm -qa | egrep '(ruby)|(irb)'
 如果已安裝,而且不是你所要的版本,則需要先卸載她,如,
 #rpm -e ruby-docs-1.8.1-7.EL4.2 /
 ruby-1.8.1-7.EL4.2 /
 irb-1.8.1-7.EL4.2 /
 ruby-libs-1.8.1-7.EL4.2 /
 ruby-mode-1.8.1-7.EL4.2 /
 ruby-tcltk-1.8.1-7.EL4.2 /
 ruby-devel-1.8.1-7.EL4.2

 (2)安裝 Ruby
 假設 Ruby 安裝到 /usr/local/ruby
 #mkdir /usr/local/ruby
 #tar -zxvf ruby-1.8.4.tar.gz
 #cd ruby-1.8.4
 #./configure --prefix=/usr/local/ruby
 #make
 #make install

 (3)設置路徑
 #vi /etc/profile
 在該文件中加入,
 RUBY_HOME=/usr/local/ruby
 PATH=$PATH:$RUBY_HOME/bin
 export RUBY_HOME PATH

 (4)檢查是否安裝成功
 重新登錄,
 #ruby -v
 如果能顯示 ruby 的版本信息(ruby 1.8.4 (2005-12-24) [i686-linux]),則說明已安裝成功。

 (5)安裝 Ruby Gems
 #tar -zxvf rubygems-0.9.0.tgz
 #cd rubygems-0.9.0
 #ruby setup.rb

 (6)檢查是否安裝成功
 #gem -v
 如果能顯示 gem 的版本信息(0.9.0),則說明已安裝成功。
   3.安裝和運行 Starling
 (1)輸入gem install memcache-client starling命令,自動安裝starling.
 (2)輸入#starling --help檢查是否安裝成功,輸出幫助信息及安裝成功.
 (3)啓動Starling
 #starling -h 0.0.0.0 -d -p 22122
 #netstat –lnp

編寫Java客戶端程序:
   java客戶端將使用,XMemcached作爲memcache的client.  XMemcached是一個基於java nio的memcached客戶端。具有速度快,支持分佈式訪問多個memcached服務的特點.
  1.下載XMemcached http://xmemcached.googlecode.com/files/xmemcached-1.2.0-stable-include-dependencies.zip
  2.把下載的zip解壓,把裏面的jar包都加到一個java項目的classpath中,還需要額外增加一個log4j的包,不然會報錯.
  3.寫一個放數據和一個取出數據的類
=============放數據============================
public class SetQueueTest {

 /**
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  //連接starling
    //XMemcachedClient是線程安全的,可以被多線程使用  
    XMemcachedClient client= new XMemcachedClient("192.168.4.243", 22122);
    while(true){
   //存儲操作  
     if (!client.set("hello", 0, "dennis"+System.currentTimeMillis())){  
          System.err.println("set error");  
     }
     else{
      System.out.println("ok");
     }
     Thread.sleep(2);
    }
 }

}

=============取數據==================
public class GetQueueTest {

 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  //連接starling
    //XMemcachedClient是線程安全的,可以被多線程使用  
    XMemcachedClient client= new XMemcachedClient("192.168.4.243", 22122);
  //存儲操作
    while(true){
     String name=(String)client.get("hello");
    //如果隊列中已經沒有數據了,休息一下再試
     if(name==null){
      Thread.sleep(5);
      continue;
     }
     System.out.println(name);
   
    }
 }

}

性能測試

這是別人用php測試的結果,僅供參考.

測試條件:

key的長度16B
value的長度100B,
8個併發寫入進程
每個進程插入10,000條記錄
平均每個進程花了7秒完成寫入操作,那麼照這樣計算:

10000 * 8 / 7 = 每秒寫入11428次


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章