您好,登錄后才能下訂單哦!
這篇文章主要講解了“Ignite如何定義一個數據節點”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Ignite如何定義一個數據節點”吧!
Ignite集群層
持久化存儲層
外部應用層
本文中會關注第一層(Ignite集群層),可以參考一個GitHub項目,他包含了日常中實現擬議的微服務架構所必須的構建塊,尤其是要覆蓋如下部分:
配置和啟動數據節點;
使用Ignite的服務API的典型服務實現;
配置和啟動駐有Ignite服務的服務節點;
一個連接到集群并且觸發服務執行的虛擬應用。
數據節點是持有數據集一部分數據的服務端節點,應用邏輯端會在這個數據集上執行查詢和計算。通常來說,這種類型的節點對應用邏輯是透明的,因為這些節點只是簡單地存儲數據集,然后當應用訪問數據時高效地進行處理就可以了。
可以下載這個GitHub項目然后找到 data-node-config.xml,它會用于創建一個新的數據節點,這個配置包含了一組與數據節點有關的段落和參數。
首先,需要為每一個要部署到集群中的Ignite緩存配置一個特定的節點過濾器。這個過濾器會在緩存啟動時被調用,它會定義一個要存儲緩存數據的集群節點的子集--數據節點。同樣的過濾器在網絡拓撲發生變化時也會被調用,比如新節點加入集群或者舊節點離開集群。過濾器的實現需要加入每個節點的類路徑中,不管該節點是否會成為數據節點。
<bean class="org.apache.ignite.configuration.CacheConfiguration"> ... <property name="nodeFilter"> <bean class="common.filters.DataNodeFilter"/> </property> </bean>
第二,實現過濾器,在本例中,使用了一個非常明確的實現,DataNodeFilter,它通過檢查data.node參數來確定一個節點是否會被視為數據節點。如果一個節點在屬性映射中配置了這個參數,那么他會成為一個數據節點然后數據會駐留于此,否則該節點會被忽略。
public boolean apply(ClusterNode node) { Boolean dataNode = node.attribute("data.node"); return dataNode != null && dataNode; }
第三,data-node-config.xml為每個使用這個配置啟動的節點的屬性映射添加了data.node屬性,就像下面這樣:
<property name="userAttributes"> <map key-type="java.lang.String" value-type="java.lang.Boolean"> <entry key="data.node" value="true"/> </map> </property>
最后,通過使用示例中的DataNodeStartup文件,或者將data-node-config.xml傳遞給Ignite的ignite.sh/bat腳本來啟動一個數據節點的實例。如果選擇了后者,那么一定要將java/app/common目錄中的所有類文件構建成一個jar包,然后還要將這個jar文件加入到每個數據節點的類路徑中。
在實現層次上服務節點的定義與前述數據節點的用法沒有什么大的不同。基本上,需要建立一個方式,即指定一個特定的微服務將要部署在哪些節點上,它們會是整個集群的一個子集。
最初,需要使用服務網格API實現一個微服務,為后文起見,可以回顧一下那個GitHub示例中的已有服務實現,即Maintenance Service。
這個服務可以調度一個車輛維護的服務,并且可以查看已做保養的清單,它實現了所有服務網格的必要方法,包括init(...),execute(...)以及cancel(...),并且在這個接口中增加了新的方法:
public interface MaintenanceService extends Service { public Date scheduleVehicleMaintenance(int vehicleId); public List<Maintenance> getMaintenanceRecords(int vehicleId); }
將這個維護服務配置并且部署到特定的Ignite節點(服務節點)上有幾種方式。在本例中,通過maintenance-service-node-config.xml啟動的每個節點,都可以考慮進行維護服務的部署,下面可以看一下配置。
首先,確保維護服務的實例只會被部署到指定了節點過濾器的節點上:
<bean class="org.apache.ignite.services.ServiceConfiguration"> <property name="nodeFilter"> <bean class="common.filters.MaintenanceServiceFilter"/> </property> </bean>
第二,維護服務使用的過濾器,只會被部署到在屬性映射中配置了maintenance.service.node的節點上:
public boolean apply(ClusterNode node) { Boolean dataNode = node.attribute("maintenance.service.node"); return dataNode != null && dataNode; }
最后,通過如下的XML片段,使用maintenance-service-node-config.xml啟動的每個節點在映射中都會包含這個屬性:
<property name="userAttributes"> <map key-type="java.lang.String" value-type="java.lang.Boolean"> <entry key="maintenance.service.node" value="true"/> </map> </property>
就這些了,使用MaintenanceServiceNodeStartup文件,或者將maintenance-service-node-config.xml傳遞給Ignite的ignite.sh/bat腳本,就可以啟動維護服務節點的一個或者多個實例,如果選擇了后者,一定要確保將java/app/common和java/services/maintenance目錄中的所有文件打包成一個jar文件,然后將這個jar文件添加到每個服務將要被部署的節點的類路徑上。
示例中包含了另一個與車輛管理有關的Ignite服務,使用VehicleServiceNodeStartup文件或者使用經過vehicle-service-node-config.xml配置的ignite.sh/bat,可以啟動至少一個部署有該服務的服務節點,如果選擇了ignite.sh/bat方式,不要忘了組裝一個jar文件然后將其加入相關節點的類路徑上。
一旦準備好了數據節點,維護服務和車輛服務節點也都啟動運行了,那么就可以運行第一個示例應用來訪問這個分布式微服務了。
在示例中找到并且啟動TestAppStartup,這個應用會接入集群,往預定義的緩存中注入虛擬數據,然后與服務進行交互。
MaintenanceService maintenanceService = ignite.services().serviceProxy(MaintenanceService.SERVICE_NAME, MaintenanceService.class, false); int vehicleId = rand.nextInt(maxVehicles); Date date = maintenanceService.scheduleVehicleMaintenance(vehicleId);
如果注意了,應用會使用服務代理來與服務進行交互,代理的好處就是,啟動應用的節點不需要在本地類路徑中持有服務的實現,也不需要在本地部署一個服務。
感謝各位的閱讀,以上就是“Ignite如何定義一個數據節點”的內容了,經過本文的學習后,相信大家對Ignite如何定義一個數據節點這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。