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