從光大證券的軟體設計缺陷想到的。
8月16中國股市出現名震歷史的烏龍事件,導致該事件的原因今天被證監會調查後,確定是軟體系統的設計問題:
光大證券自營的策略交易系統存在程式呼叫錯誤、額度控制失效等設計缺陷,並被連鎖觸發,導致生成巨量市價委託訂單,累計申報買入234億元,實際成交72.7億元。
根據這條資訊我個人瞎胡亂猜測一下出錯場景:
交易員發出買單以後,由於鎖問題,無論是語言記憶體鎖或資料庫鎖,導致買入狀態沒有更新,或者交易員點按“買入”按鈕時,沒有響應,不由自主多按了幾下,結果,這些命令恰恰全部被計算機系統都接受,只是因為鎖堵塞,沒有及時處理,沒有及時更新狀態,等系統稍微空閒,這些被鎖住的交易全部被執行。
這個問題有點類似“重複提交”問題,打個簡單比喻,在本論壇發言,按釋出鍵後,沒有反應,或者查詢主題列表沒有看到,然後就再多按一次,結果同一個貼重複發表了兩次。
個人觀點:出現這種問題其實真正體現了用計算機提供的鎖等ACID機制並不能真正解決業務上的高一致性。
有一篇文章:弱一致性在現實世界中到處存在 http://www.jdon.com/43246:
過去,所有的一切都是寫在紙上的假象,至少過去幾十年一直如此,即時一致性是IT人發明的,他們紙上談兵地認為:不同組織不同地方的資料如果沒有即時一致性(高一致性)幾乎不可能的。
其實,現實生活中也並不是不存在高一致性,只是可能比較少,這裡我想提出一個新觀點:高一致性是個好東西,但是好東西是不是一定是預設配置呢?比如有錢是個好東西,那麼是不是讓每個人一生下來都有很多錢呢?實際相反,每個人生下來預設是沒有錢的,赤條條降生。
既然高一致性是好東西,當然不能隨便預設配置,但是實際中卻相反,當我們使用關聯式資料庫,或者使用事務機制等ACID時,這些機制都預設讓我們的程式變成高一致性,高一致性不是稀罕物,可以無償獲得,那麼無疑結果是,當系統負載增加時,每個無償得到高一致性的處理程式都要付出代價,那就是堵塞。
相反,如果我們預設是弱一致性,對於需要高一致性的業務,我們透過業務分析會辨識發現,然後給予充分的業務重視和業務設計,那麼也許能夠將計算機提供ACID服帖地為我們業務高一致性服務。
在DDD分析需求過程中,這個問題得到高度重視,以DDD書籍中訂單為案例,該訂單有一個額度限制,也就是所有訂單下條目Item總額不能超過訂單設定的額度限制,這個限制其實是一種邏輯一致性限制,而且必須是實時高一致性的,因為每增加一個訂單條目,都必須檢查這一邏輯一致是否被破壞,如果是,立即不能加入。
比如Oder限制是1000元,訂購了三件商品,總金額是1200元,超過了1000元限制,那麼這個訂單是無法生成的,這屬於即時一致性檢查。
這種檢查我們採取什麼方式實現呢?傳統是採取鎖的方法,將Oder這個物件或表鎖住,因為在統計總金額時是不允許其他人有操作的,當你鎖住這個物件或表時,堵塞的可能性就會到來。
如何突破這種鎖方式的限制呢?那就是Actor模型,也就是說,Oder檢查自己總金額,不用在被外界訪問時被鎖住,而是永遠無法被外界鎖住可能,因為Actor模型無法被外界直接使用方法呼叫,只能象發QQ訊息一樣與外界互動。
具體可見這個貼:事件驅動程式設計:
光大證券自營的策略交易系統存在程式呼叫錯誤、額度控制失效等設計缺陷,並被連鎖觸發,導致生成巨量市價委託訂單,累計申報買入234億元,實際成交72.7億元。
根據這條資訊我個人瞎胡亂猜測一下出錯場景:
交易員發出買單以後,由於鎖問題,無論是語言記憶體鎖或資料庫鎖,導致買入狀態沒有更新,或者交易員點按“買入”按鈕時,沒有響應,不由自主多按了幾下,結果,這些命令恰恰全部被計算機系統都接受,只是因為鎖堵塞,沒有及時處理,沒有及時更新狀態,等系統稍微空閒,這些被鎖住的交易全部被執行。
這個問題有點類似“重複提交”問題,打個簡單比喻,在本論壇發言,按釋出鍵後,沒有反應,或者查詢主題列表沒有看到,然後就再多按一次,結果同一個貼重複發表了兩次。
個人觀點:出現這種問題其實真正體現了用計算機提供的鎖等ACID機制並不能真正解決業務上的高一致性。
有一篇文章:弱一致性在現實世界中到處存在 http://www.jdon.com/43246:
過去,所有的一切都是寫在紙上的假象,至少過去幾十年一直如此,即時一致性是IT人發明的,他們紙上談兵地認為:不同組織不同地方的資料如果沒有即時一致性(高一致性)幾乎不可能的。
其實,現實生活中也並不是不存在高一致性,只是可能比較少,這裡我想提出一個新觀點:高一致性是個好東西,但是好東西是不是一定是預設配置呢?比如有錢是個好東西,那麼是不是讓每個人一生下來都有很多錢呢?實際相反,每個人生下來預設是沒有錢的,赤條條降生。
既然高一致性是好東西,當然不能隨便預設配置,但是實際中卻相反,當我們使用關聯式資料庫,或者使用事務機制等ACID時,這些機制都預設讓我們的程式變成高一致性,高一致性不是稀罕物,可以無償獲得,那麼無疑結果是,當系統負載增加時,每個無償得到高一致性的處理程式都要付出代價,那就是堵塞。
相反,如果我們預設是弱一致性,對於需要高一致性的業務,我們透過業務分析會辨識發現,然後給予充分的業務重視和業務設計,那麼也許能夠將計算機提供ACID服帖地為我們業務高一致性服務。
在DDD分析需求過程中,這個問題得到高度重視,以DDD書籍中訂單為案例,該訂單有一個額度限制,也就是所有訂單下條目Item總額不能超過訂單設定的額度限制,這個限制其實是一種邏輯一致性限制,而且必須是實時高一致性的,因為每增加一個訂單條目,都必須檢查這一邏輯一致是否被破壞,如果是,立即不能加入。
比如Oder限制是1000元,訂購了三件商品,總金額是1200元,超過了1000元限制,那麼這個訂單是無法生成的,這屬於即時一致性檢查。
這種檢查我們採取什麼方式實現呢?傳統是採取鎖的方法,將Oder這個物件或表鎖住,因為在統計總金額時是不允許其他人有操作的,當你鎖住這個物件或表時,堵塞的可能性就會到來。
如何突破這種鎖方式的限制呢?那就是Actor模型,也就是說,Oder檢查自己總金額,不用在被外界訪問時被鎖住,而是永遠無法被外界鎖住可能,因為Actor模型無法被外界直接使用方法呼叫,只能象發QQ訊息一樣與外界互動。
具體可見這個貼:事件驅動程式設計:
http://www.jdon.com/45436
所以,對於這起事件,我個人觀點是:這次光大事件問題核心直指系統連鎖,應該是狀態鎖問題,不是記憶體鎖,就是資料庫鎖等出錯,依賴計算機提供的acid等鎖機制其實不是百分百安全,只有用業務方法解決業務問題才是根本解決之道。
[該貼被banq於2013-08-18 22:05修改過]
相關文章
- 軟體缺陷的案例
- 144.從拼多多優惠券事件想到的事件
- 軟體測試:軟體缺陷管理
- 軟體缺陷管理流程
- 【軟體測試】缺陷
- 由一個小庫存軟體想到的
- 軟體測試中容易忽略的缺陷
- 易念科技協助光大證券開展安全意識教育活動
- Javascript的10個設計缺陷JavaScript
- 軟體危機和軟體缺陷的特點和區別
- 我從程式設計寫軟體學到的 7 件事程式設計
- 光大證券:疫情對食品飲料行業影響分析(附下載)行業
- 從DDD中實體和值物件的逆向思考想到的物件
- 光大證券:2022年雲端計算IaaS行業深度研究報告(附下載)行業
- [個體軟體過程]之缺陷管理--缺陷預測 (轉)
- 軟體的效能設計(一)介面設計對軟體效能的影響 (轉)
- 光大證券:2022年巨集觀年度策略報告(附下載)
- 關鍵基礎設施軟體的缺陷可能意味著災難
- SaaS軟體的技術缺陷以及解決方案
- 致命Bug:軟體缺陷的災難與啟示
- 軟體設計是怎樣煉成的(4)——軟體設計的“大道理”
- 從找不到檔案想到的
- 【軟體工程】軟體設計之總體設計軟體工程
- 軟體測試--缺陷報告
- 謹防軟體供應鏈攻擊!軟體設計管理平臺Atlassian中嚴重的Jira缺陷可能導致RCE
- 軟體工程——程式導向的軟體設計方法軟體工程
- 光大證券:直播電商全產業鏈梳理&成長持續性分析(附下載)產業
- 光大證券:跨市場遊戲行業研究專題之女性向遊戲(附下載)遊戲行業
- 光大證券:中美日酒店行業市場空間比較研究(附下載)行業
- 光大證券:2021年元宇宙行業深度報告(附下載)元宇宙行業
- 軟體設計雜談(二)--軟體設計與設計人員的個人素質 (轉)
- 小說軟體原始碼的快取設計,保證服務的正常執行原始碼快取
- 軟體設計的複雜度複雜度
- 訂購軟體的設計思路
- 81%的開發人員表示知道軟體存在缺陷
- 一個專業的缺陷跟蹤管理軟體:JIRA
- 軟體設計是怎樣煉成的(2)——優秀設計從分析需求開始
- 軟體架構, 軟體框架,設計模式的區別架構框架設計模式