《釋出!》作者Michael Nygard:質疑軟體開發最基本的假設(圖靈訪談)
Michael T. Nygard是一位從業二十餘年的資深程式設計師,現任Cognitect首席架構師,他被譽為線上業務的“流動解決問題專家”。Nygard曾先後為美國政府、軍隊、銀行、金融、農業和零售等多個行業交付過運營系統,這種實際運營的經歷改變了他對軟體架構的看法,也讓他對在相當不友好的環境下構建高效能、高可靠性的軟體有了獨特的見解。他寫過多篇文章和社論,是軟體架構經典著作《架構之美》和《軟體架構師需要知道的97件事》的作者之一。Nygard最新出版的著作《釋出!軟體的設計與部署》詳細展示了軟體釋出前可能出現的種種問題以及相應的解決之道,書中所有主題都是通過作者自己研究過的真實案例來闡述的。
問:您曾經在部落格中說過可能會寫幾本新書(Three Book Ideas),有最新的進展嗎?
任何時候,如果你問一位作者這個問題都會得到很有趣的回應。他會看起來很緊張,開始出汗,然後含糊地說一些並不連貫的話,同時他還會急迫地尋找最近的出口。我要說的是,現在這個階段我還沒有什麼好宣佈的。
問:《釋出!》中提到的一些模式現在已經被廣泛採用,如 Circuit Breaker,已經有了 Netflix 的 Hystrix 這樣漂亮的實現,考慮到《釋出!》是一本2007年出版的書,如今8年已經過去,你是否看到了一些新的穩定性/容量模式?
有一種重要的模式,它通過兩種方式顯示出來:非同步式和反應式。我把它們看做一個硬幣的兩面。因為很多穩定性模式都要依靠阻塞執行緒才能起作用,所以這兩種方式都有用。
問:有時候簡單的錯誤就會造成整個系統當機,這難道僅僅是程式設計師的一行程式碼造成的嗎?可以引入什麼機制來保證複雜系統的穩定性呢?
很多問題事實上就是一行程式碼引起的,但是總是有其他因素來放大這個問題。外部環境的變化可能會導致一個潛在的錯誤顯現出來。或者一位操作員的活動可能會觸發平時不會執行的程式碼,從而導致問題出現。
有一些問題則是因為系統的大規模結構而產生的。比如,我並不喜歡SOA中的“實體服務”模型。原因是每個應用都需要很多實體。概率的規則告訴我們當所有實體服務都不工作的時候,擴充套件的系統很可能會出現故障。
所以,我會努力在微觀和巨集觀範圍內都讓系統具有更大的恢復力(甚至是穩健性)。在微觀層面上,我使用書中提到的設計模式。在巨集觀層面上,我分析系統的“故障域”。也就是說,當一個部件(硬體或軟體)壞掉的時候,受影響的應用和功能的範圍有多大?通過在應用間重新分配功能和把實體拆分成小平面,總有辦法把系統分割成獨立的故障域。
問:複雜的業務會導致複雜的系統嗎?作為一位架構師,如何做到不傷害正常業務處理流程的同時又保持架構簡單?
到目前為止,我沒有發現複雜業務和複雜系統之間的關聯性。我知道的系統複雜度的最強的預示變數就是規定。
問:DevOps和傳統運營工程師有什麼區別?
DevOps強調同感。在DevOps的文化中,開發者關心他們的應用如何影響運營者們的生活。我的應用要求管理員必須在半夜保持清醒來做部署嗎?我怎麼改變我的應用才能讓她能少花時間在終端上,從而擁有更多的時間和家人在一起?運營作為報答:我們如何才能創造一個更好的環境,讓開發者帶著勇氣創造並傳遞價值?
問:從2007年的C/S和B/S到現在的App和NoSQL,網際網路行業已經經歷了重大變革。很多敏捷方法都已經有所進化。這些年軟體釋出都發生了哪些變化?還有什麼是不變的?
我認為有三件事變化最大:
首先是Sun和微軟兩家公司統治的覆滅。在以前,幾乎所有公司的軟體開發都要用Java或 .Net,輔以當時發展迅速的Ruby on Rails社群。今天,經常可以見到使用不同語言和執行時環境的系統。
第二,雲部署環境已經戲劇性地改變了經濟。
第三點同時很大程度上也是前兩點造成的結果,開源操作工具已經使高可靠性的運營變得大眾化。在2007年的時候,需要花費上百萬美元才能做好資料中心自動化,集中管理,以及監控。如今,你可以下載所有這些。
問:隨著移動網際網路的興起,雲服務的成熟,IT行業在發生天翻地覆的變化。作為一名架構師,應該重點關注哪些技術理念?
企業架構師之前關注的是圖表中“方盒內”的技術。也就是說,他們的目標是執行細節完備的標準化技術。
在現在的世界裡,我認為架構師應該更加關心資料格式和資料表示法。也就是說,他們應該關心的是箭頭,而不是方盒。
問:Cognitect使用的程式語言主要是Clojure,這和大部分公司使用的主流語言(C / Java / C#)不同。你認為未來的程式語言會變成什麼樣?
我並不適合回答這一問題。我只能說我看到很多開發者都在朝著函數語言程式設計轉型。
問:在Cognitect,每週五開發者都會花時間在業餘專案和開源軟體上。20%的總體工作時間是一個很大的比例。你們在這個每週都舉辦的活動中得到了什麼收穫?這些收穫是否彌補了時間上的損失?
我們利用20%的時間創造了一些很多人都認可的專案,其中包括web框架Pedestal,以及最初的ClojureScript實現。今天,我們20%時間仍然用來開發Clojure,ClojureScript,Pedestal,以及其他一些新玩意兒,我們不久之後就會揭曉。
很長時間以來,我們一直都有一個習慣,就是質疑我們對軟體開發最基本的假設,我們通過檢驗自己的工作來找到構造軟體更好的方法。在20%時間裡我們也是這麼做的。所以這項活動並不是我們一直在做的一個愛好或日常工作。我們經常要評估這樣做是否值得。
到目前為止我們覺得這項活動是很有價值的。當我們說,我們想讓軟體開發對於每個人來說都變得更好時,我們是認真的。我們的開源工具就是其中的一部分。
問:你為什麼要為模擬測試編寫工具Simulant?這個專案的進展如何?
雖然我經常會提到Simulant,但是這個工具是Stuart Halloway在Rich Hickey的架構基礎上寫的。
Simulant程式庫現在處於穩定狀態。我的目標在於幫助人們成功地應用這個工具。為此,我去年開了一個關於Simulant的網路研討會。同時我也做了一個樣本專案,你可以在GitHub上找到。(https://github.com/mtnygard/simulant-example)
現在,我在忙一個叫做“解決方案藍圖(solution blueprint)”的專案,無論是否用到Simulant,這個工具都可以幫助人們完成模擬測試。
更多精彩,加入圖靈訪談微信!
相關文章
- [圖靈程式設計叢書].持續交付:釋出可靠軟體的系統方法.pdf圖靈程式設計
- 《矽谷之火》作者訪談
- Redis作者談如何編寫系統軟體的程式碼註釋Redis
- 談談如何提升應用釋出的質量?
- 淺談軟體開發中的防禦式程式設計程式設計
- 阿里在使用一種更靈活的軟體整合釋出模式阿里模式
- 軟體開發丨關於軟體重構的靈魂四問
- 釋出你的開源軟體到 Ubuntu PPAUbuntu
- Keras作者:給軟體開發者的33條黃金法則Keras
- 圖靈訪談系列之一:陳世欣談產品經理與社群圖靈
- DataGirls社群創始人 Aislinn:做勇敢的少數派(圖靈訪談)AI圖靈
- 軟體Bug、耦合以及因果推理 - Michael Feathers
- Electron-egg 1.15.0 釋出,人人都會桌面軟體開發
- 看了風變釋出的教育訪談影片,感觸良多
- GandCrab v4.1勒索軟體釋出,仍通過虛假破解軟體下載網站傳播網站
- 圖靈訪談系列之九:CNode社群談Node.js技術及生態圖靈Node.js
- 淺談軟體開發模型之瀑布開發和敏捷開發模型敏捷
- 今日的質量,明日的市場--談談軟體登記測試
- 熟悉一個“高質量”軟體的開發過程
- 20 年的 Debian 開發者被排擠出專案;作業系統 “火龍” 被質疑抄襲;Swift 5.6 釋出 | 思否週刊作業系統Swift
- 無壓力的軟體釋出之旅
- FastDFS作者餘慶談真正的開源精神AST
- 成功的軟體釋出的三個要素
- 領英(LinkedIn)客戶開發-孚盟領客通客戶開發軟體正式釋出
- 如何設計npm包的開發和釋出流程NPM
- 微軟釋出遊戲 UX/UI 開發指南微軟遊戲UXUI
- 登上Nature的AI晶片設計屢遭質疑,谷歌發文反擊,Jeff Dean:質疑者連預訓練都沒做AI晶片谷歌
- 軟體專案的鐵三角模型:軟體質量與快速開發的矛盾 - Richard模型
- 【大型軟體開發】淺談大型Qt軟體開發(一)開發前的準備——在著手開發之前,我們要做些什麼?QT
- 浪子回頭,HildaCrypt 勒索軟體開發者免費釋出解密金鑰LDA解密
- 思泉軟體釋出CRM相關業務流程示意圖
- 分享一個最最基本實用的開發流程
- 短影片批次釋出軟體,一鍵釋出短影片
- 軟體開發:app軟體開發,pc端軟體開發,微商城/小程式開發APP
- 軟體開發流程圖,人人都能學會的流程圖畫法流程圖
- “高質高效嵌入式軟體開發”的企業內訓開始
- 微軟正式釋出:.NET Aspire 雲原生開發框架微軟框架
- QuickLens for Mac - UI設計/開發軟體UIMac
- 鄭政 | 2021軟體程式碼開發技術作業五 | 程式碼開發、測試及釋出