<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0

    Gemstone在RailsConf上所展示的Maglev Demo展現了Gemstone的分布式VM技術,它可以透明地跨越多個Gemstone VM以共享相同的對象內存。

    Terracotta是一項Java技術,它也可以完成類似的功能。Fabio Kung已經開始了一些嘗試以將Terracotta應用到JRuby上。過去他也嘗試過一些類似的項目。Gemstone還嘗試了在其基于Java的產品上支持JRuby,之前他們也嘗試過將Terracotta應用到JRuby上,盡管沒有取得實質性的突破。

    我們采訪了Fabio Kung以了解該項目,他稱這個項目為“JMaglev”,我們想知道要想讓JRuby和Terracotta協同工作需要做哪些事情以及需要解決哪些問題。

    首先,Fabio談到了他的實現以及他是如何對JRuby進行了修改以讓其正常工作:

    我使用了Terracotta POJO集群以便JRuby內核可被集群中的所有節點所共享。事實上,每次運行都會有一些全局變量,像下面這樣:
    public class Ruby {







    // ...







    private GlobalVariables globalVariables = new GlobalVariables();







    }







    及:
    public class GlobalVariables {



    // ...



    private List values = new ArrayList();



    }




    Terracotta僅僅對這個全局變量列表進行集群。對該列表的任何改變都會被復制到集群中的所有JRuby運行時。這樣做的好處在于你可以將任何 ruby對象增加到該列表中,甚至連復雜的對象如regexps、hashes和procs都可以。所有的全局變量都會自動被共享,同時由全局變量所引用 的任何對象都會被Terracotta加到集群中。

    為了做到這一點,我需要對JRuby進行一些修補,使其可以被“集群”。事實上,JRuby中的每個ruby對象都會維護一個ruby運行時引用。由于共 享的對象會用在很多不同的運行時中,所以JRuby必須得支持運行時的增加及刪除。我可以解決這個問題,但是每個JVM上只能有一個Ruby運行時。在這 個地方仍然有一些尚未解決和需要討論的問題,如:

    ——全局對象標識符:在所有節點中object_id都應該相同么?——共享的元類(metaclass):當不同節點中的對象類、父類或者是包含的模塊發生變化時怎么辦?——在單個JVM上對多個運行時的支持。

    對于這些問題我采取了簡單的解決方法,但每種方法都需要一整篇博文才能說明白:-)

    Fabio解釋了他知道的一些針對JRubyTerracotta的用例:

    通過使用Terracotta的High Availability模式,我認為“JMaglev”(或許需要起個更好的名字)絕對能成為一個很棒的memcached而無需侵入Ruby代碼。然 而還有很多事情需要做。這就是我將其開放的原因所在,如果大家感興趣,都可以盡一份力:http://github.com/fabiokung/clustered-jruby/

    很多服務器都可以配置在Terracotta中,其中一個服務器叫“主”服務器(或者叫活動服務器),其他的處于備用模式。這很有意思,因為一旦活動服務 器崩潰,其他的就會自動頂替上去。在Terracotta的企業版中甚至還有一種可用的模式,該模式可以開啟多個活動服務器,這與memcached所做 的事情差不多,但是memcached不會持久化對象。

    Terracotta可作為一個分布式緩存,同時無需Java序列化:它僅僅復制改變的東西。你只需要將想從數據庫中取出的對象共享給集群中所有的節點即 可。通過使用JMaglev,你只需將他們放到全局變量中即可——$shared = Person.find(:all)。

    其他可能的用例是在Rails應用中的多個進程和機器上共享HttpSession。如果將rails應用部署到JRuby中,那么可以使用透明的集群對象來維護集群中所有節點所共享的HttpSession。

    事實上,任何Terracotta用例都是JMaglev用例。坦誠地說,就是因為這是可行的,我才這么做。這與Avy Briant的Maglev例子非常像:他說可以使用SmallTalk VMs運行Ruby代碼,然后Gemstone的那些家伙讓他證明這是可行的:-)

    我希望那些比我更富創造力的人們能為“JMaglev”想出更多創造性的用例。

    分布式的對象內存僅僅是Gemstone/S(以及MagLev)諸多特性中的一個;另一個重要特性是持久化。正如Gemstone的Monty Williams在最近的一個關于Rails的播客中所說,Gemstone/S支持對象內存的持久化,這意味著我們無需ORM甚至是RDBMS來存儲數據。

    當被問到“JMaglev”是否支持類似的功能時,Fabio說到:

    所有共享的ruby對象都位于Terracotta服務器中,而Terracotta服務器能自動地持久化這些對象,即使他們不 是序列化的也可以。客戶端持有這些真正的、共享的對象的樁(stubs)。你只需將服務器配置成持久化模式即可。我還沒有測過,但這需要在XML配置文件 中增加一行。

    我認為Terracotta可作為一個面向對象的數據庫以持久化JRuby對象,但我覺得這不是目前最主要的目標。Terracotta現在可以通過其 High Availability模式來持久化共享的對象,這存在于fail-safe-high-available部署中。http://www.terracotta.org/web/display/docs/Configuring+Terracotta+For+High+Availability

    Terracotta的站點上列出了很多Terracotta集成模塊(Terracotta Integration Modules,即TIM),其中一些面向的是流行的ORM解決方案。當被問到這是否有助于持久化時,Fabio說到這些TIM的目的是不同的:

    這些TIM并不涉及共享對象的自動持久化。他們僅有助于Terracotta與這些ORM框架的協作。例如,hibernate TIM與持久化沒有任何關系。它僅僅是簡化了Hibernate對集群的(分布式的)EhCache(以及其他)的使用而無需真正的分布式緩存,如 JBoss TreeCache和memcached。

    Fabio展示了JRuby與Terracotta是如何協作的。要想嘗試一下,請參考Fabio在Github上的clustered-jruby倉庫,它提供了你所需要的所有內容。


    Orther:
    Ibatis技術文檔
    Hibernate常見問題總結

    posted on 2008-12-18 20:01 墻頭草 閱讀(1249) 評論(0)  編輯  收藏 所屬分類: 業界資訊
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 97国免费在线视频| 国产精品免费观看久久| 亚洲精品美女在线观看| 女人18毛片水真多免费看| 一区二区三区免费精品视频| 亚洲AV人人澡人人爽人人夜夜| 成人免费午夜无码视频| 尤物视频在线免费观看| 亚洲高清资源在线观看| www.亚洲精品| ww在线观视频免费观看| 一级A毛片免费观看久久精品| 亚洲黄色网址在线观看| 四虎国产精品免费视| 日韩精品人妻系列无码专区免费| 亚洲av无码一区二区三区四区 | 成人毛片18女人毛片免费96 | 国产亚洲精品成人久久网站 | 国产精品亚洲专一区二区三区| 亚洲AV永久无码区成人网站| 女人被男人躁的女爽免费视频| 成全视频在线观看免费| 亚洲爆乳精品无码一区二区| 婷婷精品国产亚洲AV麻豆不片 | 亚洲精品永久在线观看| 久久综合日韩亚洲精品色| 国产精品无码一二区免费| 99re在线精品视频免费| 人禽伦免费交视频播放| 亚洲欧洲无码一区二区三区| 久久精品国产亚洲AV无码偷窥| 亚洲综合色成在线播放| 最近最新中文字幕完整版免费高清| 日韩免费视频一区二区| 一日本道a高清免费播放 | 性xxxxx免费视频播放| 中文字幕无码日韩专区免费| 免费看黄福利app导航看一下黄色录像 | 我想看一级毛片免费的| 91精品国产免费入口| 你是我的城池营垒免费观看完整版|