共計 3850 個字符,預(yù)計需要花費 10 分鐘才能閱讀完成。
本篇內(nèi)容主要講解“apache Ignite 的集群如何部署”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學(xué)習(xí)“apache Ignite 的集群如何部署”吧!
Ignite 的集群部署
Ignite 具有非常先進的集群能力,本文針對和集群有關(guān)的技術(shù)點做一個簡短的介紹,然后針對實際應(yīng)用的可能部署形式做了說明和對比,從中我們可以發(fā)現(xiàn),Ignite 平臺在部署的靈活性上,具有很大的優(yōu)勢。
1. 相關(guān)概念 1.1. 節(jié)點平等
Ignite 沒有 master 節(jié)點或者 server 節(jié)點,也沒有 worker 節(jié)點或者 client 節(jié)點,按照 Ignite 的觀點所有節(jié)點都是平等的。但是開發(fā)者可以將節(jié)點配置成 master,worker 或者 client 以及 data 節(jié)點。
1.2. 發(fā)現(xiàn)機制
Ignite 節(jié)點之間會自動感知,集群可擴展性強,不需要重啟集群,簡單地啟動新加入的節(jié)點然后他們就會自動地加入集群。這是通過一個發(fā)現(xiàn)機制實現(xiàn)的,他使節(jié)點可以彼此發(fā)現(xiàn)對方,Ignite 默認使用 TcpDiscoverySpi 通過 TCP/IP 協(xié)議來作為節(jié)點發(fā)現(xiàn)的實現(xiàn),也可以配置成基于多播的或者基于靜態(tài) IP 的,這些方式適用于不同的場景。
1.3. 部署模式
Ignite 可以獨立運行,也可以在集群內(nèi)運行,也可以將幾個 jar 包嵌入應(yīng)用內(nèi)部以嵌入式的模式運行,也可以運行在 Docker 容器以及 Mesos 和 Yarn 等環(huán)境中,可以在物理機中運行,也可以在虛擬機中運行,這個廣泛的適應(yīng)性是他的一個很大的優(yōu)勢。
1.4. 配置方式
Ignite 的大部分配置選項,都同時支持通過基于 Spring 的 XML 配置方式以及通過 Java 代碼的編程方式進行配置,這個也是個重要的優(yōu)點。
1.5. 客戶端和服務(wù)端
Ignite 中各個節(jié)點是平等的,但是可以根據(jù)需要將節(jié)點配置成客戶端或者服務(wù)端,服務(wù)端節(jié)點參與緩存,計算,流式處理等等,而原生的客戶端節(jié)點提供了遠程連接服務(wù)端的能力。Ignite 原生客戶端可以使用完整的 Ignite API,包括近緩存,事務(wù),計算,流,服務(wù)等等。所有的 Ignite 節(jié)點默認都是以服務(wù)端模式啟動的,客戶端模式需要顯式地啟用,如下:
bean >2. 創(chuàng)建集群 一個 Ignite 節(jié)點可以從命令行啟動,可以用默認的配置也可以傳遞一個配置文件??梢詥雍芏嗟墓?jié)點然后他們會自動地發(fā)現(xiàn)對方。要啟動一個基于默認配置的網(wǎng)格節(jié)點,打開命令行然后切換到 IGNITE_HOME(安裝文件夾),然后輸入如下命令:
$ bin/ignite.sh
然后會看到大體如下的輸出:
1.[02:49:12] Ignite node started OK (id=ab5d18a6)
2.[02:49:12] Topology snapshot [ver=1, nodes=1, CPUs=8, heap=1.0GB]
在嵌入式模式中,通過如下的代碼同樣可以啟動一個節(jié)點:
Ignite ignite = Ignition.start();
3. 集群組
從設(shè)計上講,所有集群節(jié)點都是平等的,所以沒有必要以一個特定的順序啟動任何節(jié)點,或者給他們賦予特定的規(guī)則。然而,Ignite 可以因為一些應(yīng)用的特殊需求而創(chuàng)建集群節(jié)點的邏輯組,比如,可能希望只在遠程節(jié)點上部署一個服務(wù),或者給部分 worker 節(jié)點賦予一個叫做 worker 的規(guī)則來做作業(yè)的執(zhí)行。比如,下面這個例子只把作業(yè)廣播到遠程節(jié)點(除了本地節(jié)點):
final Ignite ignite = Ignition.ignite();
IgniteCluster cluster = ignite.cluster();
IgniteCompute compute = ignite.compute(cluster.forRemotes());
compute.broadcast(() - System.out.println( 節(jié)點 Id: + ignite.cluster().localNode().id()));
Ignite 內(nèi)置了很多預(yù)定義的集群組,同時還支持集群組的自定義??梢曰谝恍┲^詞定義動態(tài)集群組,這個集群組只會包含符合該謂詞的節(jié)點。下面這個例子,一個集群組只會包括 CPU 利用率小于 50% 的節(jié)點,注意這個組里面的節(jié)點會隨著 CPU 負載的變化而改變:
IgniteCluster cluster = ignite.cluster();
ClusterGroup readyNodes = cluster.forPredicate((node) - node.metrics().getCurrentCpuLoad() 0.5);
4. 集群配置
Ignite 中,通過 DiscoverySpi 節(jié)點可以彼此發(fā)現(xiàn)對方,可以配置成基于多播的或者基于靜態(tài) IP 的。Ignite 提供了 TcpDiscoverySpi 作為 DiscoverySpi 的默認實現(xiàn),它使用 TCP/IP 來作為節(jié)點發(fā)現(xiàn)的實現(xiàn)。
對于多播被禁用的情況,TcpDiscoveryVmIpFinder 會使用預(yù)配置的 IP 地址列表,只需要提供至少一個遠程節(jié)點的 IP 地址即可,但是為了保證冗余一個比較好的做法是提供 2 - 3 個網(wǎng)格節(jié)點的 IP 地址。如果建立了與任何一個已提供的 IP 地址的連接,Ignite 就會自動地發(fā)現(xiàn)其他的所有節(jié)點。
也可以同時使用基于多播和靜態(tài) IP 的發(fā)現(xiàn),這種情況下,除了通過多播接受地址以外,TcpDiscoveryMulticastIpFinder 也可以使用預(yù)配置的靜態(tài) IP 地址列表。下面的例子,顯示的是如何通過預(yù)定義的 IP 地址列表建立集群:
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
// 設(shè)置預(yù)定義 IP 地址,注意端口或者端口范圍是可選的。ipFinder.setAddresses(Arrays.asList( 1.2.3.4 , 1.2.3.5:47500..47509));
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setDiscoverySpi(spi);
// 啟動集群
Ignition.start(cfg);
5. 零部署
和計算等有關(guān)的代碼可能是任意自定義的類,在 Ignite 中,遠程節(jié)點會自動感知這些類,不需要顯式地將任何 jar 文件部署或者移動到任何遠程節(jié)點上。這個行為是通過對等類加載(P2P 類加載)實現(xiàn)的,他是 Ignite 中的一個特別的分布式類加載器,實現(xiàn)了節(jié)點間的字節(jié)碼交換。當(dāng)對等類加載啟用時,不需要在集群內(nèi)的每個節(jié)點上手工地部署代碼,也不需要每次在發(fā)生變化時重新部署。
可以通過如下方法啟用對等類加載;
bean >6. 云部署對于很多的云環(huán)境,通常有多播被禁用以及 IP 地址不固定的限制,對于這種情況,Ignite 提供了發(fā)現(xiàn)的擴展機制解決了該問題,并且內(nèi)置了對于常見的云服務(wù)(比如 AWS)的支持,本文不贅述,開發(fā)者可以參照相關(guān)的文檔。
7.Docker 等其他環(huán)境的部署
對于 Docker、Mesos、Yarn 等環(huán)境,Ignite 同樣支持,本文不贅述,開發(fā)者可以參照相關(guān)的文檔。
8. 部署實踐
Ignite 的部署模式非常的靈活,在實際的場景中可以針對實際需要采用不同的部署方式,下面做簡單的總結(jié)和對比:
8.1. 獨立式 Ignite 集群
這種情況下,集群的部署完全獨立于應(yīng)用,這個集群可以用于分布式計算,分布式緩存,分布式服務(wù)等,這時應(yīng)用以客戶端模式接入集群進行相關(guān)的操作,大體是如下的部署模式:
優(yōu)點
對已有的應(yīng)用運行環(huán)境影響小,并且這個集群可以共享,為多個應(yīng)用提供服務(wù),對整個應(yīng)用來說,額外增加了很多的計算和負載能力。
缺點
需要單獨的一組機器,相對成本要高些,如果緩存操作并發(fā)不高或者計算不飽和,存在資源利用率低的情況。整體架構(gòu)也變得復(fù)雜,維護成本也要高些。
8.2. 嵌入式 Ignite 集群
這種情況下,可以將必要的 jar 包嵌入已有應(yīng)用的內(nèi)部,利用 Ignite 的發(fā)現(xiàn)機制,自動建立集群,大體是如下的部署模式:
優(yōu)點
無需額外增加機器,成本最低,Ignite 可以和應(yīng)用無縫集成,所有節(jié)點都為服務(wù)端節(jié)點,可以充分利用 Ignite 的豐富功能。這個模式可擴展性最好,簡單增加節(jié)點即可快速擴充整個系統(tǒng)的計算和負載能力。
缺點
Ignite 占用了服務(wù)器的部分資源,對應(yīng)用整體性能有影響,可能需要進行有針對性的優(yōu)化,應(yīng)用更新時,集群可能需要重啟,這時如果 Ignite 需要加載大量的數(shù)據(jù),重啟的時間可能變長,甚至無法忍受。
8.3. 混合式 Ignite 集群
這種情況下,將上述 2 種模式混合在一起,即同時增加機器部署獨立集群,同時又將 Ignite 嵌入應(yīng)用內(nèi)部以服務(wù)端模式運行,通過邏輯集群組進行資源的分配,整體上形成更大的集群,大體是如下的部署模式:
這種模式更為靈活,調(diào)優(yōu)后能做到成本、功能、性能的平衡,綜合效果最佳。這時可以將緩存的數(shù)據(jù)通過集群組部署到應(yīng)用外部的節(jié)點上,這樣可以避免頻繁的冷啟動導(dǎo)致緩存數(shù)據(jù)頻繁的長時間加載,對于計算,也能夠動態(tài)地充分利用所有計算節(jié)點的資源。
到此,相信大家對“apache Ignite 的集群如何部署”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!