<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 墻頭草 閱讀(1260) 評論(0)  編輯  收藏 所屬分類: 業界資訊
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 亚洲人成欧美中文字幕| 在线观看亚洲人成网站| 色欲色欲天天天www亚洲伊| 91香蕉视频免费| 狠狠色伊人亚洲综合网站色| 在线观看永久免费| 亚洲免费中文字幕| 成年性生交大片免费看 | 国产V亚洲V天堂无码| 国产精品1024在线永久免费| 亚洲人成网站18禁止一区| 四虎影视久久久免费观看| 国产成人高清亚洲| 精品国产免费一区二区三区香蕉| 国产AV无码专区亚洲AV男同| 一区二区三区四区免费视频| 亚洲制服丝袜第一页| 成全视频在线观看免费高清动漫视频下载| 国内精品久久久久影院亚洲 | 中文字幕无码播放免费| 亚洲中文字幕日本无线码| 国产无遮挡色视频免费视频| 一级毛片完整版免费播放一区| 亚洲人成伊人成综合网久久久| 99久久国产免费中文无字幕| 亚洲欧美国产欧美色欲| 亚洲毛片不卡av在线播放一区| 黄视频在线观看免费| 亚洲国产老鸭窝一区二区三区 | 久香草视频在线观看免费| 亚洲av无码成h人动漫无遮挡| 日本zzzzwww大片免费| 欧洲亚洲国产精华液| 亚洲国产精品乱码一区二区| 噼里啪啦免费观看高清动漫4| 菠萝菠萝蜜在线免费视频| 亚洲av无码一区二区三区网站| 午夜宅男在线永久免费观看网| 男人扒开添女人下部免费视频| 久久夜色精品国产噜噜亚洲AV| 国产免费午夜a无码v视频|