- 談 資料處理的時效性

2021/05/22

#校正回歸 - 談 資料處理的時效性

篇幅有限,我就講重點就好。長篇大論留在 blog 文章再來慢慢探討..

今天下午記者會之後,大概全 FB 都被 #校正回歸 這四個字洗版了,我覺得這是很正常的事,必然會發生的啊… 今天不談疫情也不談政治,單純談系統架構就好 :D

認識我的人大概都知道,我公司開發的是跟交易相關的系統,包含線上跟實體門市的交易。如果兩者的資料有時間差,今天的業績線上交易過了 12:00 馬上就能統計出來,而實體門市交易要隔 1 ~ 3 天才能結算完成,我在周一開張一家新的店面,那麼..

星期二: 我們昨天(一)的營業額是 100 萬 星期三: 我們昨天(二)的營業額是 120 萬 星期四: 我們昨天(三)的營業額是 110 萬 (另外,門市結算出來了,週一的營業額是 350 萬..) 星期五: … (以下省略)

問大家一個問題,我該把週四收到的 350 萬營業額,歸在拜一? 還是拜三?

別急著說答案啊 XDD, 要看這些數字之後要拿來做什麼用途… 這背後帶出來的就是兩件事的衝突: (A)系統期待的資訊回應速度 vs (B)資料收集與處理的延遲 兩者之間的差異。

我在資訊業待了 20 年了,從當年都是批次處理,到現在雲端網路那麼發達,什麼資訊都可以即時傳遞的年代,加上系統要處理的資料規模越來越大,( A ) 跟 ( B ) 的落差也越來越大了。

當 ( A ) 越來越要求即時 (以台灣疫情記者會 每天 14:00 舉辦為例,前一天的疫情統計大約只有 4hr 的處理時間),而 ( B ) 的處理速度 (前一天採檢,到能知道結果是否確診) 難以大幅加速跟上的前提下 (包含檢驗速度,跟檢驗的處理量),當 ( B ) 跟不上的時候,( A ) 就一定會發生需要 #校正回歸 的狀況。因為我的 ( B ) 還沒處理完,但是數據報表 ( A ) 已經出去了…

所以回到前面的問題,星期三收到的門市業績 350 萬,到底要算周三的業績? 還是周一的業績?

我的答案是: 如果老闆想看看週二下了廣告到底有沒有效果,那 350 萬當然要歸類在交易發生的當下時間 (周一) 啊! 不然我怎麼知道我的廣告有沒有效? 處理需要時間,在我能改善之前我只能等。線上的業績能提早看到,你要不要看? 當然要啊! 多個參考資訊總是好的。重點在於老闆心裡要先知道,還有一部分資料沒到齊就好…

如果這些資訊是我要考慮現金流,或其他用途,我必須先確定我有多少營業額才能做決定的 (抱歉這邊我例子沒辦法舉的很精準),實際交易發生的時間對我不重要,而到目前確實發生過的交易金額對我更重要的話,那我就會希望在週四一起看到這些數字。他不需要硬被歸在拜三的業績,但是我希望拜四的報表要看到這數字,否則我無法做決策..

所以回來看看,這次中央疫情指揮中心的做法其實很合理啊,這數字的目的,是讓社會大眾能知道疫情的溫度是上升還是下降,要判斷疫情的嚴重性才是主要目的,當然是要回頭修正過去的資料。我覺得資訊能夠透明,並且據實以告,比什麼都重要。真的要挑毛病,我認為可以做更好的是: 應該在前幾天宣布數字時,就該說明檢體並沒有完全處理完畢,日後這些數字還會修正,而不是今天才給大家一個驚喜,並引起一些不必要的混淆跟攻擊。如果這些狀況是因為其他原因造成 (例如人為疏失,準備不足等等),那就檢討這些原因跟後續的處置 (例如懲處等等),但是那些可以等危機過後再來檢討,現況應該是正確的修正並且繼續完成重要的任務。

回到系統的架構來看,那這類問題該怎麼處理才洽當? 資料量越來越大,系統要求回應的速度越來越即時,各領域的系統都會很容易的碰到這種狀況。簡單的說我會這樣處理:

  1. 定義資料發生的時間與收到的時間,兩者是不同的
  2. 資料的處理善用 Event Sourcing 的機制處理,按照時間序進行,資料來源要能完全反映資料取得的狀況 (包含修改)
  3. 要呈現統計,或是處理過的結果,請善用 CQRS 的模式。將資料修正成你要的樣子。你有兩種以上的呈現需求,就應該用兩組 view 來處理
  4. 就算架構面你有做好,也不代表資料處理的延遲能無限制的放大。需要定義系統能忍受最大延遲時間 (例如 5 days), 超過的一律要走例外處理的流程了。財務算錢都會有個 “關帳” 的時間點,這就是一例,關帳之後不管你有任何理由,這筆帳就算在下個週期..

這個問題,其實我想了很久了,用了很多案例,我才終於想通怎麼兼顧系統的回應時間 (能不能看到即時業績報表?)、資料的正確性 (延遲的資料怎麼正確的呈現)、還有資料處理的架構怎樣用一個既簡單又優雅的模型來說明?

這就是架構師的任務啊,也是個很傷腦筋的題目。我有一篇要探討 Event Sourcing / CQRS (Command Query Responsibility Segregation, 命令與查詢責任分離) 的文章,寫到一半而已 XDD, 內容就是在講上面那堆問題背後的細節。趁著時事,先丟我的想法,想看文章的記得關注我的粉絲團 :D

#CQRS #EventSourcing #校正回歸






Facebook Pages