高性能 Java 架構:核心原理與案例實戰

張方興

  • 出版商: 電子工業
  • 出版日期: 2021-08-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 256
  • 裝訂: 平裝
  • ISBN: 7121376229
  • ISBN-13: 9787121376221
  • 立即出貨

買這商品的人也買了...

相關主題

商品描述

本書是按照程序設計與架構的順序編寫的,共13章。第1章介紹學習高性能Java應瞭解的核心知識,為前置內容。第2章和第3章講解在編寫代碼之前,如何高效地為MySQL填充億級數據,並對MySQL進行基準測試,以便在之後編程時有所比較。第4章講解在編寫代碼的過程中如何優化代碼,使代碼更高效。第5章和第6章講解在寫好代碼之後如何測試並優化場景響應速度。第7章和第8章講解在程序上線執行一段時間之後如何對MySQL進行主從復制、分庫分表。第9章講解如何通過Prometheus和Grafana監控MySQL節點。第10章和第11章講解如何通過堆內緩存、堆外緩存(MapDB)和磁盤緩存解決MySQL數據庫性能不佳的問題。第12章講解如何使用分佈式鎖Redisson解決實際應用中常見的數據一致性問題。第13章簡要介紹Java中的常見架構與工具。本書不僅適合Java初學者、剛入行的編程人員,也適合對高性能、高並發感興趣的程序員。

作者簡介

張方興,多年從事Java編程工作,參與多個項目研發,曾編著《微服務分佈式基礎架構與實戰――基於Spring Boot+Spring Cloud》一書。

目錄大綱

第1 章 高性能Java 核心知識概述 1 
1.1 高性能 1 
1.2 高並發 2 
1.3 高可用 2 
1.4 算法、GC 與診斷工具  3 
1.4.1 算法  3 
1.4.2 GC  4 
1.4.3 jvmtop 4 
1.4.4 jstat 5 
1.4.5 Arthas 6 
1.5 分離術 8 
1.6 基準測試 . 8 
1.6.1 基準測試的概念 . 8 
1.6.2 基準測試的實際用途 . 9 
1.6.3 基準測試與一般性能測試的區別 . 9 
1.7 性能測試 . 9 
1.7.1 性能測試的目的 . 9 
1.7.2 性能測試著重觀察的指標 . 9 
1.7.3 性能測試存在的誤區 . 10 
1.7.4 性能測試應涵蓋的內容 . 11 
1.8 業務測試 . 12 
1.9 單元測試 . 12 
1.9.1 等價類劃分 . 13 
1.9.2 邊界值分析 . 14 
1.9.3 錯誤推測法 . 15 
1.10 數據庫概述 . 15 
1.10.1 數據庫分類 . 16 
1.10.2 數據庫測試的具體內容 . 21 
1.11 緩存的核心知識 . 22 
1.11.1 緩存的命中率 . 23 
1.11.2 緩存回收方式 . 23 
1.11.3 緩存回收策略 . 23 
1.11.4 緩存的設計模式 . 23 
1.11.5 緩存測試應涵蓋的內容 . 24 
1.11.6 實戰:秒殺系統設計方案 24 
1.12 總結——業務、性能、編程、架構相輔相成 25 

第2 章 為MySQL 填充億級數據 27 
2.1 問題描述 . 27 
2.2 問題分析與解決方案 . 27 
2.3 為MySQL 填充億級數據實戰 28 
2.3.1 INSERT INTO SELECT 方案 . 28 
2.3.2 存儲過程方案 . 32 
2.3.3 Loadfile 方案 . 33 
2.3.4 第三方解決方案 . 34 
2.4 最終結果 . 35 

第3 章 MySQL 基準測試:sysbench 與mysqlslap 36 
3.1 問題描述 . 36 
3.2 問題分析與解決方案 . 36 
3.2.1 解決方案:sysbench . 37 
3.2.2 sysbench 的命令與參數 38 
3.2.3 解決方案:mysqlslap . 40 
3.2.4 mysqlslap 的命令與參數 41 
3.3 sysbench 實戰 42 
3.3.1 使用sysbench 壓測CPU、內存和磁盤I/O 42 
3.3.2 初次使用sysbench 壓測MySQL . 46 
3.3.3 深度使用sysbench 壓測MySQL . 49 
3.4 mysqlslap 實戰 51 
3.5 其他基準壓測工具 . 56 

第4 章 代碼單元的性能測試與優化 57 
4.1 問題描述 . 57 
4.2 問題分析與解決方案 . 57 
4.3 JMH 實戰 58 
4.3.1 測試JMH 基準性能 . 58 
4.3.2 測試i++基準性能 . 60 
4.3.3 用JMH 執行多個函數的結果 62 

第5 章 Web 性能測試解決方案:JMeter 67 
5.1 問題描述 . 67 
5.2 問題分析與解決方案 . 67 
5.3 JMeter 的特點 . 68 
5.4 深入理解JMeter . 68 
5.4.1 JMeter 中的部分配置元件 . 68 
5.4.2 JMeter 參數化的實現方式 . 69 
5.4.3 JMeter 函數 . 70 
5.4.4 通過JMeter 讀取外部文件 72 
5.4.5 通過JMeter 提取上一個接口返回值 . 73 
5.5 JMeter 實戰 . 74 
5.5.1 初次使用JMeter 測試REST 接口 . 74 
5.5.2 錄制性能測試腳本 . 80 

第6 章 SQL 優化與索引優化 83 
6.1 問題描述 . 83 
6.2 問題分析與解決方案 . 83 
6.3 SQL 執行計劃 . 84 
6.4 SQL 優化與索引優化實戰 . 91 
6.4.1 SQL 索引優化 . 91 
6.4.2 分頁查詢優化 . 95 
6.4.3 慢SQL 日誌分析工具mysqldumpslow . 96 

第7 章 MySQL 主從復制 101 
7.1 問題描述 . 101 
7.2 問題分析與解決方案 . 101 
7.3 MySQL 主從復制原理 . 101 
7.4 深入理解MySQL 中的二進制日誌. 103 
7.4.1 查看MySQL 二進制日誌狀態 103 
7.4.2 log_bin 和sql_log_bin 的區別 104 
7.4.3 開啟二進制日誌 . 104 
7.4.4 查看二進制日誌文件的名稱、大小和狀態 108 
7.4.5 刪除某個日誌之前的所有二進制日誌文件 109 
7.4.6 刪除某個時間點以前的二進制日誌文件 110 
7.4.7 刪除所有的二進制日誌文件 . 111 
7.4.8 查看二進制日誌文件內容 . 111 
7.4.9 通過二進制日誌文件恢復MySQL . 116 
7.5 MySQL 主從復制實戰 . 117 
7.5.1 構建MySQL 主從復制架構 117 
7.5.2 使用Spring Boot 整合MySQL 主從復制架構 . 126 

第8 章 MySQL 分庫分表:MyCAT . 129 
8.1 問題描述 . 129 
8.2 問題分析與解決方案 . 129 
8.3 MyCAT 實戰 . 130 
8.3.1 構建MyCAT 一主多從架構 130 
8.3.2 構建MyCAT 雙主多從環境 140 
8.3.3 MyCAT 分庫——垂直拆分 142 
8.3.4 MyCAT 分表——水平拆分 144 
8.3.5 構建HAProxy + MyCAT + MySQL 高可用架構 146 

第9 章 MySQL 性能監控解決方案:Prometheus+Grafana 152 
9.1 問題描述 . 152 
9.2 問題分析與解決方案 . 152 
9.3 Prometheus 概述與適用場景 152 
9.4 時序數據庫概述與適用場景 . 153 
9.5 Grafana 概述與適用場景 154 
9.6 構建Prometheus + Grafana 監控實戰 154 

第10 章 堆內緩存解決方案:Java 堆內緩存與Guava Cache 171 
10.1 問題描述 . 171 
10.2 問題分析與解決方案 . 171 
10.3 Java 堆內緩存 . 172 
10.3.1 Java 堆內緩存原理 . 172 
10.3.2 Java 堆內緩存中的常見算法及實戰 173 
10.4 Guava Cache 實戰 . 190 
10.4.1 創建Google 的容器工廠 190 
10.4.2 屏蔽NULL 值 . 191 
10.4.3 管理字符串 . 192 
10.4.4 操作Google 的Multiset 容器 . 192 
10.4.5 操作Google 的Multimap 容器 193 
10.4.6 操作Google 的BiMap 容器 . 194 
10.4.7 操作Google 的Table 容器 . 194 
10.4.8 操作Google 的classToInstanceMap 容器 196 
10.4.9 操作Google 的RangeSet 容器 . 196 
10.4.10 操作Google 的RangeMap 容器. 198 
10.4.11 操作Google 的Guava Cache 198 

第11 章 堆外緩存與磁盤緩存解決方案:MapDB 203 
11.1 問題描述 . 203 
11.2 問題分析與解決方案 . 203 
11.2.1 堆外緩存 . 203 
11.2.2 MapDB 204 
11.2.3 實戰:初次使用MapDB 205 
11.3 MapDB 的構造原理 206 
11.4 MapDB 的使用方法 208 
11.5 MapDB 實戰 210 
11.5.1 MapDB 的序列化 210 
11.5.2 MapDB 的事務 211 
11.5.3 MapDB 的監聽器與多級緩存 212 

第12 章 基於Redis 的分佈式鎖解決方案:Redisson . 214 
12.1 分佈式鎖與Redisson 原理 . 214 
12.2 單機版超買或超賣問題描述及解決方案 216 
12.3 分佈式版超買或超賣問題描述及解決方案 218 
12.4 多線程死鎖問題描述及解決方案 . 219 
12.5 Redisson 實戰 223 
12.5.1 Redisson 的可重入鎖 223 
12.5.2 Redisson 的公平鎖 223 
12.5.3 Redisson 的聯鎖 225 
12.5.4 Redisson 的紅鎖 226 
12.5.5 Redisson 的讀寫鎖 227 
12.5.6 Redisson 的信號量 229 
12.5.7 Redisson 的分佈式閉鎖 230 

第13 章 Java 中的常見架構與工具 . 233 
13.1 自動化測試架構 . 233 
13.2 自動化持續集成部署架構 . 233 
13.3 高並發架構 . 234 
13.4 響應式編程架構 . 236 
13.5 負載均衡架構 . 238 
13.6 監控工具與監控架構 . 239 
13.7 其他工具與架構 . 241