第414章 白板!
凌晨一點。
林徹沒有睡。
十二月十五號的雨下了一整晚,窗外的聲音從沙沙變成了滴答,雨小了但沒停。
辦公室的燈開著,桌上的茶早就涼透了。
他把老周的郵件看了三遍,看完之後關掉郵件,打開了一個空白文檔,什麼都沒寫。
空白文檔在屏幕上亮了十分鐘。
他關掉了電腦,站起來,拿了一支筆,沒拿別的東西。
坐電梯下到六樓。
走廊里暗的,只有盡頭實驗室的光透出來。
跟之前每次看到的一樣,但今天走過去的時候他注意到走廊的地板上有幾個腳印,潮的,應該是有人出去買宵夜回來踩進來的雨水。
他推開了實驗室的門。
…………
裡面還有四個人。
老周在白板前面,面對著白板坐著,椅子反過來騎著坐的,兩條胳膊搭在椅背上,下巴擱在胳膊上,像在發呆。
方遠在角落的工位上,屏幕亮著但他沒在看屏幕,雙手抱著後腦勺靠在椅背上,眼睛閉著,不知道是在想事情還是在打盹。
另外兩個工程師在摺疊桌那邊,一個在喝泡麵湯,一個在看手機。
林徹進來的時候四個人都看了他一眼。
凌晨一點,林總來六樓了,沒人問為什麼。
老周從椅子上站起來,他的衛衣皺了,下巴上有一圈青色的胡茬,眼睛有血絲但亮著。
」林總。」
」白板給我用一下。」
老周讓開了。
白板上寫滿了東西。
密密麻麻的架構圖,紅藍黑綠四種顏色纏在一起,箭頭交叉,方框嵌套,有的地方被擦掉了又重新畫上去,擦掉的痕跡和新畫的線條疊在一起,像一幅看不懂的抽象畫。
白板的右下角有一串數字,方遠寫的延遲拆解:18+22+310+195+65=610。
610。
林徹看了白板大概三十秒。
然後他拿起一塊白板擦,把白板右半邊的內容擦掉了。
方遠睜開了眼睛。
他沒說話,但坐直了。
喝泡麵的那個工程師也停下來了,放下了碗。
林徹從筆槽里拿了一支黑色馬克筆。
他在白板右半邊畫了兩個方框。
上面一個,下面一個。
上面的方框寫了三個字:」央行帳本」。
下面的方框寫了三個字:」微光邏輯」。
兩個方框之間畫了一條線。線的旁邊寫了四個字:」異步回調」。
然後他在下面的方框裡畫了一條虛線,把它分成了左右兩半。
左邊寫:」規則引擎」。
右邊寫:」本地帳本」。
」本地帳本」三個字下面,他畫了一個小箭頭,指向上面的」央行帳本」,箭頭旁邊寫了兩個字:」最終一致」。
畫完了,放下筆。
白板上只有這些東西。
兩個方框,一條實線,一條虛線,三個箭頭,不到二十個字。
跟左半邊那密密麻麻的架構圖比起來,像是兩個世界的產物。
…………
實驗室里安靜了大概五秒。
老周站在他後面,盯著白板右半邊看。
他的呼吸聲變了,從剛才疲憊的均勻變成了不均勻的,像是在憋氣。
」本地帳本……」他低聲說。
林徹沒說話。
」不用鏡像同步,」老周的聲音開始快了,」不是維護一份央行帳本的副本,是在邏輯層本地建一個獨立的帳本。
本地帳本只記錄可編程邏輯相關的狀態,不記錄完整的餘額信息。
規則引擎執行的時候只查本地帳本,不查央行帳本。
執行完了再通過異步回調把結果告訴央行,央行帳本做最終確認。」
他停了一下。
」310毫秒的鏡像同步沒了。」
方遠從椅子上站起來了。
」但是一致性呢?」方遠說,」本地帳本和央行帳本之間如果不同步,雙花問題怎麼解決?」
老周沒有看方遠,他還在看白板。
」不需要實時一致,」老周說,語速越來越快,」最終一致就夠了,本地帳本記錄的是'這筆錢正在被一個規則占用',不是'這筆錢已經被扣了',占用狀態鎖定這筆錢,其他交易看到占用狀態就排隊,規則執行完了,回調通知央行,央行做最終扣款,如果回調失敗了,占用狀態自動釋放,錢回到可用狀態。」
」最終一致……」方遠在腦子裡跑了一遍邏輯。
」雙花問題被占用鎖解決了,」老周說,」不需要鏡像同步,不需要央行實時確認,本地帳本的占用鎖就是防雙花的機制,310毫秒沒了,195毫秒的回調通信變成了後置環節,不在主鏈路上,不影響用戶體感延遲。」
他轉過身看著林徹。
」18加22加65,105毫秒。」
105毫秒。
遠低於500毫秒的要求。
甚至比demo里的37毫秒只高了不到70毫秒,因為加上了清算確認的65毫秒。
但這65毫秒是後置的。
用戶感知到的延遲只有規則編譯加規則執行,40毫秒。
清算確認在後台異步完成,用戶付完錢走了,後台再慢慢對帳。
」你怎麼想到的?」老周問。
林徹沒回答。
他把筆放回筆槽里。
白板右半邊的圖很簡單,兩個方框,一條實線,一條虛線,三個箭頭。
跟左半邊兩周的疊代痕跡比起來,乾淨得有點不真實。
這個思路不是先知能力給他的。
上輩子沒有這個東西,沒有可編程貨幣引擎,沒有異步架構,沒有本地帳本加最終一致性的方案。
這些都是這輩子的產物。
他能想到這個思路,不是因為他」知道」答案,是因為他看過太多分布式系統的架構文章,讀過太多關於區塊鏈共識機制和支付系統設計的論文,這些東西在他腦子裡沉澱了很久,在某個凌晨一點的瞬間被眼前的問題激活了。
不是先知,是積累。
老周看了他一眼,那個問題沒有再問第二遍。
」今晚試。」老周說。
他轉身走向方遠的工位,方遠已經坐下了,手放在鍵盤上,等著老周說開始。
」重寫本地帳本模塊,」老周說,」從零寫,占用鎖機制,最終一致性回調,方遠你寫核心邏輯,小李你寫鎖管理,我寫回調接口,今晚出原型。」
三個人的手同時落在了鍵盤上。
…………
林徹站在白板旁邊看了一會兒。
鍵盤聲響起來了。
三個人的敲擊節奏不一樣,方遠快而密,老周慢而穩,小李介於兩者之間。
泡麵的味道還在,混著馬克筆的氣味和凌晨的涼意。
門外走廊的地板上還有那幾個潮濕的腳印。
白板左半邊是兩周的努力。
右半邊是剛才畫的五分鐘。
兩周的努力不是白費的。
沒有那610毫秒的拆解,沒有方遠對五個環節的精確分析,就不知道瓶頸在鏡像同步的310毫秒。
不知道瓶頸在哪,就不知道該砍掉什麼。
他轉身走出了實驗室。
門在身後輕輕關上,走廊里暗的,地板上的腳印已經幹了一半。
電梯到了七樓,門開了,走廊比六樓更安靜。
六樓的鍵盤聲他已經聽不到了。
但他知道那三個人今晚不會停。
」今晚試。」老周站起來了。
林徹沒有睡。
十二月十五號的雨下了一整晚,窗外的聲音從沙沙變成了滴答,雨小了但沒停。
辦公室的燈開著,桌上的茶早就涼透了。
他把老周的郵件看了三遍,看完之後關掉郵件,打開了一個空白文檔,什麼都沒寫。
空白文檔在屏幕上亮了十分鐘。
他關掉了電腦,站起來,拿了一支筆,沒拿別的東西。
坐電梯下到六樓。
走廊里暗的,只有盡頭實驗室的光透出來。
跟之前每次看到的一樣,但今天走過去的時候他注意到走廊的地板上有幾個腳印,潮的,應該是有人出去買宵夜回來踩進來的雨水。
他推開了實驗室的門。
…………
裡面還有四個人。
老周在白板前面,面對著白板坐著,椅子反過來騎著坐的,兩條胳膊搭在椅背上,下巴擱在胳膊上,像在發呆。
方遠在角落的工位上,屏幕亮著但他沒在看屏幕,雙手抱著後腦勺靠在椅背上,眼睛閉著,不知道是在想事情還是在打盹。
另外兩個工程師在摺疊桌那邊,一個在喝泡麵湯,一個在看手機。
林徹進來的時候四個人都看了他一眼。
凌晨一點,林總來六樓了,沒人問為什麼。
老周從椅子上站起來,他的衛衣皺了,下巴上有一圈青色的胡茬,眼睛有血絲但亮著。
」林總。」
」白板給我用一下。」
老周讓開了。
白板上寫滿了東西。
密密麻麻的架構圖,紅藍黑綠四種顏色纏在一起,箭頭交叉,方框嵌套,有的地方被擦掉了又重新畫上去,擦掉的痕跡和新畫的線條疊在一起,像一幅看不懂的抽象畫。
白板的右下角有一串數字,方遠寫的延遲拆解:18+22+310+195+65=610。
610。
林徹看了白板大概三十秒。
然後他拿起一塊白板擦,把白板右半邊的內容擦掉了。
方遠睜開了眼睛。
他沒說話,但坐直了。
喝泡麵的那個工程師也停下來了,放下了碗。
林徹從筆槽里拿了一支黑色馬克筆。
他在白板右半邊畫了兩個方框。
上面一個,下面一個。
上面的方框寫了三個字:」央行帳本」。
下面的方框寫了三個字:」微光邏輯」。
兩個方框之間畫了一條線。線的旁邊寫了四個字:」異步回調」。
然後他在下面的方框裡畫了一條虛線,把它分成了左右兩半。
左邊寫:」規則引擎」。
右邊寫:」本地帳本」。
」本地帳本」三個字下面,他畫了一個小箭頭,指向上面的」央行帳本」,箭頭旁邊寫了兩個字:」最終一致」。
畫完了,放下筆。
白板上只有這些東西。
兩個方框,一條實線,一條虛線,三個箭頭,不到二十個字。
跟左半邊那密密麻麻的架構圖比起來,像是兩個世界的產物。
…………
實驗室里安靜了大概五秒。
老周站在他後面,盯著白板右半邊看。
他的呼吸聲變了,從剛才疲憊的均勻變成了不均勻的,像是在憋氣。
」本地帳本……」他低聲說。
林徹沒說話。
」不用鏡像同步,」老周的聲音開始快了,」不是維護一份央行帳本的副本,是在邏輯層本地建一個獨立的帳本。
本地帳本只記錄可編程邏輯相關的狀態,不記錄完整的餘額信息。
規則引擎執行的時候只查本地帳本,不查央行帳本。
執行完了再通過異步回調把結果告訴央行,央行帳本做最終確認。」
他停了一下。
」310毫秒的鏡像同步沒了。」
方遠從椅子上站起來了。
」但是一致性呢?」方遠說,」本地帳本和央行帳本之間如果不同步,雙花問題怎麼解決?」
老周沒有看方遠,他還在看白板。
」不需要實時一致,」老周說,語速越來越快,」最終一致就夠了,本地帳本記錄的是'這筆錢正在被一個規則占用',不是'這筆錢已經被扣了',占用狀態鎖定這筆錢,其他交易看到占用狀態就排隊,規則執行完了,回調通知央行,央行做最終扣款,如果回調失敗了,占用狀態自動釋放,錢回到可用狀態。」
」最終一致……」方遠在腦子裡跑了一遍邏輯。
」雙花問題被占用鎖解決了,」老周說,」不需要鏡像同步,不需要央行實時確認,本地帳本的占用鎖就是防雙花的機制,310毫秒沒了,195毫秒的回調通信變成了後置環節,不在主鏈路上,不影響用戶體感延遲。」
他轉過身看著林徹。
」18加22加65,105毫秒。」
105毫秒。
遠低於500毫秒的要求。
甚至比demo里的37毫秒只高了不到70毫秒,因為加上了清算確認的65毫秒。
但這65毫秒是後置的。
用戶感知到的延遲只有規則編譯加規則執行,40毫秒。
清算確認在後台異步完成,用戶付完錢走了,後台再慢慢對帳。
」你怎麼想到的?」老周問。
林徹沒回答。
他把筆放回筆槽里。
白板右半邊的圖很簡單,兩個方框,一條實線,一條虛線,三個箭頭。
跟左半邊兩周的疊代痕跡比起來,乾淨得有點不真實。
這個思路不是先知能力給他的。
上輩子沒有這個東西,沒有可編程貨幣引擎,沒有異步架構,沒有本地帳本加最終一致性的方案。
這些都是這輩子的產物。
他能想到這個思路,不是因為他」知道」答案,是因為他看過太多分布式系統的架構文章,讀過太多關於區塊鏈共識機制和支付系統設計的論文,這些東西在他腦子裡沉澱了很久,在某個凌晨一點的瞬間被眼前的問題激活了。
不是先知,是積累。
老周看了他一眼,那個問題沒有再問第二遍。
」今晚試。」老周說。
他轉身走向方遠的工位,方遠已經坐下了,手放在鍵盤上,等著老周說開始。
」重寫本地帳本模塊,」老周說,」從零寫,占用鎖機制,最終一致性回調,方遠你寫核心邏輯,小李你寫鎖管理,我寫回調接口,今晚出原型。」
三個人的手同時落在了鍵盤上。
…………
林徹站在白板旁邊看了一會兒。
鍵盤聲響起來了。
三個人的敲擊節奏不一樣,方遠快而密,老周慢而穩,小李介於兩者之間。
泡麵的味道還在,混著馬克筆的氣味和凌晨的涼意。
門外走廊的地板上還有那幾個潮濕的腳印。
白板左半邊是兩周的努力。
右半邊是剛才畫的五分鐘。
兩周的努力不是白費的。
沒有那610毫秒的拆解,沒有方遠對五個環節的精確分析,就不知道瓶頸在鏡像同步的310毫秒。
不知道瓶頸在哪,就不知道該砍掉什麼。
他轉身走出了實驗室。
門在身後輕輕關上,走廊里暗的,地板上的腳印已經幹了一半。
電梯到了七樓,門開了,走廊比六樓更安靜。
六樓的鍵盤聲他已經聽不到了。
但他知道那三個人今晚不會停。
」今晚試。」老周站起來了。