天天看點

從一到無窮大 #1 隔離變化,機制與政策分離

區分機制和政策是Unix設計背後隐含的最好思想之一。

任何一個學過作業系統的學生都應該聽過這段文字。多麼美妙的思想啊,但是真正了解其思維精髓需要大量的工程實踐和輔以橫向對比,從某種角度講我認為這種能力是抽象能力以及豐富想象力的聚合,謂之為技術人員的九陽神功也不為過。

Libco[1]是一個在2016年由騰訊開源的一個有棧非對稱,1:N模型的協程庫,其主體思路是對已知的阻塞操作,條件變量,yield(pool)執行hook替換,實際把所有的套接字設定為非阻塞,并加入全局隊列,在套接字可讀/可寫時執行排程,這其實已經是一個較為完整,且trick的項目,至少在我三年前來看。

讓我們再來看看boost.fiber[2]這個優美的家夥吧,fiber并沒有提供像Libco那樣開箱即用的協程能力,而是抽象出了一個較低層級的體系,比如可自主實作的攜程排程接口;鎖,條件變量,barrier,join/detach,channel等原語;可自由擴充1:M->N:M等等。但是我們可以很輕松的讓Fiber所線上程陷入阻塞,因為系統調用接口的管理完全交給了使用者。讓我們再來回味Fiber強大的抽象模型吧,隻實作标準原語與接口,具體的邏輯交給使用者,分離可變部分和不可變部分,至少在寫RocketCo[3]時我沒想到這些。helio[4]是一個基于boost.fiber開發的現代網絡架構(被用作dragonfly[5]的網絡架構),其中對于fiber的使用十分的老辣,當然也可以看出機制與政策分離的好處。

在相對熟悉的領域舉一些成功的例子,混沌工程學科,Taskflow,SysAK,多模型資料庫的統一底座。

再舉例子一些失敗的例子,Spring架構之于阿裡巴巴,我司的不少基架産品。

站在公司的角度而言,産品層面上的隔離變化顯然是省錢,磨練競争力,品牌影響力的好事;

  1. ​​https://github.com/Tencent/libco​​
  2. ​​https://www.boost.org/doc/libs/1_80_0/libs/fiber/doc/html/index.html​​
  3. ​​https://github.com/Super-long/RocketCo​​
  4. ​​https://github.com/romange/helio​​
  5. ​​https://github.com/dragonflydb/dragonfly​​
  6. 夜天之書#4 https://mp.weixin.qq.com/s/l2KYPl9hkviEE8jRTIVs5g

繼續閱讀