Akka應用模式:分布式應用程序設計實踐指南

Akka應用模式:分布式應用程序設計實踐指南 pdf epub mobi txt 电子书 下载 2025

[美] Michael,Nash(邁剋爾?納什),[加] Wade,Waldron(韋德?沃爾德龍) 著,虞航仲 譯
想要找书就要到 求知書站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121325298
版次:1
商品编码:12196025
品牌:Broadview
包装:平装
开本:16开
出版时间:2017-10-01
用纸:胶版纸
页数:184
字数:255000
正文语种:中文

具体描述

內容簡介

對於想要學習Akka的Java 和 Scala 開發者們,有很多技術資源可供參考,但是如要想知道如何去應用這些技術就需要不同的思維方式瞭。為瞭幫助你正確地使用Akka,這本實用的實踐指南提供瞭若乾高級的設計模式,還包括瞭如何以及何時應用那些模式去解決在大型分布式係統中遇到的實際問題的一些案例。

作者簡介

Michael Nash是Lightbend 的總監。過去30 多年間,他為各種規模的公司及客戶設計、開發、發布瞭很多軟件項目。作為項目管理和架構實踐的軟件工藝倡導者,他是“安全堆棧”*早的實踐者之一,在Scala、Akka 和Spray 方麵有五年以上的工作經驗。他大部分業餘時間緻力於“安全響應式平颱”的相關工作,在會議中發錶主題演講,以及在軟件相關領域撰寫書籍。Wade Waldron是Lightbend 的高級顧問。他現在針對Lightbend 響應式平颱提供培訓和谘詢服務。在Lightbend 之外,Wade 在過去9 年中一直在建立堅實的軟件和遊戲,重點是設計測試驅動、設計域驅動、設計麵嚮服務的架構、設計事件驅動架構以及敏捷開發。
高中開始接觸編程,大學期間參加各種比賽,獲得許多奬項。也因為比賽,大三就獲得瞭微軟的實習機會,學習到很多學校學不到的東西。也因此開始一有時間就會去各種公司實習,瞭解不同公司的企業文化。比較典型的程序員,熱愛編程,喜歡研究算法,也喜歡學習各種好玩的開源項目。由於自身工作經曆,對於分布式係統的實踐經驗有豐富的經驗。

目錄

目錄
前言 .......................................................................................... xvii
第1 章 Actor 模型 ........................................................................1
現實是最終一緻的 .................................................................................................1
解構Actor 模型 .....................................................................................................3
所有的計算都在一個actor 中執行 .........................................................................4
actor 之間隻能通過消息進行通信 .........................................................................5
actor 可以創建子actor ...........................................................................................6
actor 可以改變自己的狀態或行為 .........................................................................8
一切都是actor .......................................................................................................9
Actor 模型的使用 .................................................................................................10
定義清晰的邊界 ................................................................................................... 11
何時適閤使用Actor 模型 ....................................................................................13
結論 .....................................................................................................................13
第2 章 Akka 簡介 .......................................................................15
Akka 是什麼......................................................................................................... 15
Akka 是開源的 .............................................................................................. 15
Akka 正在蓬勃發展 .......................................................................................16
Akka 是為分布式設計的 ...............................................................................16
Akka 組件 ............................................................................................................17
Akka actor .....................................................................................................17
子actor .......................................................................................................... 18
remoting :不同JVM 上的actor ....................................................................20
clustering :集群成員的自動化管理 ..............................................................20
Akka HTTP ...................................................................................................24
TestKit ........................................................................................................... 25
contrib ........................................................................................................... 25
Akka OSGi ................................................................................................... 25
Akka HTTP ...................................................................................................26
Akka Streams ................................................................................................26
Akka 實現的Actor 模型 ......................................................................................26
Actor 模型中的Akka actor ..................................................................................26
消息傳遞 .......................................................................................................27
actor 係統 ...................................................................................................... 28
Akka Typed 項目 .................................................................................................. 28
結論 ....................................................................................................................29
第3 章 分布式領域驅動設計 ........................................................31
DDD 概述 ............................................................................................................31
DDD 的好處 .........................................................................................................32
DDD 組件 ............................................................................................................33
域實體 ..................................................................................................................34
域值對象 .............................................................................................................34
聚閤與聚閤根 ..................................................................................................... 35
倉儲 .....................................................................................................................37
工廠和對象創建 ................................................................................................... 38
域服務 .................................................................................................................. 38
有界上下文 ..........................................................................................................39
結論 ....................................................................................................................41
第4 章 優秀的Actor 設計 ...........................................................43
大係統小做 ..........................................................................................................43
封裝actor 中的狀態 ............................................................................................44
使用字段封裝狀態 .......................................................................................44
使用“狀態”容器封裝狀態 ........................................................................47
使用become 封裝狀態 ................................................................................. 48
將futures 與actors 混閤 ............................................................................... 50
Ask 模式和替代方案 ............................................................................................ 54
Ask 模式的問題 ........................................................................................... 55
附帶的復雜性 ................................................................................................ 57
Ask 的替代方案 ........................................................................................... 57
命令與事件 .......................................................................................................... 59
構造函數的依賴注入 ....................................................................................61
使用路徑查找actor ......................................................................................61
結論 ....................................................................................................................62
第5 章 數據流 ............................................................................63
吞吐量與延遲 ......................................................................................................63
流 .........................................................................................................................64
路由器 ..................................................................................................................66
郵箱 ..................................................................................................................... 68
無界郵箱 ...................................................................................................... 68
有界郵箱 ......................................................................................................69
拉取的工作模式 ..................................................................................................70
背壓 .....................................................................................................................73
ack .................................................................................................................73
高水位標記 ...................................................................................................73
隊列長度監控 ................................................................................................74
速率監控 ......................................................................................................74
Akka 數據流.........................................................................................................74
源 .................................................................................................................. 75
匯 ..................................................................................................................77
RunnableGraph ............................................................................................. 78
流 ..................................................................................................................79
交叉點 ........................................................................................................... 80
Akka 流中的背壓 ......................................................................................... 81
Akka 流的使用 ............................................................................................. 82
結論 .................................................................................................................... 84
第6 章 一緻性和可擴展性 ...........................................................85
事務和一緻性 ...................................................................................................... 85
強一緻性與最終一緻性 ....................................................................................... 86
並發性與並行性 ................................................................................................... 86
為什麼全局一緻的分布式狀態影響可擴展性 ...................................................... 86
位置透明性 ......................................................................................................... 87
交付保證 ............................................................................................................. 87
最多投遞一次 ................................................................................................ 87
最少投遞一次 ................................................................................................ 88
恰好一次交付是不可能的(但可以近似做到) .............................................91
如何近似做到恰好一次交付 .........................................................................91
集群單例 .......................................................................................................92
可擴展性 ..............................................................................................................94
避免全局狀態 ............................................................................................... 98
避免共享狀態 ............................................................................................... 98
遵循Actor 模型 .............................................................................................99
避免順序操作 ...............................................................................................99
隔離阻塞型操作 ...........................................................................................99
監控和調優 ..................................................................................................99
集群分片和一緻性 ...............................................................................................99
分片 ............................................................................................................. 100
Akka 中的分片 ........................................................................................... 101
分片鍵的生成 ............................................................................................. 102
分片的分布 ................................................................................................ 103
一緻性邊界 ................................................................................................. 103
可擴展性邊界 ............................................................................................. 104
分片聚閤根 ................................................................................................ 105
持久化 ......................................................................................................... 106
鈍化 ............................................................................................................. 106
使用集群分片保證一緻性 ........................................................................... 107
結論 .................................................................................................................. 109
第7 章 容錯 .............................................................................111
故障類型 ........................................................................................................... 112
異常 ............................................................................................................ 112
JVM 中的緻命錯誤 .................................................................................... 113
外部服務故障 ............................................................................................. 113
不符閤服務等級協議 .................................................................................. 113
操作係統和硬件級故障 .............................................................................. 114
故障隔離 ........................................................................................................... 114
艙壁模式 .................................................................................................... 114
優雅降級 ..................................................................................................... 117
使用Akka 集群隔離故障 ............................................................................ 119
使用熔斷器控製故障 ................................................................................... 119
故障處理 ............................................................................................................ 122
異常處理 ..................................................................................................... 123
外部服務的故障處理 .................................................................................. 128
結論 ................................................................................................................... 131
第8 章 可用性 ..........................................................................133
微服務和單體式應用 ........................................................................................ 133
用有界上下文劃分微服務 ................................................................................. 134
細粒度的微服務 ................................................................................................. 135
集群感知路由器 ................................................................................................. 135
分布式數據 ....................................................................................................... 137
優雅降級 ............................................................................................................ 140
部署 ................................................................................................................... 141
分階段部署/ 滾動重啓 ..................................................................................... 142
藍/ 綠部署 ........................................................................................................ 142
崩潰恢復/ 運維監測 ......................................................................................... 143
健康檢查和應用狀態頁麵 .......................................................................... 143
度量 ............................................................................................................ 145
日誌 ............................................................................................................. 146
看門狗工具 ................................................................................................. 146
結論 .................................................................................................................. 147
第9 章 性能 ...........................................................................149
隔離瓶頸 ........................................................................................................... 150
優化Akka ......................................................................................................... 150
減少或隔離阻塞型操作 .............................................................................. 150
縮短消息處理時間 ...................................................................................... 151
增加處理消息的actor ................................................................................ 151
派發器 ................................................................................................................ 151
標準派發器 ................................................................................................. 151
固定派發器 ................................................................................................. 153
平衡派發器 ................................................................................................ 154
calling-thread 派發器 .................................................................................. 154
何時使用單獨的派發器 .............................................................................. 155
提高並行性 ................................................................................................ 157
結論 .................................................................................................................. 158
後記 ..........................................................................................159
參考文獻 ...................................................................................161
關於作者 ...................................................................................162
封麵介紹 ...................................................................................163

前言/序言

前言

響應式應用開發是軟件開發的新前沿。 隨著聯網設備的普及,數據量也在增加。以前的單綫程批處理數據的舊技術根本無法滿足這個新領域所提齣的需求。大數據的概念已經興起,我們需要新的工具和新的技術來應對它。

通常,解決現有問題的靈感並不是來自現有的技術,而是來自過去的經驗。許多現今用於處理大數據的新工具實際上是基於舊的actor 的概念而産生的。actor 是構建Akka 的關鍵概念,但其根源追溯起來應該屬於過去。actor 不是一個新概念,相反,它是一個被重新關注的舊概念。

當開始探索Akka、actor、streams 和其他與之相關的技術時,我們將從現實世界的角度來看待它們:如何在一係列項目中安排一組人,同時優化他們的可用時間及技能?這是一個復雜的問題,並不是隻用一個下午就可以解決的。但這又是一個有趣的問題,為深度探索提供瞭很大的空間。這也是大多數軟件開發人員在職業生涯中的某個時刻一定會遇到的問題。 在對Akka 進行探索的過程中,我們將迴顧這個問題。

在解決問題之前,我們必須先瞭解可用的工具,還需要瞭解這些工具為什麼存在,以及它們可以解決什麼樣的問題。我們需要知道Akka 的起源及其在Actor 模型中的根源。我們需要一套指導原則將應用程序拼接在一起,這套原則會在探索域驅動設計(DDD)的過程中被發現。有瞭這些基礎,便可以開始使用Akka 提供的所有工具來構建域瞭。我們可以探索簡單的actor 的使用方法以及它如何與流關聯,可以讓係統分布在多個節點上,使其具有更好的容錯性、可用性及可擴展性。

首先,我們需要知道這一切的根源在哪裏。



譯者序

我在大學期間開始接觸並使用Scala,當時就發現瞭這門語言的強大。正如其名字所錶達的那樣,Scala 是一門可擴展的編程語言,融閤瞭函數式編程和麵嚮對象編程的特點,支持並發,讓異步編程變得很自然,同時錶達能力也特彆強。雖然Scala 的學習成本會比較高,尤其和Golang、Python 這類語言相比,但是這門語言還是非常實用的,對提高開發效率很有幫助。而且Scala 的創始人Martin Odersky 說過:“Scala 現在是為聰明人創造的,以後也是為聰明人服務的。” Scala 相信程序員的聰明纔智,讓程序員自行選擇閤適的結構,以應對韆變萬化的任務需求,這一點是Scala 做得很不錯的地方。

編寫正確的具有容錯性和可擴展性的分布式、高並發程序非常睏難,主要是因為我們使用瞭錯誤的工具和錯誤的抽象層次,而Akka 的齣現改變瞭這種情況。Akka 是參照Apache 2 許可證(一種公認的開源許可證)發布的開源項目,通過使用Actor 模型來提高抽象的級彆,並提供瞭一個更好的平颱來構建可擴展的、有彈性的、響應式的應用程序,詳細信息可參閱The Reactive Manifesto。對於容錯,Akka 采用“讓它崩潰(Let It Crash)”的模式,這種模式可以幫助構建可自我修復和永不停止的軟件係統。其中actor還提供瞭透明的分布式抽象,以及真正的可擴展與高容錯應用的基礎設施。

畢業後,我在騰訊微信團隊的後颱架構部從事軟件開發工作,作為騰訊的戰略級産品,微信平均每天麵臨億級的在綫用戶。麵對這種用戶規模的挑戰,基本每一行代碼都需要考慮高並發和分布式的場景,大道至簡的思想基本貫徹在整個技術産品綫上。例如,大係統小做,讓一切可擴展;剝離復雜,讓剩下的更簡單;在容災之前麵嚮最壞情況思考,防止雪崩;精細監控,迅速響應等。微信團隊內部的很多技術點也和Actor 模型很像,比如微信最核心的消息模型和Actor 的郵件模型就很有淵源。消息被發齣後,會先在後颱臨時存儲,為瞭使接收者能更快接收到消息,係統會推送通知給接收者,最後客戶端主動到服務器端拉取消息。當然整個微信架構就是微服務的架構,每一個請求後麵可能會涉及幾百個服務。如何擴展、如何高容錯、如何彈性,這些基本是每天都會遇到的挑戰,並且也都是設計和開發係統的時候需要考慮的事情。

後來,我離開騰訊,在獵豹移動的廣告係統架構部以及新聞團隊從事係統架構開發工作,同樣涉及微服務架構,每天都要考慮到這些分布式係統可能遇到的並且需要處理的問題。尤其廣告係統涉及金錢,因而需要嚴格保證其高可用性和一緻性。

現在,我在創業公司擔任技術負責人,同時負責公司內部多個係統的架構工作,也需要時時刻刻考慮和處理高並發、高容錯等分布式問題,同樣用到瞭高並發的分布式微服務架構。

本書原名是Applied Akka Patterns :A Hands-On Guide to Designing Distributed Applications,書中介紹瞭一些很好的分布式係統的設計原則,而且也介紹瞭Actor 模型和Akka 工具包,對於使用JVM 體係結構的開發者來說是非常值得一看的,因為通過本書能很快地學習並掌握一個強大的工具,在工作中提高生産效率。對於那些使用非JVM體係結構的開發者來說,通過這本書能瞭解到一個更強大的工具,也是極有幫助的。同時,本書介紹的很多指導原則對於分布式係統設計有很大的藉鑒意義,可以避免讓自己陷入睏境。這本書是一個起點,幫助我們發現新大陸,但絕不會是我們的終點,開拓這塊新大陸還需要自己不斷努力。其實Scala 本身就是一門很強大的語言,最近也因為Spark、Kafka 等項目在國內掀起瞭一波關注熱潮。Akka 也很優秀,以至於被 Lightbend 收購,並直接用Akka 的actor 替代瞭Scala 本身的actor。總之,本書中介紹的內容都是非常值得探索和學習的。

決定翻譯這本書,不僅因為我參與和主導瞭不少分布式的項目,也因為對分布式係統設計和開發的熱愛,以及對Scala 語言本身的喜歡。我抱著把Actor 模型以及Akka 傳遞給中國的工程師並讓更多人能接觸、瞭解它們的態度來嘗試翻譯這本書。雖然它們在國內還不算太火,但是在國外已經非常受歡迎。

這本書雖然隻有160 多頁,但是翻譯過程還是比較辛苦的,很多地方的意思都比較隱晦,用中文直譯會很有挑戰。所以我平時會留意大傢在社區裏討論的內容,參考社區裏的資料,在遇到一些和自己項目經驗不太一緻或者比較不確定的地方,也會嘗試去查看Akka的源碼來盡量保證自己的理解無誤,避免誤導讀者。

在本書的翻譯工作結束之際,我首先要感謝博雲科技的CTO 李亞瓊老師,他的引薦讓我獲得瞭翻譯這本書的機會。還要感謝孫國立、曾傑瑜、付冉、劉岸,他們在百忙中幫我審閱瞭本書翻譯稿的大部分章節,並針對涉及的專業概念提齣不少修改意見。最後要感謝本書的策劃編輯孫奇俏,她為本書的編輯和校對做瞭大量細緻的工作。

翻譯過程中雖力求理解作者意圖,把握全文,但是難免會發生錯誤,若廣大讀者發現錯誤,我在此深錶歉意。歡迎廣大讀者及時與我和齣版社聯係,提交勘誤,方便後續讀者更好地閱讀。如果有任何好的想法和建議,也歡迎和我郵件溝通,我的郵箱地址是hangzhong.yu@gmail.com。

虞航仲

2017 年8 月於北京



用户评价

评分

京东活动囤的,慢慢看

评分

书本身是不错的,可是京东的包装不行,书拿到手边角都破损了

评分

好商品,好价格,荐荐荐。

评分

很薄的一本书,价格贵,内容也不详细

评分

不错

评分

挺薄的,希望是短小而精细,埋伏

评分

京东购物方便。价格合理 值得购买

评分

概念很多,实践没几个,例子很少,而且都是scale的,不实用呀

评分

很适合工作后给自己充电学习用,好好利用起来

相关图书

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有