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