EOS 消息设计(2)并行处理
1. 消息的并行設計
為了最大化并行運算,同時將從程序日志中重新生成應用程序狀態的計算任務降至最低,EOS將身份驗證與應用程序分離
1.1 消息的驗證邏輯Context free actions(signatureverification -runs parallel)
- 確認消息在內部是一致的;
- 確認所有的前置條件都是有效的;
- 修改應用程序狀態。
1. 2. 只讀消息處理 Read only action handlers(for asuccessful action to happen)
部分賬戶可能會處理一些只需要決定通過與否的消息,而不會改變自己內在狀態。這種情形下,只需要有一個或多個進程包含這個特殊賬戶下的只讀消息處理器,這些處理就能并行進行。
-
驗證消息的內部一致性是只讀的,不需要訪問區塊鏈狀態,這意味著它可以最大化并行運算來執行。
-
驗證前置條件(例如需求平衡)也是只讀的,因此也可以從并行運算中獲益。只有對應用程序狀態進行修改才需要寫訪問,并且需要按順序對每個應用程序進行處理。
-
身份驗證是驗證消息是否可以應用的只讀過程,應用程序實際上就是在做這項工作。實時的計算都需要執行,但交易一旦被包含在區塊鏈中,就不再需要執行身份驗證操作了。
1.3. 多賬戶原子交易Atomic transactions with multipleaccounts
有時希望確保消息被多個帳戶以原子方式交付和接受。在這種情況下,兩個消息被放置在一個交易中,兩個帳戶將被分配相同的線程和消息按順序執行。
- 在性能上并不理想,并且當涉及到“付費”用戶的使用時,他們將會被根據交易所涉及的特殊帳戶的數量來收費。最好將涉及兩個或更多帳戶的原子操作最小化
區塊鏈共識取決于確定性(可重現)行為。這意味著所有并行執行都能不能使用互斥體或其他鎖的原語的情況下正常運行。沒有鎖,必須有一些方法來保證所有帳戶只能讀寫自己的私有數據庫。這也意味著每個帳戶會順序處理其消息,并行性確定在帳戶級別。
1.3. 通訊延遲 Minimizing communicationlatency(actions within a block)
并行執行還意味著當腳本生成新消息時,它不會立即發送,而是在下一個周期中發送它。無法立即發送的原因是因為接收方可能會在另一個線程中主動修改自己的狀態。
使用EOS.IO軟件,區塊生成器的工作是將消息傳遞到獨立的線程中,以便它們可以并行地評估。
每個帳戶的狀態只取決于傳遞給它的消息。
1.4. 調度策略 Subjective best effort scheduling (atxn. using more resources are removed)
調度表是區塊生成器的輸出,并且將被確定性地執行,但是生成調度的過程不必是確定性的。這意味著區塊生成器可以利用并行算法來調度事務。
總結
以上是生活随笔為你收集整理的EOS 消息设计(2)并行处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EOS 消息设计(1)消息定义
- 下一篇: EOS 消息设计(3)并行处理之状态评估