業務一定要分楚控制面和資料面。控制面優先順序高,需要絕對的可靠。資料面執行頻率高,需要絕對的效率。資料面實現業務過程,可以有失敗;控制面保證整個業務的正確性,保證資料面失敗時業務邏輯仍然是正確的。所以,也許需要分離控制面和資料面的tcp埠、cpu核等。
task事務的提交必須要有邏輯key,即controller要能識別某個task是否已經被處理。防止client因為失敗等原因進行重試,而導致task被重複執行。比如資料庫操作,如果不設定key,可能重複寫。如果是金融業務,也許就是一大筆錢了。
佇列的出入盡量避免多個tcp資料作為寫入方,而讀只使用1個tcp或少量tcp。雖然理論上乙個tcp也能達到nic的線速,但是因為多tcp連線更能搶占nic時間片,且健壯性好,且可以與應用層pipeline起來,所以往往會導致佇列滿的。所以要支援讀的tcp個數可配置。
對網路訊息的處理,不管是訊息長度還是訊息內容都要有容錯性。因為網路是不可靠的。
對資料的處理一定要分布到不同的cpu核上;如果是socket資料觸發,則要保證資料收中斷均勻上報到各個核上。
併發系統一定要實現業務控制邏輯的完全可並行;同時保證處理物件的解耦。比如儲存業務中,對每個block(比如512kb的資料塊)的處理要能夠並行處理,同時block之間完全解耦。
處理過程的不同階段之間的佇列或buffer,並行度越高,則需要的size可能更大。比如換大nic時,由於網速增加,對並行度和buffer的size會有更高的要求。
python分布式架構 分布式架構
1.分布式架構 採用centos mongodb windows2012 python redis進行分布式架構搭建,mongodb的框架最核心的設計就是 mongodb和mapreduce。mongodb為海量的資料提供了儲存,則mapreduce為海量的資料提供了計算,windows2012作為...
java需要注意的地方2
1.abstract class name 大俠們,這有何錯誤?答案 錯。abstract method必須以分號結尾,且不帶花括號。2.public class something 有錯嗎?答案 錯。區域性變數前不能放置任何訪問修飾符 private,public,和protected final...
unique約束需要注意的地方
sql 建立作者表 create table author 主鍵 id int primary key,姓名不能為空 name nvarchar 8 not null,年齡必須大於0小於120 age tinyint constraint ck age check age 0 and age 120...