Scala是一種表達能力非常強的語言,能夠用非常簡潔的代碼表達豐富的業務含義。為了在生產上充分發揮Scala的能力,除了掌握其簡潔的語法外,理解Scala在性能上的特點和優化點也是非常重要的事。本書通過解析一個金融領域高頻交易的實際例子,引領讀者掌握如何對Scala程序(以及一般JVM程序)進行基准測試和性能分析,從而找出瓶頸。隨后作者介紹了Scala語言、Scala標准庫(尤其是集合庫)以及Scalaz庫里解決相應瓶頸的各種技巧。
並行計算和分布式架構作為性能調優的重要手段,更是本書的重中之重,作者對Scala的並行計算和分布式架構中存在的問題都進行了充分的討論和講解,非常值得學習。本書適合已經具有Scala編程基礎、能夠較好地使用Scala風格代碼實現業務功能的程序員,作為在性能優化方面的深造閱讀資料。
前言
1 高性能之路
性能的定義
高性能軟件
硬件資源
時延和吞吐率
瓶頸
性能總結
平均數的問題
百分位數來救場
指標搜集
用基准數據(benchmark)來衡量性能
通過Profiling來定位瓶頸
結合基准測試和profiling
案例分析
工具鏈
小結
2 在JVM上度量性能
金融領域一瞥
意外的市場波動毀掉了利潤
重現故障
吞吐量基准測試
時延基准測試
定位瓶頸
微基准取得大進步
小結
3 釋放Scala的性能
值類
字節碼表示
性能考慮
標記類型——值類的一種替代品
專門化
字節碼表示
性能考慮
元組
字節碼表示
性能考慮
模式匹配
字節碼表示
性能考慮
尾遞歸
字節碼表示
性能考慮
Option數據類型
字節碼表示
性能考慮
案例研究——性能更高的Option
小結
4 探索集合API
高吞吐量系統 - 改進指令簿
理解過去實現上的折中 - list實現
當前的指令簿 - queue實現
通過惰性計算來提升取消操作的性能
歷史數據分析
滯后時序收益率(lagged time series returns)
處理多個收益率序列
小結
5 惰性集合及事件溯源
提升用戶報表生成速度
深入報表生成代碼
使用視圖提速報表生成
視圖的注意事項
打包報表生成結果
重新思考報表架構
Stream概覽
事件變換
構建事件源管道
馬爾可夫流式鏈
流的注意事項
小結
6 Scala的並發
並行回測(backtesting)策略
探索Future
Future和crazy ideas
Future使用時的考量
提交執行妨礙性能
處理阻塞調用和回調
ExecutionContext和阻塞調用
用Promise轉化回調
受命進一步提升回測性能
介紹Scalaz Task
用Task為交易日模擬建模
總結回測
小結
7 高性能架構
分布式自動化交易員(Distributed automated traders)
分布式架構概述
第一次嘗試分布式自動化交易系統
引入CRDT
CRDT和自動化交易系統
當余額不足時
免費交易策略性能提升
為交易策略做基准測試
無界隊列(unbounded queue)的危險
應用背壓(back pressure)
應用負載控制策略
Free monad
小結