內容提要
《Java多執行緒與Socket:實戰微服務框架》從實戰角度出發,首先介紹Java多執行緒、Socket、Spring、動態代理、動態位元組碼、序列化等技術在構建分散式微服務框架中的套用。然後介紹一種微服務框架的架構設計與編程實踐,並將這一微服務框架分解為底層Socket通信、服務註冊與發現、服務暴露與引用、遠程方法調用等層面,逐一深入講解。這裡重點介紹作者如何活用相關技術一步步地構建微服務框架的基礎RPC框架並分享了相應的性能調優經驗。最後介紹微服務架構中配套的服務治理系統的設計與實現方案,包括服務的設計、配置、管理與監控。
目錄
第1章 多執行緒基礎
1.1 多執行緒的概念
1.1.1 進程與執行緒
1.1.2 並發與並行
1.1.3 執行緒狀態
1.2 Thread執行緒類
1.2.1 基本用法與思考
1.2.2 常用方法介紹
1.2.3 wait和sleep的區別
1.2.4 sleep和yield的區別
1.3 Runnable接口
1.4 執行緒池
1.4.1 Executors
1.4.2 ExecutorService
1.4.3 ThreadPoolExecutor
1.4.4 基本用法與思考
1.5 Callable與Future
1.6 執行緒安全與效率
1.6.1 什麼是執行緒安全
1.6.2 執行緒同步
1.6.3 飢餓與公平
1.6.4 鎖與死鎖
1.6.5 執行緒中斷
1.7 編程進階
1.7.1 volatile關鍵字
1.7.2 synchronized關鍵字
1.7.3 wait/notify/notifyAll
1.7.4 CAS操作
1.7.5 atomic包
1.7.6 Lock自旋鎖
1.7.7 Condition條件變數
1.7.8 執行緒安全容器
1.7.9 ThreadLocal類
1.7.10 CountDownLatch計數器
1.7.11 CyclicBarrier柵欄
1.7.12 Semaphore信號量
1.7.13 fork/join框架
第2章 Socket基礎
2.1 TCP與Socket
2.2 TCP的通信過程
2.2.1 基本過程
2.2.2 建立連線
2.2.3 全雙工異步通信
2.2.4 下線
2.2.5 優雅地斷開
2.2.6 半……連線
2.3 通信方式
2.3.1 長連線與短連線
2.3.2 執行緒模型
2.3.3 拆包與組包
2.3.4 斷包與粘包
2.3.5 數據包的結構
2.4 BIO
2.4.1 典型編程模型
2.4.2 關鍵API概述
2.4.3 字元流傳輸
2.4.4 位元組流傳輸
2.4.5 傳輸多筆數據
2.5 NIO
2.5.1 NIO簡介
2.5.2 Buffer
2.5.3 Channel
2.5.4 Selector
2.5.5 Scatter/Gather
2.5.6 Pipe
2.5.7 記憶體映像檔案
2.5.8 檔案傳輸示例
2.5.9 “聊天室”示例
2.6 AIO
2.6.1 AIO簡介
2.6.2 關鍵API概述
2.6.3 示例代碼
第3章 Spring與Spring Cloud
3.1 Spring簡介
3.2 IoC容器
3.2.1 IoC的概念
3.2.2 Spring中的bean
3.2.3 XML配置方式
3.2.4 註解配置方式
3.2.5 用Java類來配置
3.2.6 BeanFactory與FactoryBean
3.2.7 ApplicationContext與ApplicationContextAware
3.2.8 動態註冊bean配置
3.2.9 ApplicationListener與容器事件
3.3 bean的基本配置
3.3.1 scope屬性
3.3.2 parent與abstract
3.3.3 factory-bean與factory-method
3.3.4 bean的初始化與釋放
3.4 依賴注入
3.4.1 setter注入
3.4.2 工廠方式注入
3.4.3 構造器注入
3.4.4 註解注入
3.5 Spring Boot
3.5.1 快速創建工程
3.5.2 編碼與測試
3.5.3 打包部署
3.5.4 輔助開發工具
3.5.5 監控功能
3.6 Spring Cloud
3.6.1 Spring Cloud簡介
3.6.2 架構設計
3.6.3 創建套用
3.6.4 服務的註冊與發現
3.6.5 服務配置
3.6.6 Ribbon負載均衡
3.6.7 Feign服務調用
3.6.8 Hystrix
3.6.9 Zuul服務路由
3.6.10 服務監控
第4章 動態代理
4.1 代理模式
4.2 靜態代理
4.3 類的裝載
4.4 Java反射
4.5 JDK動態代理
4.6 CGLIB動態代理
4.7 Java Compiler API
4.8 Javassist動態代理
第5章 對象序列化
5.1 什麼是序列化
5.2 Java序列化
5.2.1 基本用法
5.2.2 關於serialVersionUID
5.2.3 自定義序列化
5.2.4 封裝實現代碼
5.3 Hessian序列化
5.4 Kryo序列化
5.5 FST序列化
5.6 其他序列化組件
5.7 集成與擴展
5.7.1 優雅地集成
5.7.2 使用Java SPI
5.7.3 使用Spring
第6章 框架設計
6.1 總體結構
6.1.1 邏輯架構
6.1.2 框架設計概述
6.1.3 RPC原理
6.1.4 工程結構
6.1.5 依賴的jar包
6.1.6 主要的類
6.2 初始化過程
6.2.1 Spring配置
6.2.2 套用節點的啟動
6.2.3 Web容器的啟動
6.2.4 RpcCore的初始化
6.2.5 RpcContext的初始化
6.3 服務的暴露
6.3.1 服務暴露配置
6.3.2 方法配置與ID
6.3.3 內置的服務方法
6.3.4 服務提供方本地調用器
6.3.5 服務提供方代理生成器
6.3.6 註冊要暴露的服務
6.4 服務的引用
6.4.1 服務引用配置
6.4.2 本地引用工廠類
6.4.3 註冊本地引用工廠
6.4.4 本地引用與方法ID
6.5 服務的註冊與發現
6.5.1 註冊表集合
6.5.2 註冊表的同步
6.5.3 註冊表的解析
6.5.4 提交註冊表
6.5.5 註冊表推送
6.5.6 註冊表檢查
6.6 優雅地停機
6.6.1 停機的過程
6.6.2 停機鉤子
6.6.3 監聽Web容器的關閉
6.6.4 RpcCore的關閉
6.6.5 停機通知的處理
第7章 方法調用
7.1 方法調用類型
7.2 同步調用
7.2.1 同步調用的時序
7.2.2 同步調用的發起
7.2.3 負載均衡
7.2.4 指定服務提供者
7.2.5 失敗轉移
7.2.6 傳送調用請求
7.2.7 處理調用請求
7.2.8 處理調用回響
7.3 異步調用
7.3.1 異步調用的時序
7.3.2 異步調用的發起
7.3.3 異步調用的執行
7.3.4 方法調用對象
7.4 同步/異步通知
7.5 異步回調
7.6 廣播調用與廣播通知
7.6.1 廣播示例
7.6.2 廣播代碼
第8章 通信層實現
8.1 Socket通信框架
8.1.1 Netty與Mina
8.1.2 為什麼要自己寫
8.1.3 是NIO還是AIO
8.1.4 設計思路
8.1.5 實際結構
8.2 通信協定
8.2.1 傳輸對象
8.2.2 數據包結構
8.2.3 拆包與傳送
8.2.4 接收並組包
8.3 連線的建立
8.3.1 工作模型
8.3.2 開始監聽
8.3.3 發起連線
8.3.4 綁定連線
8.3.5 斷線檢測
第9章 性能測試與調優
9.1 性能調優概述
9.1.1 性能指標
9.1.2 性能瓶頸
9.1.3 環境因素
9.2 壓力測試
9.2.1 測試方法
9.2.2 場景設計
9.2.3 測試環境
9.2.4 Dubbo配置
9.2.5 測試程式
9.3 執行緒池調優
9.3.1 調整執行緒池的大小
9.3.2 選擇合適的佇列
9.3.3 執行緒的管理邏輯
9.3.4 選擇拒絕策略
9.4 最佳化執行緒同步
9.4.1 減少上下文切換
9.4.2 避免執行緒濫用
9.4.3 避免過多的鎖
9.4.4 synchronized VS Lock
9.4.5 縮小鎖的範圍和粒度
9.4.6 執行緒分析工具
9.5 JVM調優
9.5.1 堆與棧
9.5.2 JVM記憶體的分代
9.5.3 GC分類
9.5.4 GC算法
9.5.5 分代GC
9.5.6 對象的引用
9.5.7 記憶體大小設定
9.5.8 記憶體調優工具
9.6 其他最佳化內容
9.6.1 避免使用反射
9.6.2 對象池
9.6.3 緩衝區佇列
9.6.4 使用直接記憶體
9.6.5 快取其他對象
9.6.6 協調與平衡
第10章 服務治理
10.1 服務治理概述
10.1.1 什麼是服務治理
10.1.2 服務治理架構
10.1.3 服務治理接口
10.2 服務的定義
10.2.1 服務識別
10.2.2 接口定義
10.2.3 版本管理
10.2.4 協定適配
10.2.5 服務設計
10.2.6 服務的實現
10.2.7 依賴關係管理
10.3 服務的部署
10.3.1 服務的部署方式
10.3.2 自動化部署
10.3.3 服務的熱部署
10.4 註冊與發現
10.4.1 WSDL與UDDI
10.4.2 ZooKeeper的方案
10.4.3 Eureka的方案
10.4.4 Consul的方案
10.4.5 etcd的方案
10.4.6 註冊中心集成方案
10.5 服務的控制
10.5.1 服務狀態
10.5.2 服務控制
10.5.3 服務開關
10.5.4 服務模擬
10.5.5 黑白名單
10.5.6 “踢除”服務提供者
10.6 監控與限流
10.6.1 TPS監控與限流
10.6.2 回響時間的監控
10.6.3 調用鏈的監控
10.6.4 資源監控