第412章 請勿打擾!
六樓的實驗室變了樣。
從北京回來的第二天,林徹下樓看了一次。
門上的牌子已經換了,老周手寫的」請勿打擾」四個字,馬克筆寫的,字很大,貼得歪了一點但很牢。
透過玻璃門能看到裡面的布局跟之前完全不同了。
大桌子被推到了靠牆的位置,上面擺了五台顯示器和三台伺服器的主機箱,線纜用扎帶捆成了幾束,從桌子下面穿過去,接到牆角的一個集線器上。
白板被搬到了房間正中間,正面寫滿了架構圖,背面也寫了一半,彩色馬克筆畫的,紅藍黑綠四種顏色分別代表不同的模塊。
桌子旁邊加了兩張摺疊桌,上面放著筆記本電腦和各種充電線。
有兩個工位之間塞了一個行軍床,疊得不太整齊,枕頭上還放著一件外套。
十二個人。
從十一月初到現在半個多月,他們的作息變成了早上九點到晚上十一二點,中間吃飯和休息的時間加起來不超過兩個小時。
有人在裡面放了一個電熱水壺和一箱泡麵,桌子下面堆了一排礦泉水。
角落裡有一個垃圾桶,塞得滿滿的,泡麵盒子和外賣餐盒從桶口冒出來。
實驗室隔壁是技術部的一間小會議室,被他們徵用成了臨時休息室。
裡面放了三張行軍床,輪流睡。
老周定的規矩是」連續寫代碼超過四個小時必須休息半小時」,但沒人當真。
方遠有一次連著幹了九個小時,老周看見了把他的鍵盤拔了,指著隔壁說」睡一個小時再回來」。
方遠去了,四十分鐘後回來了,說睡不著。
老周在裡面,林徹透過玻璃看到他站在白板前面,背對著門,左手拿著一支紅色馬克筆,右手指著白板上的某個位置在跟方遠說話。
方遠坐在摺疊椅上,面前的筆記本電腦屏幕上全是代碼,他一邊聽一邊在鍵盤上敲什麼。
其他人各自在工位上,有人戴著耳機,有人盯著終端窗口裡滾動的日誌,有人在紙上寫公式。
林徹沒有推門進去,看了一分鐘,轉身上樓了。
…………
十一月下旬,項目進入第三周。
老周每三天給林徹發一封簡短的進度郵件,內容都是一個格式:模塊名稱、進度百分比、遇到的問題、下一步計劃。
前兩周的郵件里」遇到的問題」那欄寫的都是常規的技術問題,接口規範不一致、測試數據不夠、模擬環境的參數要調。
第三周的郵件不一樣了。
」遇到的問題」那欄只有一句話:」核心引擎的時序邏輯存在根本性矛盾,正在評估解決方案。」
根本性矛盾。
林徹看到這四個字的時候是晚上九點多。
他在七樓辦公室里看郵件,窗外的杭州已經全黑了,遠處的燈光像一片安靜的星海。
他打了個電話給老周。
老周接的時候背景噪音很大,有人在說話,鍵盤在敲,像是整個實驗室都在運轉。
」郵件我看了,什麼矛盾?」
老周的聲音有點啞,應該是說了一天話的緣故。
」央行的清算系統是同步的,強一致性,每一筆交易必須在帳本上實時確認了才算完成,我們的可編程邏輯層是異步的,規則執行完了通過回調通知清算系統,問題出在這兩個系統對接的地方。」
」具體呢?」
」假設一筆100塊的定向消費券支付,我們的邏輯層先執行規則:檢查商戶是否在指定名單里,檢查有效期,檢查品類限制,規則執行完了,確認可以支付,通過回調通知央行的清算系統扣款,但在我們的邏輯層確認和清算系統實際扣款之間,有一個時間差,這個時間差里如果消費者的帳戶發生了其他變動,比如同時發起了另一筆支付,就會出現一致性問題。」
」兩筆支付爭同一筆錢。」
」對,雙花問題,在同步系統里不存在這個問題,因為每一筆交易都是鎖定了再確認的,一筆沒完另一筆就排隊,在異步系統里,鎖定和確認之間有間隔,間隔里什麼都可能發生,這個間隔越短問題越小,但完全消除不了,只要是異步的,這個間隔就一定存在。」
」這個問題在設計階段沒有預見到?」
」預見到了。」老周的聲音比平時低,他說話的時候背景里有人在討論什麼,聲音模糊地傳過來。
」我在架構設計階段就知道會遇到這個問題,但當時的判斷是可以通過技術手段把間隔壓縮到足夠小,小到在實際場景中不會被觸發,理論上是對的,實際跑出來發現,壓縮間隔的代價是延遲上升,間隔越小,延遲越高,兩頭不能兼得。」
林徹沒說話。
」方遠這三天一直在想解決方案,」老周說,」他試了兩種思路,第一種是在邏輯層加一個預鎖定機制,規則執行前先向清算系統申請鎖定這筆錢,但這樣等於把異步變回了半同步,失去了異步架構的優勢,第二種是在邏輯層本地維護一份餘額鏡像,先在鏡像上扣款,再通過回調同步到清算系統,但鏡像和真實帳本之間也會有延遲差,本質上是把問題往後推了一步。」
」兩種都不行?」
」第一種否了,第二種跑了一遍,延遲太高,不能用。」
」延遲多少?」
」第一版跑出來八百多毫秒,不穩定,有時候更高。」
800毫秒。
央行的要求是500毫秒以內。
demo里的37毫秒是純邏輯層的延遲,不包含跟清算系統對接的延遲。
一旦加上對接環節,延遲翻了二十多倍。
」能優化嗎?」
老周沉默了兩秒。
」在想。」
電話掛了。
…………
那天晚上十一點多,林徹從七樓下到了六樓。
走廊很暗,只有盡頭實驗室的燈光從玻璃門裡透出來,在地上拉了一道長長的光帶。
走廊里的暖氣已經關了,十一月底的杭州夜裡有涼意,不算冷但不暖和。
他走到實驗室門口,沒推門。
透過玻璃能看到裡面還有七八個人,有的在電腦前敲代碼,有的在白板前面討論。
方遠坐在角落裡,面前的屏幕上全是測試數據,一行一行的數字在滾動。
老周不在白板前面了,坐在摺疊桌旁邊,面前放著一杯涼透了的茶和一疊手寫的草稿紙。
他在紙上畫什麼,畫了幾筆又劃掉,再畫。
白板上的架構圖已經改了好幾版了。
第一版的痕跡被擦掉了,但馬克筆的顏色滲進了白板的表面,留下淡淡的影子。
現在白板上畫的是第二版,方遠那個餘額鏡像方案的架構圖,紅色的線畫了又改,改了又畫。
根本性矛盾。
他知道冬奧的時間線,知道實戰測試會在崇禮,知道斷網場景是殺手鐧。
但技術問題不是先知能力解決得了的。
他知道目的地在哪,知道該選哪條路,但路上的石頭要一塊一塊搬。
這塊石頭叫」時序矛盾」,搬不開就過不去。
他站在走廊里看了三分鐘,沒有人注意到他。
轉身回了七樓。
電梯裡很安靜,門關上之後只有嗡嗡的升降聲。
七樓到了,門開了,走廊比六樓更暗,只有電梯口一盞燈亮著。
六樓的燈還亮著。
第一版方案被否了。
從北京回來的第二天,林徹下樓看了一次。
門上的牌子已經換了,老周手寫的」請勿打擾」四個字,馬克筆寫的,字很大,貼得歪了一點但很牢。
透過玻璃門能看到裡面的布局跟之前完全不同了。
大桌子被推到了靠牆的位置,上面擺了五台顯示器和三台伺服器的主機箱,線纜用扎帶捆成了幾束,從桌子下面穿過去,接到牆角的一個集線器上。
白板被搬到了房間正中間,正面寫滿了架構圖,背面也寫了一半,彩色馬克筆畫的,紅藍黑綠四種顏色分別代表不同的模塊。
桌子旁邊加了兩張摺疊桌,上面放著筆記本電腦和各種充電線。
有兩個工位之間塞了一個行軍床,疊得不太整齊,枕頭上還放著一件外套。
十二個人。
從十一月初到現在半個多月,他們的作息變成了早上九點到晚上十一二點,中間吃飯和休息的時間加起來不超過兩個小時。
有人在裡面放了一個電熱水壺和一箱泡麵,桌子下面堆了一排礦泉水。
角落裡有一個垃圾桶,塞得滿滿的,泡麵盒子和外賣餐盒從桶口冒出來。
實驗室隔壁是技術部的一間小會議室,被他們徵用成了臨時休息室。
裡面放了三張行軍床,輪流睡。
老周定的規矩是」連續寫代碼超過四個小時必須休息半小時」,但沒人當真。
方遠有一次連著幹了九個小時,老周看見了把他的鍵盤拔了,指著隔壁說」睡一個小時再回來」。
方遠去了,四十分鐘後回來了,說睡不著。
老周在裡面,林徹透過玻璃看到他站在白板前面,背對著門,左手拿著一支紅色馬克筆,右手指著白板上的某個位置在跟方遠說話。
方遠坐在摺疊椅上,面前的筆記本電腦屏幕上全是代碼,他一邊聽一邊在鍵盤上敲什麼。
其他人各自在工位上,有人戴著耳機,有人盯著終端窗口裡滾動的日誌,有人在紙上寫公式。
林徹沒有推門進去,看了一分鐘,轉身上樓了。
…………
十一月下旬,項目進入第三周。
老周每三天給林徹發一封簡短的進度郵件,內容都是一個格式:模塊名稱、進度百分比、遇到的問題、下一步計劃。
前兩周的郵件里」遇到的問題」那欄寫的都是常規的技術問題,接口規範不一致、測試數據不夠、模擬環境的參數要調。
第三周的郵件不一樣了。
」遇到的問題」那欄只有一句話:」核心引擎的時序邏輯存在根本性矛盾,正在評估解決方案。」
根本性矛盾。
林徹看到這四個字的時候是晚上九點多。
他在七樓辦公室里看郵件,窗外的杭州已經全黑了,遠處的燈光像一片安靜的星海。
他打了個電話給老周。
老周接的時候背景噪音很大,有人在說話,鍵盤在敲,像是整個實驗室都在運轉。
」郵件我看了,什麼矛盾?」
老周的聲音有點啞,應該是說了一天話的緣故。
」央行的清算系統是同步的,強一致性,每一筆交易必須在帳本上實時確認了才算完成,我們的可編程邏輯層是異步的,規則執行完了通過回調通知清算系統,問題出在這兩個系統對接的地方。」
」具體呢?」
」假設一筆100塊的定向消費券支付,我們的邏輯層先執行規則:檢查商戶是否在指定名單里,檢查有效期,檢查品類限制,規則執行完了,確認可以支付,通過回調通知央行的清算系統扣款,但在我們的邏輯層確認和清算系統實際扣款之間,有一個時間差,這個時間差里如果消費者的帳戶發生了其他變動,比如同時發起了另一筆支付,就會出現一致性問題。」
」兩筆支付爭同一筆錢。」
」對,雙花問題,在同步系統里不存在這個問題,因為每一筆交易都是鎖定了再確認的,一筆沒完另一筆就排隊,在異步系統里,鎖定和確認之間有間隔,間隔里什麼都可能發生,這個間隔越短問題越小,但完全消除不了,只要是異步的,這個間隔就一定存在。」
」這個問題在設計階段沒有預見到?」
」預見到了。」老周的聲音比平時低,他說話的時候背景里有人在討論什麼,聲音模糊地傳過來。
」我在架構設計階段就知道會遇到這個問題,但當時的判斷是可以通過技術手段把間隔壓縮到足夠小,小到在實際場景中不會被觸發,理論上是對的,實際跑出來發現,壓縮間隔的代價是延遲上升,間隔越小,延遲越高,兩頭不能兼得。」
林徹沒說話。
」方遠這三天一直在想解決方案,」老周說,」他試了兩種思路,第一種是在邏輯層加一個預鎖定機制,規則執行前先向清算系統申請鎖定這筆錢,但這樣等於把異步變回了半同步,失去了異步架構的優勢,第二種是在邏輯層本地維護一份餘額鏡像,先在鏡像上扣款,再通過回調同步到清算系統,但鏡像和真實帳本之間也會有延遲差,本質上是把問題往後推了一步。」
」兩種都不行?」
」第一種否了,第二種跑了一遍,延遲太高,不能用。」
」延遲多少?」
」第一版跑出來八百多毫秒,不穩定,有時候更高。」
800毫秒。
央行的要求是500毫秒以內。
demo里的37毫秒是純邏輯層的延遲,不包含跟清算系統對接的延遲。
一旦加上對接環節,延遲翻了二十多倍。
」能優化嗎?」
老周沉默了兩秒。
」在想。」
電話掛了。
…………
那天晚上十一點多,林徹從七樓下到了六樓。
走廊很暗,只有盡頭實驗室的燈光從玻璃門裡透出來,在地上拉了一道長長的光帶。
走廊里的暖氣已經關了,十一月底的杭州夜裡有涼意,不算冷但不暖和。
他走到實驗室門口,沒推門。
透過玻璃能看到裡面還有七八個人,有的在電腦前敲代碼,有的在白板前面討論。
方遠坐在角落裡,面前的屏幕上全是測試數據,一行一行的數字在滾動。
老周不在白板前面了,坐在摺疊桌旁邊,面前放著一杯涼透了的茶和一疊手寫的草稿紙。
他在紙上畫什麼,畫了幾筆又劃掉,再畫。
白板上的架構圖已經改了好幾版了。
第一版的痕跡被擦掉了,但馬克筆的顏色滲進了白板的表面,留下淡淡的影子。
現在白板上畫的是第二版,方遠那個餘額鏡像方案的架構圖,紅色的線畫了又改,改了又畫。
根本性矛盾。
他知道冬奧的時間線,知道實戰測試會在崇禮,知道斷網場景是殺手鐧。
但技術問題不是先知能力解決得了的。
他知道目的地在哪,知道該選哪條路,但路上的石頭要一塊一塊搬。
這塊石頭叫」時序矛盾」,搬不開就過不去。
他站在走廊里看了三分鐘,沒有人注意到他。
轉身回了七樓。
電梯裡很安靜,門關上之後只有嗡嗡的升降聲。
七樓到了,門開了,走廊比六樓更暗,只有電梯口一盞燈亮著。
六樓的燈還亮著。
第一版方案被否了。