《釋出!》作者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,這個工具都可以幫助人們完成模擬測試。
更多精彩,加入圖靈訪談微信!
相關文章
- [英]《釋出!》作者Michael Nygard:質疑軟體開發最基本的假設(圖靈訪談)圖靈
- 《釋出!》作者Michael Nygard訪談問題有獎徵集(圖靈訪談)圖靈
- 《開源軟體架構》組織者Michael DiBernardo訪談問題有獎徵集(圖靈訪談)架構圖靈
- 《JavaScript Web應用開發》作者Nicolas Bevacqua訪談問題徵集(圖靈訪談)JavaScriptWeb圖靈
- 《R包開發》作者Hadley Wickham訪談問題有獎徵集(圖靈訪談)圖靈
- 《Flask Web開發》作者Miguel Grinberg訪談問題有獎徵集(圖靈訪談)FlaskWeb圖靈
- 《JavaScript快速全棧開發》作者Azat Mardanov訪談問題有獎徵集(圖靈訪談)JavaScript全棧圖靈
- 《圖靈的祕密》作者Charles Petzold:我眼中的圖靈機和Windows(圖靈訪談)圖靈Windows
- 《機器學習》作者Peter Flach訪談問題有獎徵集(圖靈訪談)機器學習圖靈
- 《R包開發》作者Hadley Wickham:資料結構“神童”(圖靈訪談)資料結構圖靈
- 譯後訪談《Scratch少兒趣味程式設計》作者阿部和廣(圖靈訪談)程式設計圖靈
- [英]專訪《寫給大家看的設計書》作者Robin Williams(圖靈訪談)圖靈
- 《Android系統服務開發》作者金大佑訪談問題有獎徵集(圖靈訪談)Android圖靈
- 《Docker開發實踐》作者曾金龍:迅雷雲的Docker開發實踐(圖靈訪談)Docker圖靈
- 《社會媒體挖掘》作者劉歡教授訪談問題有獎徵集(圖靈訪談)圖靈
- 《演算法圖解》作者Adit Bhargava訪談問題徵集(圖靈訪談)演算法圖解圖靈
- 《特斯拉》作者卡爾森教授訪談問題有獎徵集(圖靈訪談)圖靈
- 有獎 |《Lua設計與實現》作者codedump訪談話題徵集(圖靈訪談)圖靈
- 《CSS設計指南》作者Charles Wyke-Smith訪談問題有獎徵集(圖靈訪談)CSSMIT圖靈
- 《黑客與設計》作者David Kadavy訪談問題有獎徵集(圖靈訪談)黑客圖靈
- 《JavaScript Web應用開發》作者Nicolas:恰巧,愛好變職業(圖靈訪談)JavaScriptWeb圖靈
- 《七週七併發模型》作者Paul Butcher訪談問題有獎徵集(圖靈訪談)模型圖靈
- 《圖靈的祕密》作者Charles Petzold訪談問題徵集圖靈
- 《Python Web開發:測試驅動方法》作者Harry Percival訪談問題有獎徵集(圖靈訪談)PythonWeb圖靈
- 鍾冠賢:iOS開發之路(圖靈訪談)iOS圖靈
- 《CSS揭祕》作者Lea Verou訪談問題有獎徵集(圖靈訪談)CSS圖靈
- 《鳳凰專案》作者基恩·金訪談問題有獎徵集(圖靈訪談)圖靈
- 《Erlang程式設計(第2版)》作者Joe Armstrong訪談問題有獎徵集(圖靈訪談)程式設計圖靈
- 《物聯網設計》作者Adrian McEwen訪談問題有獎徵集(圖靈訪談)圖靈
- 圖靈訪談圖靈
- 《Python Web開發》作者Harry Percival:TDD就是微小而漸進的改變(圖靈訪談)PythonWeb圖靈
- 有獎 |《人工智慧簡史》作者尼克訪談話題徵集(圖靈訪談)人工智慧圖靈
- 《AngularJS 2 權威指南》作者Nate Murray訪談問題徵集(圖靈訪談)AngularJS圖靈
- 《跟阿銘學Linux》作者阿銘訪談話題有獎徵集(圖靈訪談)Linux圖靈
- 《禽獸心理學》作者Anna Salter訪談問題有獎徵集(圖靈訪談)圖靈
- 《Java程式設計師修煉之道》作者Ben Evans訪談問題有獎徵集(圖靈訪談)Java程式設計師圖靈
- 《學習響應式設計》作者Clarissa Peterson訪談問題有獎徵集(圖靈訪談)圖靈
- 《程式設計師必讀之軟體架構》作者Simon Brown:架構師與程式設計師的區別(圖靈訪談)程式設計師架構圖靈