事件驅(qū)動(dòng)架構(gòu)(EDA)是一種專注于事件的創(chuàng)建、檢測(cè)和反應(yīng)的設(shè)計(jì)原則。EDA以其彈性和低延遲而聞名,是開(kāi)發(fā)強(qiáng)大、高性能微服務(wù)的可靠選擇。此外,這種方法有助于提高工作效率,使云遷移過(guò)程更加順暢。想要學(xué)習(xí)java更多知識(shí)和技能,可以考慮參加java培訓(xùn),有經(jīng)驗(yàn)豐富的專業(yè)講師指導(dǎo)教學(xué),有緊跟市場(chǎng)需求的實(shí)時(shí)課程,可以讓你快速掌握這門技術(shù),節(jié)約時(shí)間,少走彎路。
在本文中,我們將概述開(kāi)發(fā)此類服務(wù)的六個(gè)關(guān)鍵考慮因素和策略。
打造基于事件的微服務(wù)
在EDA中,微服務(wù)通過(guò)事件相互作用。一個(gè)事件只是一個(gè)不可變的指示,表明某件事已經(jīng)發(fā)生。微服務(wù)注冊(cè)他們對(duì)事件子集的興趣,并通過(guò)在事件發(fā)生時(shí)對(duì)這些事件作出反應(yīng)來(lái)執(zhí)行處理。在事件處理完成后,微服務(wù)通常會(huì)發(fā)布一個(gè)或多個(gè)反映該處理結(jié)果的事件,這將觸發(fā)進(jìn)一步的下游微服務(wù)。
為簡(jiǎn)單起見(jiàn),我們將所有輸入視為記錄的、可回放的事件。這些輸入包括掛鐘、參考信息、配置詳細(xì)信息、命令和查詢。例如,時(shí)間戳源自最近的掛鐘事件,因此它們是可重放的,并且命令或查詢被建模為表示已經(jīng)請(qǐng)求了這樣的命令或查詢的事件。
EDA環(huán)境使用不可變的、不斷增長(zhǎng)的日志來(lái)管理事件。這種方法意味著微服務(wù)變得不那么依賴彼此的內(nèi)部操作(松散耦合),使系統(tǒng)在許多方面更加靈活,促進(jìn)不同的部署選項(xiàng),并提高可伸縮性。想掌握J(rèn)ava技術(shù)的同學(xué)不妨報(bào)個(gè)Java培訓(xùn)班,可以節(jié)省學(xué)習(xí)時(shí)間,提高學(xué)習(xí)效率,在短時(shí)間內(nèi)學(xué)有所成,還能找到一份不錯(cuò)的工作。
在事件驅(qū)動(dòng)的框架內(nèi)開(kāi)發(fā)的微服務(wù)在設(shè)計(jì)、測(cè)試和推理上更簡(jiǎn)單。每個(gè)微服務(wù)都是它的代碼和它曾經(jīng)處理過(guò)的所有事件的函數(shù)。這個(gè)方面簡(jiǎn)化了行為驅(qū)動(dòng)測(cè)試的創(chuàng)建,本質(zhì)上歸結(jié)為數(shù)據(jù)輸入和數(shù)據(jù)輸出場(chǎng)景。這簡(jiǎn)化了軟件的維護(hù)。
在事件驅(qū)動(dòng)的上下文中實(shí)現(xiàn)應(yīng)用程序邏輯
在EDA應(yīng)用程序中,事件被定義為對(duì)業(yè)務(wù)領(lǐng)域中的事件進(jìn)行建模。應(yīng)用程序組件以模擬業(yè)務(wù)流程活動(dòng)的方式對(duì)這些事件做出反應(yīng)。封裝在事件有效負(fù)載中的與事件相關(guān)聯(lián)的數(shù)據(jù)可以在應(yīng)用程序中作為數(shù)據(jù)傳輸對(duì)象(DTO)來(lái)實(shí)現(xiàn)。在一個(gè)單一的、不可變的事件流中表示事件具有額外的優(yōu)勢(shì),它提供了在應(yīng)用程序執(zhí)行期間發(fā)生的所有狀態(tài)變化的審計(jì)跟蹤,使得分析意外行為、生成反映生產(chǎn)環(huán)境的測(cè)試環(huán)境以及滿足法規(guī)要求變得更加容易。事件流成為整個(gè)應(yīng)用程序的唯一真實(shí)來(lái)源。
采用輕量級(jí)、全面的記錄策略消除了對(duì)大量日志記錄的需求,從而最大限度地減少了開(kāi)銷和延遲。要復(fù)制應(yīng)用程序的狀態(tài),請(qǐng)檢索事件日志,并將微服務(wù)重放到所需的時(shí)間點(diǎn)。這種方法允許你主動(dòng)調(diào)試和驗(yàn)證應(yīng)用程序中的問(wèn)題解決方案,而不是等待問(wèn)題再次出現(xiàn)。想要學(xué)習(xí)java技術(shù)的同學(xué),可以考慮參加Java培訓(xùn),全面系統(tǒng)的理論知識(shí)和實(shí)操項(xiàng)目學(xué)習(xí),讓你快速學(xué)有所成。
優(yōu)化微服務(wù)性能
使用高性能、低延遲的消息傳遞,微服務(wù)可以像整體結(jié)構(gòu)中的線程一樣快速通信,同時(shí)仍然保持微服務(wù)的主要優(yōu)勢(shì)。這些包括組件之間不同的契約、獨(dú)立的測(cè)試和開(kāi)發(fā)、所有交互的全面記錄以及部署策略的獨(dú)立性。
盡管系統(tǒng)分布在全球眾多數(shù)據(jù)中心,但這些微服務(wù)的效率意味著單臺(tái)機(jī)器可以有效地處理關(guān)鍵的、對(duì)延遲最敏感的處理任務(wù)。
我們通常以每秒十萬(wàn)個(gè)事件的速度對(duì)單線程服務(wù)進(jìn)行延遲基準(zhǔn)測(cè)試。需要更高吞吐量的服務(wù)每秒可以處理超過(guò)一百萬(wàn)個(gè)事件的負(fù)載。
此外,當(dāng)事件處理在單個(gè)線程中執(zhí)行時(shí),每個(gè)組件都將運(yùn)行得最快,因?yàn)檫@消除了鎖爭(zhēng)用的大量開(kāi)銷,因?yàn)樵诮M件中沒(méi)有對(duì)可變狀態(tài)的并發(fā)訪問(wèn)。
事件復(fù)制、確定性服務(wù)和實(shí)時(shí)升級(jí)
我們使用ChronicleQueue作為事件存儲(chǔ),從領(lǐng)導(dǎo)者到追隨者對(duì)該日志進(jìn)行總排序和復(fù)制。關(guān)注者將看到完全相同的數(shù)據(jù),順序相同,每條消息都有相同的標(biāo)識(shí)符。
ChronicleServices是一個(gè)基于Java的微服務(wù)框架,它提供了可用于確保服務(wù)確定性的特性。你可以確信,追隨者服務(wù)將處于與領(lǐng)導(dǎo)者相同的狀態(tài),并準(zhǔn)備好接管它。
我們看到對(duì)實(shí)時(shí)升級(jí)支持的需求越來(lái)越多。使用這個(gè)框架,我們可以構(gòu)建服務(wù),這些服務(wù)可以在運(yùn)行不同軟件版本的實(shí)例之間無(wú)縫轉(zhuǎn)換,并在必要時(shí)恢復(fù)。參加java培訓(xùn)是入門學(xué)習(xí)的最佳選擇,有經(jīng)驗(yàn)豐富的專業(yè)老師面授指導(dǎo)教學(xué),通過(guò)理論結(jié)合實(shí)戰(zhàn)的方式教授java基礎(chǔ)知識(shí),幫助你更好的理解與運(yùn)用java。