快速的骆驼和云消息传递
Apache Camel是一個(gè)流行的,成熟的開源集成庫(kù)。 它實(shí)現(xiàn)了企業(yè)集成模式 ,這是在集成分布式系統(tǒng)時(shí)經(jīng)常出現(xiàn)的一組模式。 過去,我寫過很多關(guān)于Camel的文章, 包括為什么我比Spring Integration更喜歡它 , 路由引擎 如何 工作 , 如何在AWS SQS中使用JMS選擇器, 等等 。
Camel還實(shí)現(xiàn)了197個(gè)連接器/適配器,用于與外部系統(tǒng)對(duì)話(轉(zhuǎn)到源代碼,components /目錄并運(yùn)行此命令:ls -lp components / | grep / | wc -l), github還有很多 ,您可以編寫你自己很瑣碎。 與其他集成庫(kù)相比,這為Camel提供了更廣泛的連接選項(xiàng)。
最近,我很幸運(yùn)能夠幫助使用Camel的一家知名的頂級(jí)電子零售商。 他們接受在線訂單并使用事件驅(qū)動(dòng)的體系結(jié)構(gòu)處理它們,其中包括發(fā)布事件,例如“ order_received”,“ order_cancelled”,“ order_ready_to_ship”等。 這些事件由有興趣參與訂單處理流程的微服務(wù)來處理,并且由于存在適當(dāng)?shù)腅DA而被松散耦合。
這種類型的零售業(yè)務(wù)的性質(zhì)是非常季節(jié)性的。 而且在一年中的某些時(shí)段(節(jié)假日等),負(fù)載往往會(huì)增加幾個(gè)數(shù)量級(jí)。 因此,能夠在不中斷的情況下進(jìn)行擴(kuò)展以滿足這些季節(jié)性高峰至關(guān)重要。
幸運(yùn)的是,由于他們是一群聰明人,他們使用Apache Camel進(jìn)行集成,尤其是其中一些服務(wù)的實(shí)現(xiàn)。 每個(gè)訂單都會(huì)生成很多事件,因此必須及時(shí)處理它們,并保持其余的負(fù)載。 為此的排隊(duì)服務(wù)是Amazon SQS,而Camel為此提供了一個(gè)AWS SQS組件 。
對(duì)于標(biāo)稱負(fù)載,Camel可以很好地處理這些事件。 但是當(dāng)隊(duì)列變得更深時(shí),駱駝在跟上時(shí)遇到了一些麻煩。 每分鐘僅收到200條消息,這沒有通過氣味測(cè)試。 深入研究發(fā)現(xiàn),AWS庫(kù)使您可以垂直擴(kuò)展規(guī)模, 從而增加連接數(shù)并按批處理消息傳遞方式 (最多10條批處理消息)。 批處理很有幫助,實(shí)現(xiàn)了Camel來處理批處理,但是它仍然不夠快,每小時(shí)只有大約1萬條消息。
進(jìn)一步挖掘后,我們可以看到只有一個(gè)線程正在處理消息隊(duì)列的輪詢。 因此,我們決定使用SEDA隊(duì)列 ,而不是使用與輪詢隊(duì)列的線程內(nèi)聯(lián)處理消息,以便我們可以從SQS中提取消息并快速轉(zhuǎn)儲(chǔ)到內(nèi)存隊(duì)列中,這樣就可以啟動(dòng)下一個(gè)輪詢:
from("amazon-sqs://order.queue").to("seda:incomingOrders");from("seda:incomingOrders").process(do our processing in another thread...);這使我們能夠使用暫存事件驅(qū)動(dòng)的體系結(jié)構(gòu)模式處理負(fù)載。 這一變化使我們的性能再次提高到每小時(shí)約4萬條消息,但是我們談?wù)摰氖且粋€(gè)非常受歡迎的商務(wù)站點(diǎn),因此仍不足以進(jìn)行擴(kuò)展以滿足高峰期系統(tǒng)的需求。
因此,我們又看了一眼,想知道為什么不能同時(shí)進(jìn)行多個(gè)線程/連接輪詢? AWS庫(kù)是考慮到這一點(diǎn)編寫的,但是沒有一種方法可以配置Camel以針對(duì)這種特定類型的終端節(jié)點(diǎn)執(zhí)行此操作。 Camel可以對(duì)其他端點(diǎn)(JMS,SEDA等)執(zhí)行此操作,但是為此我們需要在Camel SQS中進(jìn)行一些小的更改。
這就是使用開源,社區(qū)風(fēng)格的開發(fā)理念的美妙之處:代碼是開放的,社區(qū)歡迎變化,現(xiàn)在Camel及其功能的未來用戶可以從這種協(xié)作中受益。
因此,我們犯了一個(gè)補(bǔ)丁 ,允許您設(shè)置的SQS隊(duì)列concurrentConsumers選項(xiàng),將斜升用于連接和查詢隊(duì)列的線程數(shù)。 像這樣:
from("amazon-sqs://order.queue?concurrentConsumers=50").to(.... processing here....)有關(guān)更多信息,請(qǐng)參見camel-sqs上的文檔 。 此更改將是Apache Camel 2.15.0發(fā)行版的一部分,該發(fā)行版將在接下來的幾周內(nèi)發(fā)布。
通過此設(shè)置,我們能夠處理黑色星期五和網(wǎng)絡(luò)星期一可能在站點(diǎn)上引發(fā)的所有負(fù)載,一次處理每小時(shí)超過150萬條消息。
謝謝開源!
翻譯自: https://www.javacodegeeks.com/2015/02/very-fast-camels-and-cloud-messaging.html
總結(jié)
以上是生活随笔為你收集整理的快速的骆驼和云消息传递的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑系统优化网站推荐(电脑优化软件推荐)
- 下一篇: 企鹅直播tv怎么用?企鹅tv直播平台使用