適讀人群 :對建立大規模的云應用有需求的技術人員、Go語言開發人員
適讀人群 :云計算從業人員、Go語言開發人員。
1.云原生是云計算時代的發展趨勢和必然結果
《Cloud Native Go:構建基于Go和React的云原生Web應用與微服務》通過一個云原生應用項目的構建,為大家介紹了云原生的道與術,引導讀者了解云原生理念的產生、應用場景、優勢。
2.集現今諸多熱點技術之大成
《Cloud Native Go:構建基于Go和React的云原生Web應用與微服務》在構建云原生項目時,涉及Docker、持續集成、微服務、DevOps、事件溯源與CQRS等眾多備受關注的技術熱點,無疑會讓讀者受益匪淺。
3.Go語言助理云開發完美實現
Go語言以其簡單優雅、快速安全、支持高并發等特性,成為云計算時代的zui優語言!禖loud Native Go:構建基于Go和React的云原生Web應用與微服務》將帶領讀者正確認識Go語言,掌握用Go構建應用程序的方法。
4.流程完整,示例具體詳細
《Cloud Native Go:構建基于Go和React的云原生Web應用與微服務》從搭建平臺開始,逐步帶領讀者開發一個完整的云上項目。其中的每一環節都有詳細講解。示例具有代表性,代碼詳細,幫助讀者輕松掌握云原生開發的關鍵。
當Dan和我開始寫這本書時,我們不希望它成為一本參考書或“一本語法書”。相反,我們希望能夠充分利用自己為Pivotal客戶構建云原生解決方案的經驗,以及近一生的綜合經驗來為各種規模、形態和行業的公司構建軟件。
這本書從一個哲學章節“云之道”開始,因為我們堅信構建良好軟件的秘訣在于開發人員的心態和紀律,而不是工具或語言。
在本書中,我們將按照測試驅動和高度自動化的方式逐步實現云之道,通過一系列章節提高大家在Go中構建云原生服務的能力。本書涵蓋構建服務的基本原理,中間件技術,Git、Docker和Wercker等工具的使用,還包括云基礎設施的相關內容,如基于環境的配置、服務發現以及基于響應和推送式的應用程序。本書涵蓋了事件溯源和CQRS等模式,書中的所有內容組合成最終的示例,相信可以為大家的項目構建提供靈感。
我們始終秉承著一個堅定的信念——構建軟件應該像使用它一樣有趣(或更有趣)。如果沒有樂趣,那么一定是你做錯了。我們希望在使用Go構建服務時獲得的快樂可以感染讀者,希望你在閱讀本書時能像我們在寫作它時一樣,獲得更多的樂趣。
關于作者
KevinHoffman通過現代化和以多種不同語言構建云原生服務的方式幫助企業將其應用程序引入云端。他10歲時開始編程,在重新組裝的CommodoreVIC-20上自習BASIC。從那時起,他已經沉迷于構建軟件,并花了很多時間學習語言、框架和模式。他已經構建了從遙控攝影無人機、仿生性安全系統、超低延遲金融應用程序到移動應用程序等一系列軟件。他在構建需要與PivotalCloudFoundry配合使用的自定義組件時愛上了Go語言。
Kevin是流行的系列幻想書TheSigilordChronicles(http://amzn.to/2fc8iES)的作者,他熱切地期盼著最終能夠將自己對構建軟件的熱愛與對構建幻想世界的熱愛結合起來。
DanNemeth目前在Pivotal擔任咨詢解決方案架構師,負責支持PivotalCloudFoundry。他從Commodore64開始就一直在開發軟件,從1995年開始從事專業編碼,使用ANSIC編寫了用于本地ISP的CGI腳本。從那時起,他職業生涯的大部分時間都是作為獨立顧問為金融、制藥等各個行業提供解決方案,其間不斷使用當時流行的各種語言和框架。Dan最近接受了Go作為自己的“歸宿”,其間不斷熱情地將它用于所有的項目。
如果你發現Dan沒在電腦前,他很可能就是在靠近安納波利斯的水域玩帆船或飛釣。
致謝
這本書能夠誕生要感謝我的家人,特別是我的妻子,她給予了我無限的耐心。盡管我在過去曾多次說過,我不會再寫技術書,但事實上目前我正在寫另一本技術書。她們忍受了漫長的夜晚,忍受我在家里的地板上遷思回慮,以及為了保證這本書的質量帶來的巨大時間消耗。完成這本書比過去完成任何其他工作都讓我感到更加自豪,這本書是家人、朋友和杰出的合著者給我的寶貴支持的結晶。
——KevinHoffman
這本書獻給A-Team:四個在Pivotal工作的人。他們現在正在尋找需要指導的開發人員。如果你需要將軟件遷移到云上,他們一定會找到你。
沒有這些勇敢的人,編寫軟件的過程將變得非常無聊和難以忍受,也許永遠不會有這本書。事實上,作者們可能已經放棄了他們一直以來所致力的云服務,而是希望余生能在咖啡店當一名咖啡師。
A-Team成員有:
Dan“Hannibal”Nemeth
Chris“Murdock”Umbel
Tom“Face”Collings
Kevin“B.A.”Hoffman
Kevin Hoffman通過現代化和以多種不同語言構建云原生服務的方式幫助企業將其應用程序引入云端。他10歲時開始編程,從那時起便已經沉迷于構建軟件,并花了很多時間學習語言、框架和模式。他已經構建了從遙控攝影無人機、仿生性安全系統、超低延遲金融應用程序到移動應用程序等一系列軟件,并且在構建需要與Pivotal Cloud Foundry配合使用的自定義組件時愛上了Go語言。
Dan Nemeth目前在Pivotal擔任咨詢解決方案架構師,負責支持Pivotal Cloud Foundry。他從1995年開始從事專業編碼,使用ANSI C編寫了用于本地ISP的CGI腳本。他職業生涯的大部分時間都是作為獨立顧問為金融、制藥等各個行業提供解決方案,其間不斷使用當時流行的各種語言和框架。Dan最近接受了Go作為自己的“歸宿”,其間不斷熱情地將它用于所有的項目。
譯者簡介
宋凈超,TalkingData技術運營團隊工程師。擁有多年的Hadoop大數據平臺運維管理經驗,熟悉Hadoop技術、Docker生態系統以及PaaS平臺,主導了 TalkingData的Yarn on Docker項目改造和微服務落地,關注開源軟件及Docker、Kubernetes的前沿發展,關注Kubernetes和TensorFlow的實踐。多次在全球架構師峰會、QCon 、CNUTCon、云棲大會等技術會議上作為講師進行技術分享,博客地址:http://rootsongjc.github.io/。
推薦序1
作為一個在IT行業摸爬滾打20余年的老程序員,我一直認為程序員的工作不僅僅是進行代碼編寫。很多情況下,程序員的工作和作家類似,都是在進行創作。很多非常出色的程序員同時也是出色的作家,比如程序員王小波除了是一個C語言和匯編語言高手,同時還創作了《時代三部曲》,進而成為知名的作家。當然,大部分程序員沒有王小波那份駕馭文字的功力,沒辦法跨界寫小說。不過,總結日常的一些技術點滴使其成為文章或者翻譯國外的博客、技術書籍,這些對于大部分程序員來講還是不難做到的,因此這也成為我們團隊所有程序員的OKR。
最近幾個月的周六,我經?吹剿蝺舫瑢W靜坐在自己的工位上,或若有所思,或埋頭打字,屏幕上閃爍的不是編程的IDE,倒像是碼字的word文檔。經過幾個月的辛苦努力,終于,由宋凈超、吳迎松、徐蓓、馬超幾位技術運營團隊的同學翻譯的這本《CloudNativeGo:構建基于Go和React的云原生Web應用與微服務》擺在了我的面前。
CloudNative的概念來自Pivotal的MattStine,是面向現代DevOps、微服務、持續集成等技術的一種思想,其本身并不是某一種具體的技術。顧名思義,這本書就是將這種思想利用Go語言進行實踐和落地。結合我們技術運營團隊過去兩年的工作,我深刻地理解他們為什么要翻譯這本書,因為這本書中的很多思想正是我們技術運營團隊在過去兩年中一直踐行的。對于在實踐的路上苦苦前行的程序員來講,看到一本與自己的技術理念非常一致的書,內心的激動可想而知,我相信這也是他們要加班加點將這本書翻譯出來并介紹給國內廣大同行的重要原因。
從一個經常閱讀技術書籍的讀者角度來看,本書是一本很貼近實戰的技術書籍。對于沒有Go語言開發經驗的讀者來講,這本書介紹了Go語言的基礎知識,并且指導讀者去實踐,從而為掌握書中的其他內容打下基礎。不過,這畢竟不是一本Go語言專著,如果想了解更多Go語言的特性和高級用法,還需要查閱專門講解Go語言的書籍或訪問Go語言技術社區。既然這本書是面向CloudNative的,那么關于CloudNative的概念無疑才是本書的核心內容。在這本書中,大家除了可以了解到持續交付、測試優先、微服務、服務治理、數據服務、CQRS、云安全等概念,同時還可以通過書中的示例一步步地實踐,最終完成一個真實的WorldofFluxCraft項目。一本優秀的技術書籍應該能夠在理念上給人以啟迪,讓人產生思考和共鳴,同時又能夠真正落到實地,讓技術人員可以親自去探索和驗證,而這本書無疑是優秀書籍的代表。
工作多年,我閱讀過很多由國內技術人員翻譯的計算機方面的書籍,體驗不盡相同。很多技術書籍的翻譯水準欠佳,且不說能否達到信、達、雅的境界,能夠滿足沒有常識性錯誤和語句通順這兩個基本要求就已經很難得了,因此,有的時候我寧愿去讀英文原版。剛剛拿到這本書的翻譯稿時,老實講,我十分擔心翻譯質量,在這個AI逐漸取代人類工作的時代,如果翻譯質量不高,不如使用谷歌翻譯更為合適。然而通篇讀下來,整本書的翻譯質量出乎我的意料!雖然是翻譯稿,但是整本書的語言風格非常本土化,并且能看出譯者的文字功底非常深厚。無數個周末的無休,只是為了能夠給大家帶來一部高質量的技術書籍,也不枉原作者辛苦創作,我覺得技術運營團隊的同學們的這種態度非常難得!
由于負責TalkingData的主要線上業務和數據業務的技術研發工作,因此我每天都會面臨著如何能夠使線上系統在并發壓力和數據規模持續增加的情況下還能保證穩定和快速迭代的挑戰。為了應對這些挑戰,我們在幾年前就開始嘗試將DevOps的理念引入團隊中,開發并開源監控報警系統OWL,這讓我們能夠全天候、多通道地支持系統報警。同時我們也將微服務化、灰度上線、端到端自動測試等應用于日常工作中。
這本書中的很多理念給了我深刻啟發,也讓我堅信我們正走在一條正確的路上。相信國內和我們面臨同樣挑戰的團隊還有很多,這本書無疑可以給面臨類似問題的團隊帶來很大的幫助。同時,我也衷心希望我們的技術團隊未來能夠將自己的經驗和教訓積累下來,出版我們自己的原創技術書籍。
閻志濤
TalkingData副總裁
2016年6月
推薦序2
很多年以前,我便聽說過Go語言的大名,因為它的創始人中有大名鼎鼎的KenThompson以及RobPike。年輕一代的程序員或許不了解這兩位“爺爺”輩的程序員,但在我學習計算機的年代,這兩位大師非常受人崇敬,他們參與開發的Unix、Plan9、UTF-8等也都是可以載入史冊的偉大產品。尤其是Thompson,他早在1983年就因對Unix以及C語言做出卓越貢獻而獲得了圖靈獎。不過當我第一次聽到Go這個新的程序語言時,多少還是有些懷疑,Go究竟能不能被程序員所接受呢?畢竟現在的開發者可以選擇的語言工具已經極其豐富,無論在哪一種場景下,都已經存在太多的選擇。
幾年過去了,隨著Docker的大熱,我才突然意識到其背后的開發語言竟然就是這個新生不久的Go。隨之而來的是,越來越多的企業和產品開發項目開始采用Go。這個名單很長,其中包括Kubernetes、OpenShift、CoreOS、MongoDB、Twitch以及Uber等。尤其讓我感到驚訝的是,以全面采用Python語言著稱的Dropbox居然也將核心的組件從Python遷移到了Go上面,原因在于程序語言的性能不同。受到這個事件的影響,我開始將Go語言加入到我的學習清單里面。
眾所周知,云計算已經成為了這個時代中IT技術發展最重要的方向,同時因為我所任職的企業AWS在云計算領域擁有巨大的影響力,于是我就會特別留心一切與云計算開發相關的話題。自從2015年AWS發布了針對Go語言的SDK,越來越多的開發者開始了Go語言的云計算開發之旅。我相信許多開發者在學習的過程中需要的不僅僅是一門講解程序語言語法的教程,他們更希望的是擁有一本針對云計算的Go實踐開發手冊!禖loudNativeGo:構建基于Go和React的云原生Web應用與微服務》應該就是這樣的一本書,書中的一切內容都圍繞著云計算的實踐來展開,當中每一段代碼示例都可以被應用到實踐中。
寫一本書是很辛苦的,而高質量的翻譯無疑是使這樣一本書能夠被廣泛接受的關鍵所在。感謝作者和譯者們為此而付出的辛苦努力,也希望所有開發者能夠在云計算的時代因此而受益。
古人云:理無專在,而學無止境也。是以為記。
費良宏
AWS首席布道師
2017年6月
譯者序
Go語言起源于Google,集中進入大家視線是由于一款革命性的產品——Docker的發布。從Go開始流行,直到其位列TIOBE榜單的前20名,我們都一直關注著這門語言的發展。近兩年來,一批批優秀的基于Go語言的開源軟件涌現出來,例如etcd、Kubernetes、Prometheus等,這些開源軟件被廣泛應用于我們的生產環境中。
因為Go語言非常簡潔且功能強大,加之其能夠充分利用系統的多個核心組件,實現高性能的網絡服務,因此我們于2014年將Go語言引入了我們的公司TalkingData,并使用它構建了自己的開源監控系統——OWL(https://github.com/TalkingData/owl),也基于它實現了對Hadoop集群虛擬化的探索magpie(https://github.com/rootosngjc/magpie)。
剛開始接觸到本書時,我們看到書中提到的那些熟悉的技術和理念后感到非常興奮,通過這本書,我們可以有機會用一種體系化、結構化的方式與大家交流書中的知識和技術。因此我們決定翻譯這本書,并且犧牲了許多工作之余的時間來研究書中的內容和細節,除了出于對技術分享始終保有熱情,更是因為想要讓各位讀者早日看到這本關于Go語言和云原生技術的好書。
CloudNativeGo是一本很好的云原生應用實踐手冊,全書基于微服務理念編寫,書中有豐富的示例和代碼,這些代碼托管在GitHub上,讀者可以很輕松地獲取到。另外,書中還介紹了很多不錯的工具的最佳實踐,這些工具都是免費的,不需要綁定信用卡,大家可以放心使用。而且,原作者風趣幽默的行文非常有吸引力,不會讓大家閱讀時感到乏味。
這本書涉及的內容非常廣泛,讀完本書,讀者會對云原生應用的構建規則、微服務劃分、測試驅動開發、CQRS和事件溯源、持續發布流程、安全、故障排查等整個軟件開發生命周期中的重要環節有一個較好的了解,也會對前端開發、前端框架、UI設計有一定的認識,從而在實際的程序開發過程中更加得心應手。
當然,這本書不是一本專門講解Go語言的書籍,它適用于有一定Go語言基礎的讀者。閱讀關于創建Web應用的部分時,還需要讀者對Web應用開發流程有所了解,這對于長期從事后端開發的讀者來說可能會比較困難。
除我以外,還有三位TalkingData的同事徐蓓、馬超、吳迎松參與了本書的翻譯。其中,徐蓓翻譯了1~5章,馬超翻譯了6~8章,吳迎松翻譯了9~12章,其余的章節由我翻譯,同時我也承擔了全書譯文的審校工作。
本書能夠順利出版并及時與讀者見面,要感謝很多人的幫助。感謝公司的大力支持;感謝電子工業出版社的編輯孫奇俏對本書的大力協助和專業指導;感謝在本書的翻譯過程中所有通過朋友圈和https://rootsongjc.github.io/cloud-native-go/網站關注和支持我們的朋友們;最后再次感謝所有譯者。希望每一位讀者都能從本書中獲得想要的知識,希望你們喜歡這本書,衷心感謝大家!
宋凈超
2017年6月
……