<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### ### 1什么是GemFire GemFire是一個位于應用集群和后端數據源之間的高性能、分布式的操作數據(operational data)管理基礎架構。它提供了低延遲、高吞吐量的數據共享和事件分發。GemFire充分利用網絡中的內存和磁盤資源,形成一個實時的數據網格(data fabric or grid)。 ![](https://box.kancloud.cn/2016-08-31_57c6b1301344b.jpg) GemFire的主要特性有: ???多種網絡拓撲 ???高并發的內存數據結構,避免鎖爭奪 ???可選的ACID ???序列化(native serialization)和智能緩沖(smart buffering)保證消息快速分發 ???同步或異步寫磁盤 ???冗余內存拷貝 ### 2網絡拓撲和緩存架構 考慮到問題多樣性和架構靈活性,GemFire提供了多種選項來配置在哪(where)以及怎樣(how)管理緩存數據,這就使架構師能夠從P2P(peer-to-peer)、CS(client-server)、WAN三種組件構建出合適的緩存架構。 ### 2.1 P2P拓撲 在P2P分布式系統中,應用程序使用GemFire的鏡像(mirroring)功能來將大量數據跨結點分區(sharding)以及在這些結點間進行數據復制同步。下面主要講一下GemFire的P2P拓撲中的兩個主要角色:**mirrored鏡像結點和partitioned分區結點**(具體見3.2中mirror-type的配置方式)。 因為在P2P拓撲中緩存數據與應用在一起,所以首先說一下嵌入式緩存。所謂嵌入式緩存(embedded cache)其實就是說緩存和應用程序在一起,直接利用應用服務器的內存空間。也就是我們常說的類似Ehcache的那種本地緩存(local cache)。 ![](https://box.kancloud.cn/2016-08-31_57c6b1302f4b7.jpg) **mirrored結點**就像一塊磁鐵一樣,將其他數據區域的數據都吸附過來,形成一塊完整的數據集合。當一塊數據區域被配置為mirrored的結點第一次新建或重建時,GemFire將自動執行*初始鏡像抓取(initial image fetch)*操作,從其他結點的數據子集中還原出完整的狀態。如果此時網絡中存在另一個mirrored結點,那么將會執行*最優直接抓取(optimal directed fetch)*。 ![](https://box.kancloud.cn/2016-08-31_57c6b1304aef9.jpg) 所以我們很容易看出,mirrored結點主要出于兩種目的: ???對于大量讀的應用,應用程序通過保存全量數據,使客戶端請求可以即時訪問到想要數據,而無需經過網絡傳輸 ???當發生故障時,mirrored結點可以用來恢復其他結點 不同于mirrored結點,每個**partitioned結點**都持有唯一的一塊數據。應用程序就像操作本地數據一樣,GemFire在幕后管理各個分區的數據,并且保證在至多一跳內(at most one network hop)完成數據訪問。根據GemFire的哈希算法,分區數據會被自動放入到各個結點的bucket中。同時GemFire也會自動分配出冗余數據的位置并進行復制。當某個結點出錯時,客戶端請求會自動被重定向到備份結點。并且GemFire會重新復制出一份數據,從而保證數據的冗余拷貝數。最后,我們可以隨時向網絡中加入新的結點來對GemFire集群進行動態擴容。 ![](https://box.kancloud.cn/2016-08-31_57c6b13060dc8.jpg) P2P系統提供了低延遲、單跳(one-hop)數據訪問、動態發現以及透明化的數據存儲位置。但是,網絡中的每個結點都要維持一個socket連接到其他每個結點。當結點增多時,連接數將成指數級增長。為了提高擴展性,GemFire提供了一種可靠的UDP多播的通信方式。在下一節中我們將看到,P2P數據同步在服務器間復制數據時的作用。 ### 2.2 Client-Server拓撲 Client-Server緩存允許大量結點相連形成客戶端-服務器結構。服務器即為客戶端提供緩存,也可以為其他服務器提供數據復制或緩存。 ![](https://box.kancloud.cn/2016-08-31_57c6b13076c22.jpg) ### 2.3 WAN拓撲 P2P集群由于點和點之間的緊耦合而產生了擴展性問題,這種問題在數據中心有多個集群或數據中心跨城市時被放大。GemFire提供另一種模型來解決。 ![](https://box.kancloud.cn/2016-08-31_57c6b1308e816.jpg) ### 3 GemFire工作原理 ### 3.1發現機制 默認GemFire使用IP多播來發現新成員,然而所有成員間的通信都采用TCP。對于部署環境禁止使用IP多播或者網絡跨越多個子網時,GemFire提供備用方法:使用輕量級的定位服務器(locator server)來追蹤所有成員的連接。新成員加入集群時,將詢問定位服務并建立類似于IP多播的socket到socket的TCP連接。 ### 3.2數據分發 每個成員都會創建一個或多個緩存數據區域(data region),通過區域的劃分,我們能給每個區域配置不同的分發屬性、內存管理以及數據一致性模型。默認GemFire使用P2P分發模型,每個成員都能和其他任何成員通信。同時根據不同的內網特點,傳輸層可選TCP/IP或可靠多播(UDP)。在這些配置中,有兩個屬性很重要,**范圍(scope)和鏡像類型(mirror-type)。** 首先,范圍(scope)有四種選項: ???Local:不分發。那為什么不直接保存到HashMap中。因為GemFire額外提供了數據自動持久化到磁盤、OQL(Object Query Language)查詢數據、數據操作的事務等特性。 ???Distribute-no-ack:發送數據給成員1,在發送數據給成員2時不等待成員1的響應。適用于對數據一致性要求不高,并要求低網絡延遲的情況。這是GemFire的默認配置,能夠提供低延遲、高吞吐,并通過盡快分發來降低數據沖突的概率。 ???Distribute-ack:在發送給成員2前,發送數據并等待成員1的響應。這樣每條數據都是同步分發的。 ???Global:分發前在其他成員上獲得鎖,再分發數據。適用于悲觀的應用場景,通過全局鎖服務來管理鎖的獲得、釋放和超時。 ![](https://box.kancloud.cn/2016-08-31_57c6b133d8e64.jpg) 現在來看一下第二個重要的配置屬性鏡像類型(mirror-type): ???none:僅當緩存中有此數據時才更新,任何其他成員發來的新數據都會被忽略掉。適用于某一數據區域僅用來保存另一區域數據的子集。 ???keys:數據區域僅保存key來節約內存,當真正有請求時再從其他區域抓取數據并保存到本地,之后接受對此數據項的更新。適用于無法預測哪些數據會被某一結點訪問的情況。 ???keys-values:真正的鏡像,將保存全量數據。適用于需要立即訪問所有數據的結點,以及數據冗余備份。 這兩個屬性的配置對數據區域中保存的是什么數據有很大影響: ![](https://box.kancloud.cn/2016-08-31_57c6b134004e0.jpg) ### 4持久化和溢出 持久化(persistence)將整個數據集拷貝到磁盤,當成員出錯時可以用來還原數據。而溢出(overflow)保存key在內存中而value保存到磁盤,達到節省內存的目的。兩者既可以單獨使用,也可以混合使用。 ### 4.1持久化 GemFire支持兩種寫磁盤選項:操作內存數據時同步寫,或者固定間隔異步寫。后一種只當應用在出錯時能夠容忍不完整的數據還原時使用。 ![](https://box.kancloud.cn/2016-08-31_57c6b1341bc6e.jpg) ### 4.2溢出 當內存不足時,GemFire使用LRU策略來決定是否對某個數據項溢出。 ![](https://box.kancloud.cn/2016-08-31_57c6b13430e2c.jpg) ### 4.3混合使用 持久化與溢出可以混合使用。所有key-value都備份到磁盤,并且當內存不足時,只保留最近使用過的數據。由于LRU而被移除到磁盤的value不會對磁盤有影響,因為所有數據已被持久化到磁盤上了。 ![](https://box.kancloud.cn/2016-08-31_57c6b13449fc8.jpg) ### 5事務 GemFire支持緩存事務與JTA事務兩種。 ### 5.1緩存事務 每個事務都有其私有的工作區域。事務開始時,數據將被拷貝到私有區域,直到事務提交。若提交時沒有沖突,則數據從私有區域拷貝回原區域。這樣事務就可以并發地修改緩存了。 ![](https://box.kancloud.cn/2016-08-31_57c6b13463792.jpg) 對于范圍(scope)配置為local的緩存數據區域,事務提交后就算是完成了。但對于分布式(scope=distributed-no-ack or distributed-ack),則在事務提交時要進行緩存同步。 ### 6查詢 (待補充:OOL) ### 7數據可用性和Failover (待補充)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看