發表於2024-11-13
《高性能Scala》將為你武裝創建高性能Scala應用所需的知識,從如何定義性能這樣的基礎知識開始,探索瞭Scala語言特性及函數式編程技術,同時在所有主題上都密切關注著性能。
我們虛構瞭一傢名為MV的交易公司,你將作為一個新加入這傢公司中的軟件工程師開始工作。隨著不斷學習降低延遲提高吞吐量的新技術和新方法,你將會把它們應用到解決MV交易公司的業務問題上。學習完本書之後,你將得到充分的知識儲備,能使用函數式編程範式來解決真實世界中的問題,並能編寫可以用於生産環境的高性能Scala軟件。
√ 通過開發JMH基準測試,以及使用Flight Recorder做profiling去分析JVM應用的性能。
√ 發掘齣Scala語言特性的使用場景及性能摺衷的情況,瞭解急切集閤及惰性集閤。
√ 研究流式處理管道,探索使用事件溯源模式來提升性能。
√ 深入異步編程,使用Scala的Future和Scalaz的Task來榨取多核係統的性能。
√ 利用最終一緻性的優勢,結閤無衝突復製的數據結構(CRDTs)來設計無須同步的分布式係統。
√ 理解隊列對係統性能的影響,應用Free monad模式來構建具有高等級吞吐量的健壯的係統。
Scala是一種錶達能力非常強的語言,能夠用非常簡潔的代碼錶達豐富的業務含義。為瞭在生産上充分發揮Scala的能力,除瞭掌握其簡潔的語法外,理解Scala在性能上的特點和優化點也是非常重要的事。本書通過解析一個金融領域高頻交易的實際例子,引領讀者掌握如何對Scala程序(以及一般JVM程序)進行基準測試和性能分析,從而找齣瓶頸。隨後作者介紹瞭Scala語言、Scala標準庫(尤其是集閤庫)以及Scalaz庫裏解決相應瓶頸的各種技巧。並行計算和分布式架構作為性能調優的重要手段,更是本書的重中之重,作者對Scala的並行計算和分布式架構中存在的問題都進行瞭充分的討論和講解,非常值得學習。本書適閤已經具有Scala編程基礎、能夠較好地使用Scala風格代碼實現業務功能的程序員,作為在性能優化方麵的深造閱讀資料。
楊雲,網名大魔頭,ThoughtWoks資深谘詢師,Scala多年實踐者及布道者。發錶有多篇Scala相關博客及文章,譯有多部Scala技術專著。博客:
Vincent Theron是一個擁有 9年工作經驗的專業軟件工程師。他在 6年前發現瞭 Scala並將之應用於構建高伸縮性、高可靠的應用。他在多個行業設計軟件來解決商業上的問題,包括在綫博彩、金融交易,以及昀近的廣告行業。在巴黎東部 Marne-la-Vallée,Vincent獲得瞭計算機科學及軟件工程碩士學位。他和妻子、孩子以及兩隻毛茸茸的貓一起在波士頓區域生活。
感謝在 Packt齣版社的每一個人,是你們的努力工作纔能讓這本書麵世。感謝柴塔尼亞-耐爾,帶著這個齣書項目找到我。感謝 Nikhil Borkar,一路上給我提供指引。感謝 Michael Diamant,我的閤作作者,我的同事,同時也是朋友,感謝你給這本書帶來的知識以及充滿靈感的每一天。感謝我的父母,感謝你們的愛和支持,以及你們給我買的*一颱電腦。昀後,感謝我的妻子,Julie,感謝你一直的鼓勵,感謝你給瞭我一個這麼絕妙的兒子。
Michael Diamant是一個專業的軟件工程師,熱衷於函數式編程。他在 2009年開始自己的事業,專注於 Java和麵嚮對象的編程範式。在 2011年學習 Scala之後,他專注於使用 Scala和函數式編程範式來構建金融交易和廣告領域的軟件係統。邁剋爾畢業於伍斯特理工學院,居住在波士頓區域。
我能在這本書裏麵分享的知識來源於他人在我一生中給予的支持和教導。我想要特彆感謝我的同事文森特,感謝你推動我付齣這些努力,感謝所有在一起的時間,讓我們可以發展這些書中的想法。我所有的現在和之前的同事都幫助我提高瞭工程技術,沒有你們慷慨地分享你們的所學,我將不可能編寫這本書。除瞭 Vincent,我還想特彆提及一些我覺得尤其想感謝的同事:Dave Stevens、Gary Malouf、Eugene Kolnick和 Johnny Everson。感謝我的父母和兄弟,你們支持我,將我培養成現在的我。我尤其想深深地感謝我的女友 Anna在整個寫書過程中給予我的支持。昀後,同樣的感謝送給 Packt齣版社,在你們的幫助下我們寫瞭我們的*一本書。
關於審閱者
Nermin ?rifovi?是一個從 2009年開始就熱衷 Scala的人,他從 2011年開始在專業領域應用 Scala。在大部分工作生涯中,他專注於使用 JVM技術構建後端平颱。昀近,作為 Pingup的研發總監,他正在一個本地化服務預訂係統上領導開發工作。
Nermin是一個哈佛大學延伸教育學院的導師,他在那裏與人閤作教授 Scala並行編程的課程,他還在多個學術會議上發錶瞭演講。
作為一個 Scala社區的活躍會員,Nermin組織瞭波士頓區域的 Scala愛好者群,同時他也是中東 Scala座談基金會一員。他是 Scala Puzzlers一書的閤作作者,Scala解惑網站的閤作創建者。
Nermin擁有康奈爾大學計算機科學碩士學位,他感興趣的領域包括分布式係統及伴隨著的並行,響應式和函數式編程。
前言 iX
1 高性能之路 1
性能的定義 2
高性能軟件 2
硬件資源 3
時延和吞吐率 4
瓶頸 5
性能總結 5
平均數的問題 6
百分位數來救場 8
指標搜集 9
用基準數據(benchmark)來衡量性能 9
通過Profiling來定位瓶頸 10
結閤基準測試和profiling 10
案例分析 11
工具鏈 11
小結 12
2 在JVM上度量性能 13
金融領域一瞥 13
意外的市場波動毀掉瞭利潤 16
重現故障 17
吞吐量基準測試 17
時延基準測試 20
定位瓶頸 25
微基準取得大進步 42
小結 49
3 釋放Scala的性能 51
值類 52
字節碼錶示 52
性能考慮 54
標記類型――值類的一種替代品 55
專門化 57
字節碼錶示 58
性能考慮 60
元組 65
字節碼錶示 65
性能考慮 66
模式匹配 68
字節碼錶示 68
性能考慮 70
尾遞歸 75
字節碼錶示 78
性能考慮 79
Option數據類型 83
字節碼錶示 83
性能考慮 84
案例研究――性能更高的Option 85
小結 89
4 探索集閤API 91
高吞吐量係統 - 改進指令簿 91
理解過去實現上的摺中 - list實現 92
當前的指令簿 - queue實現 101
通過惰性計算來提升取消操作的性能 104
曆史數據分析 114
滯後時序收益率(lagged time series returns) 114
處理多個收益率序列 122
小結 127
5 惰性集閤及事件溯源 129
提升用戶報錶生成速度 129
深入報錶生成代碼 130
使用視圖提速報錶生成 133
視圖的注意事項 141
打包報錶生成結果 145
重新思考報錶架構 146
Stream概覽 149
事件變換 152
構建事件源管道 158
馬爾可夫流式鏈 162
流的注意事項 166
小結 169
6 Scala的並發 171
並行迴測(backtesting)策略 171
探索Future 173
Future和crazy ideas 177
Future使用時的考量 179
提交執行妨礙性能 185
處理阻塞調用和迴調 188
ExecutionContext和阻塞調用 189
用Promise轉化迴調 193
受命進一步提升迴測性能 196
介紹Scalaz Task 197
用Task為交易日模擬建模 204
總結迴測 209
小結 210
7 高性能架構 211
分布式自動化交易員(Distributed automated traders) 211
分布式架構概述 212
第一次嘗試分布式自動化交易係統 212
引入CRDT 214
CRDT和自動化交易係統 219
當餘額不足時 220
免費交易策略性能提升 222
為交易策略做基準測試 222
無界隊列(unbounded queue)的危險 225
應用背壓(back pressure) 226
應用負載控製策略 227
Free monad 233
小結 240
Scala是一個大膽的(audacious)編程語言,在JVM平颱上,它將麵嚮對象和函數式編程的概念融閤到一起。Scala從一個相對小眾的語言成長為瞭一個開發健壯且可維護的JVM應用的首選語言。然而,如果不深入瞭解這門語言和它提供的高級特性,編寫高性能應用依然是一個挑戰性的任務。
從2011年開始,我們就使用Scala來解決復雜的業務上的挑戰,這些挑戰常常有很高的性能要求。在本書中,我們分享瞭在這些年中所學到的東西及在編寫軟件中應用過的技術。我們在書中瀏覽瞭這門語言及其生態係統,包括周邊工具和使用廣泛的庫。
我們編寫這本書的目標是幫助你理解Scala語言提供給你的選擇。你有權在書中收集必要的信息,以便在你自己的軟件係統中做齣更有知識基礎的設計和實現決定。我們將不僅給你Scala之魚,帶你上路,還將傳授漁魚之技,並給你相關工具讓你寫齣更函數式性能更高的軟件。一路上,我們將通過精心設計的業務問題來激發技術討論,這些業務問題將能讓你迴想起真實世界的問題。希望通過閱讀本書,你能體會到Scala的強大能力,並找到閤適的工具去編寫函數式性能更好的應用。
本書的內容包含什麼
第1章,通往性能之路,介紹瞭性能的概念及關於這個主題的一些重要術語。
第2章,在JVM上衡量性能,詳細介紹瞭JVM上可用於衡量和評估性能的工具,包括JMH和Flight Recorder。
第3章,釋放Scala的性能,對多項利用Scala語言特性來提升程序性能的技術和模式提供瞭引導。
第4章,探索集閤API,討論瞭Scala標準庫提供的幾個集閤抽象。在這一章中我們專注於急切執行的集閤。
第5章,惰性集閤和事件溯源,是一個高級技術章節,討論瞭兩類延遲序列:視圖和流。我們還對事件源範式進行瞭簡要的介紹。
第6章,Scala的並發,討論瞭編寫健壯的並行代碼的重要性。我們深入介紹瞭Scala標準庫提供的Future API,並介紹瞭Scalaz庫中提齣的任務抽象。
第7章,高性能架構,作為最後一章,覆蓋瞭前麵章節講過的主題的更深入的相關知識,並探索瞭使用CRDT作為分布式係統的構建塊。這一章還探索瞭在麵臨高吞吐量時,使用free monald實現負載控製策略,以構建響應延時可控的係統。
你需要準備什麼
你應該要在你的操作係統上安裝好Java Development Kit 8版本或更高,以便你可以運行所有的示例代碼。本書討論瞭Oracle HotSpot JVM,並演示瞭在Oracle JDK中包含的工具。你應該還需要從獲取最新版的sbt(在寫作本書的時候,版本為0.13.11)。
這本書為誰而寫
你應該具備關於Scala編程語言的基本知識,熟悉一些基本的函數式編程概念,並具有編寫産品級JVM軟件的經驗。我們建議剛接觸Scala和函數式編程的讀者在讀本書之前花一些時間學習其他的資源,以便可以從書中獲取到更多的知識。兩個傑齣的以Scala為中心的資源是Artima齣版社的《Scala編程》(Programming in Scala)及Manning齣版社的《Scala函數式編程》(Functional Programming in Scala)。前一個最適用於具有堅實的麵嚮對象Java編程知識,同時想要先理解這門語言然後理解函數式編程範式的開發者。後者則聚焦於函數式編程範式而少於討論某一個具體語言中的概念。
高性能Scala 下載 mobi pdf epub txt 電子書 格式 2024
高性能Scala 下載 mobi epub pdf 電子書商品可以,質量不錯
評分5分
評分商品可以,質量不錯
評分請至少填寫一件商品的評價
評分買瞭很多書、京東618很給力~
評分好好好好好好好好好好好好好好好好好好好好
評分垃圾,建議不要買,看一下官網都比這強!!!
評分印刷字體清晰,裝幀不錯。
評分好好好好好好好好好好好好好好好好好好好好
高性能Scala mobi epub pdf txt 電子書 格式下載 2024