国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

關于如何設計一個基于事件驅動架構的思考

開發 架構
最近一直在思考一個問題:有沒有這樣一種可能,就是一個領域模型的狀態不依賴于外部,它只負責接收外部的事件,然后根據這些事件做出響應……

最近一直在思考一個問題:有沒有這樣一種可能,就是一個領域模型的狀態不依賴于外部,它只負責接收外部的事件,然后根據這些事件做出響應;響應分兩種:

1)根據模型當前的內存狀態進行業務邏輯處理,然后產生事件,注意:這個過程不會改變模型當前的內存狀態;

2)根據事件改變自己的狀態;

另外,也是最重要的,領域模型不用關心自己所產生的事件到底怎么樣了,比如不關心有沒有持久化,不關心是否和別的事件有并發沖突。它只管根據自己當前的內存狀態做上面這兩點的響應;

如果這樣的設想有可能,那領域模型就是真正的中央業務邏輯處理器了,和CPU很類似了。這樣它才能真正快起來。

簡單的說就是:事件->模型->事件

模型只管響應事件,然后產生新的事件

領域模型就是一黑盒,它只能幫你處理業務邏輯,其他的什么處理結果它一概不關心;當然,領域模型肯定有它自己的狀態,但這個狀態是駐留在內存的,和領域模型是一體的。

我為什么會有這個想法是因為,我在想,為什么要讓領域模型的處理邏輯依賴于它的處理結果是否被正確順利持久化了?感覺這很荒唐。

既然領域模型有自己的內存狀態空間,他的所有邏輯也應該只依賴于這個狀態空間,不再依賴于其他任何外部的東西。

當然,以前我們設計的IRepository,實際背后都是直接從數據庫取。這樣的話,領域模型的狀態空間就是數據庫了。但是這樣其實很不好,因為為什么不用內存作為領域模型的狀態空間呢?

現在再想想LMAX就是我剛才的想法的一個實際例子。

事件->模型->事件,這樣的設計,理論上并不需要必須要求單線程來訪問模型,因為領域模型不依賴于任何外部的狀態,只依賴于自己所在存活內存空間;單線程有一個很大的好處就是可以防止并發沖突的產生。我們其實完全支持多線程或集群的方式,只不過這樣會有可能訪問到的領域對象的狀態是了老的,因為不同的機器之間的領域模型內存對象的狀態需要做一些同步,訪問到老數據的可能性的大小取決于并發的大小以及機器之間數據同步的快慢;

LMAX之所以用單線程,是考慮了,這單線程的領域模型和性能之間,性能已經可以達到他們的要求了。

這樣的架構,領域模型中的任何一個對象的一次狀態更新至少會響應兩個事件,舉個例子:

1)先響應ChangeNoteCommand(command也是一種事件,可以理解為NoteChangeRequested),然后Note模型產生一個NoteChanged事件;

2)然后該事件(NoteChanged)最終又被發送到領域模型讓其響應,此時,領域模型才去更改自己的Note狀態;

經過這兩個事件的響應,才完成了Note的最終狀態的修改;而我們以前都是從數據庫取Note,然后更改,然后保存到數據庫。這樣不慢才怪!

通過上面的兩次事件響應,可以換來領域模型***的吞吐量。剩下的我們只要考慮:消息的序列化和反序列化、消息傳遞的速度、事件持久化的速度、并發沖突后重試的設計,以及消息丟失,等問題。但這些都不是領域模型該考慮的問題。這些外圍的任何問題,都不要讓領域模型自己去考慮,我們應該對出現的各種問題逐個尋求解決方案。

每個問題的解決方案我大概理了下我的對策:

  1. 消息的序列化和反序列化:這個簡單,用BinaryFormatter,或更快的開源序列化組件,可以達到每秒10W次每秒;
  2. 消息傳遞的速度:用MSMQ,如果嫌太慢,就用ZeroMq,可以達到30W消息每秒;
  3. 事件持久化的速度:由于事件都是跟著單個聚合根,所以我們只要確保單個聚合根的事件不會沖突(即沒有相同的版本號的事件);為了更快的持久化,我們可以對事件按照聚合根或者其他方式進行分區存放,不同的服務器存放不同的聚合根;這樣通過集群持久化的方式可以實現多事件同時被持久化,從而提高整體的事件持久化吞吐量;如單個mongodb server每秒持久化5000個,那10個mongodb server能每秒持久化5W個;
  4. 并發沖突后怎么辦:一般來說就是選擇重試,但為了確保不會出現不可控的局面(可能由于某種原因一直在重試),那需要設置一個***的重試次數;超過***重試次數后不再重試,然后記錄日志,以供以后查找問題;這里的重試的意思是:重新找到對應該事件的command,然后再次發送該command給領域模型處理;
  5. 消息丟失:丟失就丟失了唄,呵呵;要是你覺得消息決不能丟失,那就用可靠的帶持久化功能的消息傳輸隊列,如MSMQ;當然,就算消息丟失了,我們很多時候都要想想有沒有影響的,一般來說,消息丟失,至少我們是知道程序有問題了的,因為模型的狀態此時一定是不對的。我們可以通過在消息發出時和接收時記錄日志,這樣方便以后查找消息是在哪個環節丟的;
  6. 任何其他的異常出現,這個我覺得如果都是托管代碼,那可以在必要的地方加try catch,然后記錄日志。至于是否要重試,還要看情形;

另外,如果是多線程訪問模型,或集群訪問,那很多時候訪問到的內存的領域對象的狀態都是老的,那怎么辦?其實這不是問題,因為事件持久化的時候會被檢測到這種并發重復,然后對應的command會被重試。

另外,這種架構,傳輸的是事件,事件都是很小的,所以不用擔心消息傳輸的性能。

目前就想到這些。后續再完善思路,

***,我一直認為:知識決定命運,學習積累知識,而正確的思維方式是一切高效學習的基礎。所以要學會如何清晰地思考!

所以,我們最重要的是要學會如何思考。

呵呵!

原文鏈接:http://www.cnblogs.com/netfocus/archive/2013/03/26/2982152.html

責任編輯:林師授 來源: 博客園
相關推薦

2024-08-27 12:49:20

2024-04-24 10:38:22

2024-05-13 08:40:02

Go事件驅動編程

2012-12-17 10:50:27

程序員

2025-05-27 10:15:00

Go開發軟件架構

2020-11-11 09:49:12

計算架構

2012-11-12 10:46:37

2021-05-20 13:22:31

架構運維技術

2023-12-13 10:44:57

事件驅動事件溯源架構

2022-11-08 08:35:53

架構微服務移動

2023-08-08 08:00:00

架構Kafka

2018-11-22 14:09:45

iOS架構組件開發

2025-10-28 02:00:00

秒殺系統客戶端并發

2025-01-22 08:00:00

架構秒殺系統Java

2022-06-02 10:35:20

架構驅動

2023-07-12 08:30:52

服務架構事件驅動架構

2013-07-01 11:01:22

API設計API

2021-09-01 08:58:15

項目 UTFailed

2021-12-24 10:59:37

Kubernetes架構代碼

2018-09-06 22:49:31

分布式架構服務器
點贊
收藏

51CTO技術棧公眾號

国产伦精一区二区三区| 色成人亚洲网| 国产成+人+综合+亚洲欧美丁香花| 丁香五六月婷婷久久激情| 丰满少妇久久久久久久| 亚洲综合色站| 久草在线成人| 久久中文字幕导航| 亚洲网站免费| 成人高清免费在线| 新的色悠悠久久久| 欧美日韩中文在线视频| 国产日韩欧美91| 91精品国产综合久久久蜜臀图片| 国产精品久久久久久久免费观看| caoporm免费视频在线| 免费高清在线| 激情综合网俺也去| 国产精品旅馆在线| 中文字幕在线成人| 欧洲精品视频在线观看| 欧美一级专区免费大片| 久久精品视频99| 久久先锋影音av| 国产精品婷婷| 91精品综合| 国产a亚洲精品| 你懂的av在线| 91视频最新入口| av二区三区| 天天综合中文字幕| 日韩精品一线二线三线| 精品一区二区三区自拍图片区| 粉嫩精品一区二区三区在线观看| 91丝袜美腿美女视频网站| 亚洲综合在线播放| 91久久久国产精品| 国产成人一区二区三区免费看| 国产精品一区二区性色av | 欧美久久久久久久久久| 欧美日韩一区免费| 欧美视频在线观看免费网址| 在线观看免费亚洲| 亚洲精品国精品久久99热一| 一区二区三区小说| 午夜精品久久久久久久久久久| 精品久久在线播放| 91精品国产欧美一区二区成人| 欧美成人艳星乳罩| 亚洲国产精品久久久久久| 97久久精品国产| 亚洲精品日韩在线观看| 亚洲欧洲一区二区福利| 国产在线精品91| 五月婷婷深爱五月| 天堂在线中文| 美女搞黄视频在线观看| a成人v在线| 日本成人福利| 97青娱国产盛宴精品视频| 乱馆动漫1~6集在线观看| 日韩午夜视频在线| 亚洲国产精品日韩专区av有中文| 夜夜嗨一区二区| 欧美日韩三级电影在线| 国产成人综合在线| 亚洲天堂成人网| 欧美日韩久久一区| 亚洲午夜av电影| 成人免费高清完整版在线观看| 国产精品一区二区免费看| 国产精品扒开腿爽爽爽视频| 国内一区二区三区在线视频| 久久国产精品一区二区三区四区 | 清纯唯美亚洲色图| 韩国精品福利一区二区三区| 欧美专区一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 欧美一级二级在线观看| 2018国产精品视频| 欧美午夜视频在线| 日本女优在线视频一区二区| 日韩中文字幕亚洲一区二区va在线 | 日韩免费在线看| 日韩免费电影一区二区三区| 欧美不卡在线播放| 新版中文在线官网| 香蕉视频一区二区三区| 国产福利一区二区| 一区二区理论电影在线观看| 国产丝袜精品视频| 久久精品成人一区二区三区蜜臀| 免费黄色一级网站| 人成免费电影一二三区在线观看| 91国内外精品自在线播放| 天堂成人国产精品一区| 精品福利在线观看| 精品国产欧美一区二区三区成人| 免费人成在线观看视频播放| av免费在线免费观看| 欧美日韩亚洲一区三区| 在线不卡中文字幕播放| 日本电影一区二区三区| 国产精品25p| 97国产一区二区| 亚洲第一色在线| 妞干网这里只有精品| 天堂av在线网| 欧美综合视频| 亚洲精品久久嫩草网站秘色| 91av在线不卡| aaaaa毛片| 精品视频亚洲| 一区二区三区久久| 色88888久久久久久影院野外| 大量国产精品视频| aa在线免费观看| 秋霞影院一区二区三区| 午夜在线观看免费一区| 精品电影一区二区| 亚洲开发第一视频在线播放| 九九久久久久99精品| 欧美一级视频免费看| а√在线天堂官网| 欧美黄色一级| 亚洲国产一区二区a毛片| 成人在线视频网| 22288色视频在线观看| 国产成+人+综合+亚洲欧美| 久久久久久久欧美精品| 精品爽片免费看久久| 国产无遮挡又黄又爽免费软件| 综合久久精品| 日韩一区二区三区免费观看| 国产精品视频公开费视频| 日本欧美中文字幕| 久草在线在线| 免费精品国产的网站免费观看| 久久久国际精品| 国产在线视频不卡| 欧美四级在线| 久久99最新地址| 91精品国产99| 深夜国产在线播放| 91女厕偷拍女厕偷拍高清| 国产原创欧美精品| 国产综合色在线观看| 亚洲欧美日韩国产中文在线| 欧美一级二级三级九九九| 一级毛片在线播放| 亚洲一级黄色| 97视频com| 精品精品导航| 国精产品一区一区三区有限在线| www黄色av| 午夜精品久久99蜜桃的功能介绍| 日韩欧美精品三级| 男女无套免费视频网站动漫| 国模少妇一区二区三区| 亚洲xxxxx| 97se亚洲| 日本乱人伦一区| 又大又硬又爽免费视频| 成人在线观看a| 国产做a爰片久久毛片| 国产精品高清一区二区三区| 手机成人av在线| 日韩美女毛片| 欧美日韩午夜剧场| 免费日韩av电影| 99久久亚洲精品| 亚洲人永久免费| 国产精品igao| 91在线精品秘密一区二区| 一区二区精品在线观看| 围产精品久久久久久久| 亚洲free性xxxx护士白浆| 国产精品美女在线观看直播| 国产精品综合二区| 91精品国产91久久久久久吃药| 男女啪啪999亚洲精品| 日韩成人xxxx| 自由日本语热亚洲人| 亚洲第一男人天堂| 97人人爽人人澡人人精品| 亚洲欧美日韩一区二区 | 亚洲少妇最新在线视频| 久久777国产线看观看精品| 香蕉久久免费电影| 丝袜美腿亚洲一区二区| 日本精品视频| 国产一区二区三区在线播放免费观看| 亚洲精品自拍| 日韩av电影手机在线观看| 亚洲伦伦在线| 日韩免费三级| 中文高清一区| 野外做受又硬又粗又大视频√| 亚洲欧美偷拍卡通变态| 精品欧美不卡一区二区在线观看 |