公共云計(jì)算鼓勵(lì)使用分布式應(yīng)用程序,這使得企業(yè)用戶能夠充分利用大量服務(wù)器的優(yōu)勢來運(yùn)行多個(gè)系統(tǒng)——從大型企業(yè)應(yīng)用程序到有針對(duì)性的微服務(wù)。但是,管理員們應(yīng)當(dāng)如何輕松地把所有這些數(shù)據(jù)遷往相應(yīng)的服務(wù)器呢?其中一種方法就是通過通訊總線,同時(shí)如果某個(gè)管理員希望從多個(gè)來源以近乎實(shí)時(shí)的速度遷移大容量數(shù)據(jù),那么他應(yīng)當(dāng)考慮一下亞馬遜的Kinesis。
亞馬遜Kinesis是亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)所提供的一項(xiàng)托管通訊服務(wù),它可為實(shí)時(shí)數(shù)據(jù)處理應(yīng)用提供高性能和低管理開銷。該服務(wù)是專為接受來自于大量來源并把數(shù)據(jù)分發(fā)到各種應(yīng)用程序的應(yīng)用而設(shè)計(jì)的。Kinesis是基于Apache Kafka的,后者提供了一個(gè)“發(fā)布-訂閱”的通訊服務(wù)。
亞馬遜Kinesis的設(shè)置
設(shè)置亞馬遜Kinesis“發(fā)布-訂閱”平臺(tái)的第一步就是定義一個(gè)Kinesis流。這一工作通常在AWS管理控制臺(tái)上完成。
所謂Kinesis流,是指一組接受、存儲(chǔ)和傳遞消息的來源。高容量數(shù)據(jù)流可以按多個(gè)分塊進(jìn)行劃分,這一點(diǎn)與使用多個(gè)服務(wù)器進(jìn)行服務(wù)器集群的擴(kuò)容過程很相似。實(shí)際所需的分塊數(shù)量取決于消息的平均大小、寫操作記錄的速度以及用戶應(yīng)用程序的數(shù)量。AWS管理控制臺(tái)提供了一個(gè)可以幫助管理員估計(jì)用于滿足他們需求所需分塊數(shù)量的工具。
與其他所有的AWS資源一樣,用戶需要定義訪問控制措施。Kinesis的訪問控制措施可允許客戶自行定義用戶和角色的權(quán)限,從而讓他們可以在隊(duì)列中設(shè)置消息、獲取隊(duì)列的狀態(tài)信息和詳細(xì)內(nèi)容,并從隊(duì)列中讀取所需信息。
生產(chǎn)應(yīng)用程序可被授權(quán)向Kinesis隊(duì)列寫消息。一個(gè)消息中包括了:一個(gè)可被交付的數(shù)值或有效負(fù)載(例如一個(gè)JavaScript Object Notation結(jié)構(gòu)和鍵值對(duì))以及一個(gè)分塊鍵。一個(gè)分塊最高每秒可以接受一千個(gè)消息;而分開鍵可以最多為256個(gè)字符長。Kinesis的API提供了一個(gè)PutRecord的函數(shù),這個(gè)功能函數(shù)可以一次向一個(gè)隊(duì)列增加一個(gè)消息;PutRecords函數(shù)可供批量增加消息使用。
用戶應(yīng)用程序則涉及GetRecords API函數(shù)。一般來說,針對(duì)性的應(yīng)用程序可以在一個(gè)循環(huán)中持續(xù)不斷地運(yùn)行這個(gè)函數(shù)。每個(gè)記錄的容量最多可支持50KB。該系統(tǒng)則可在一個(gè)單一的分塊中每秒支持2MB的數(shù)據(jù)。如果用戶需要更多的數(shù)據(jù)流量,可在他的流中增加更多的分塊。GetRecords函數(shù)還支持一個(gè)LIMIT參數(shù),該參數(shù)主要用于指定在單一的一次調(diào)用中支持的最大記錄數(shù)。管理員們可以使用這個(gè)功能函數(shù)來設(shè)置用戶應(yīng)用程序所接受的數(shù)據(jù)量,尤其是在高峰期向消息隊(duì)列執(zhí)行寫操作時(shí)。
亞馬遜Kinesis的短板
當(dāng)談及實(shí)時(shí)數(shù)據(jù)處理應(yīng)用時(shí),Kinesis還有這一些局限性。該服務(wù)最多可保留消息24小時(shí)。這一點(diǎn)不同于Kafka,后者可以按照實(shí)際要求進(jìn)行配置,其存儲(chǔ)周期可更長。IT團(tuán)隊(duì)?wèi)?yīng)當(dāng)為應(yīng)用程序的運(yùn)行分配足夠的資源以便于應(yīng)用程序能夠在24小時(shí)內(nèi)讀取所有的消息。
AWS CloudWatch可以幫助監(jiān)控一個(gè)消息隊(duì)列的載入以及用戶應(yīng)用程序的流量。AWS彈性負(fù)載平衡器或自動(dòng)擴(kuò)展功能可以幫助確保有足夠的計(jì)算資源跟上消息流。
如果用戶在實(shí)際使用中超過了消息接收的上限,那么用戶將會(huì)收到一個(gè)被稱為ProvisionedThroughtputExceed的錯(cuò)誤;然后該消息將被拒絕。如果在讀操作過程中超出了這個(gè)閾值,那么用戶同樣也會(huì)收到一個(gè)ProvisionedThroughtputExceed的錯(cuò)誤。如果需要增加容量,那么用戶需要在他們的流中增加更多的分塊。
為了向一個(gè)流增加分塊,用戶可分拆現(xiàn)有的分塊。每一次分拆操作只需要幾秒鐘的時(shí)間,但是,每次只能拆分一個(gè)分塊。如果有數(shù)以百計(jì)的分塊,那么這就會(huì)成為一個(gè)問題,因?yàn)樵黾恿鞯南鄬?duì)容量將顯著增加所需的時(shí)間。
開發(fā)與集成
Kinesis提供了一個(gè)REST API,這樣用戶就可以使用幾乎任何的編程語言來完成對(duì)消息隊(duì)列的讀寫操作。AWS軟件開發(fā)工具還為Kinesis功能函數(shù)提供了特定語言的綁定。
AWS提供了多個(gè)接口以簡化與其他服務(wù)的集成,具體包括DynamoDB、Redshift、簡單存儲(chǔ)服務(wù)以及ElasticSearch。Kinesis是以分塊時(shí)間(每小時(shí)0.015美元)和PUT運(yùn)行次數(shù)(0.028美元/百萬PUT)進(jìn)行計(jì)費(fèi)的。