第1章 分布式系统基础知识
* f' t4 ~( K& _/ v: \1.1 概述
) W) P" |4 ~; m, y6 m1 v1.1.1 什么是分布式系统, }9 \7 _$ g; \/ w- g3 Z/ U
1.1.2 集中式系统与分布式系统# B% n! \: G' m1 M
1.1.3 如何设计分布式系统
2 ~; m$ C$ r5 q: `/ h" j1.1.4 分布式系统所面临的挑战8 f5 f4 j/ v L/ |& q
1.2 线程% X6 }& M: J: X5 {2 j
1.2.1 什么是线程
6 N, x. m: O9 ?% d5 R& B. _* w1.2.2 进程和线程
8 J8 `% H$ M! s) d0 ]6 B, o7 w1.2.3 线程和纤程; f" I% y. J* i0 Y8 S$ O
1.2.4 编程语言中的线程对象5 G9 Y8 c" x% h* V9 k9 B
1.2.5 SimpleThreads示例
, d2 L) c' e: ~) @9 a1 j' B( a* E1.3 通信
* x; Q+ g3 Z; Z6 b8 F1 i1.3.1 网络I/O模型的演进* k1 g& ], q$ D
1.3.2 远程过程调用(RPC) ~7 d) H2 q c5 P2 ^
1.3.3 面向消息的通信
0 |- h, N! l$ q% X% J. U9 ^1.4 一致性) h! \5 X9 J8 n9 d/ p5 r- n
1.4.1 以数据为中心的一致性模型
6 J. E3 I1 U# L1 o1.4.2 以客户为中心的一致性% |7 A$ O' d$ J1 Q% G5 R& ^9 t
1.5 容错性/ v+ ^- Q o8 Y5 D, p. k' |
1.5.1 基本概念/ V& m. t# @" |6 Q; h8 V
1.5.2 故障分类* B2 F/ u: L) ^$ y9 i% H0 A3 G
1.5.3 使用冗余来掩盖故障
. d+ t: e+ b/ z2 b4 F1.5.4 分布式提交7 h4 n! X/ x( F6 e K; a
1.6 CAP理论0 A" e& I( J1 s+ d7 y( d" h J( _
1.6.1 什么是CAP理论1 I5 n( h, V2 _, l& @
1.6.2 为什么CAP只能三选二5 m3 K/ `" V; [0 `" \
1.6.3 CAP常见模型1 f8 k2 G* z& S: E9 U" O
1.6.4 CAP的意义
8 w) d# f; L' b2 S1.6.5 CAP发展% ]0 @& A) l. b0 i, ]. u# M
1.7 安全性! v2 V( J) G; x4 I7 F
1.7.1 基本概念
& ]2 b1 d2 H: Q$ b! }6 h1.7.2 加密算法4 ~* @4 \& x# F0 v7 Z8 Z8 M
1.7.3 安全通道7 j0 ^: H# {; ~/ Q/ _: Q% U' O5 d9 U
1.7.4 访问控制
( f# u( H! O2 `% @: l7 T( l7 w" b1.8 并发
2 ?4 c: E5 @( |: R* J1.8.1 线程与并发& |- C5 T. `7 D y( J
1.8.2 并发与并行0 F8 R; u3 Z$ C5 Q
1.8.3 并发带来的风险
. ^( j# S0 b: q1.8.4 同步(Synchronization)5 }# V$ Y0 P- v5 w
1.8.5 原子访问(Atomic Access)7 y2 m1 B: K# {3 {' x
1.8.6 无锁化设计提升并发能力
. l1 w$ j: r8 p6 _ s1.8.7 缓存提升并发能力/ H; E' {& @6 V5 [3 r0 `: I
1.8.8 更细颗粒度的并发单元
/ ]: T. L6 `. Y& D第2章 分布式系统架构体系
5 i+ q- H7 w+ c& Y3 y7 N9 _2.1 基于对象的体系结构
+ W. z7 v" F( ] T4 U9 f2.1.1 分布式对象3 x9 [+ f5 z6 ?% T3 O+ g8 s3 V0 G, U
2.1.2 Java RMI
v, t5 D: U# i2.2 面向服务的架构(SOA)
+ S& a- N# H5 v. u. {2.2.1 SOA的基本概念. v1 ?: v) B, K% v) _3 [% ?5 ^. a$ j& N
2.2.2 基于Web Services的SOA0 a* @3 j3 V. a/ s% k) ], h b
2.2.3 SOA的演变# I" F! T3 D$ j
2.3 REST风格的架构
! w& T& Y/ l0 O) ]* O: ^2 c* B) W2.3.1 什么是REST
+ Y' |0 g+ Y+ ]0 i5 N0 m2.3.2 REST有哪些特征
1 `4 J! N5 K9 g' A5 h2.3.3 Java实现REST的例子$ I; C9 s' m' y
2.3.4 REST API实践
. l9 e" @1 h' \8 u2.4 微服务架构(MSA)
3 ?' L& N3 H9 }# K3 Q7 a2.4.1 什么是MSA
$ @+ g. b( G- Q& E" \5 S5 K/ q2.4.2 MSA与SOA/ q! E2 ?. ?& f( m
2.4.3 何时采用MSA
3 `- F4 G" I0 o2 ^ C! |( {2.4.4 如何构建微服务/ X4 z! l2 w) }: W" M* ~( f: W
2.5 容器技术# L* _0 c' x* Z0 f% o3 M* _* Q
2.5.1 虚拟化技术1 _2 s% y2 k, F) s& Q7 p7 U2 t
2.5.2 容器与虚拟机3 H6 @5 ?3 z) v. G3 o
2.5.3 基于容器的持续部署# ?' n- y* ?7 a- w; y
2.6 Serverless架构# h. b9 @# A* W( O: H5 h; \1 b
2.6.1 什么是Serverless架构
3 v' w$ O3 B8 a2.6.2 Serverless典型的应用场景
7 S' ^ v" `; x8 @% j2.6.3 Serverless架构原则' e& s/ I" H% [- V0 n& Z
2.6.4 例子:使用Serverless实现游戏全球同服) Y/ f3 b! `( T" ]
第3章 分布式消息服务
& D+ T! }0 e7 B1 E3.1 分布式消息概述' [, n6 O1 d1 G: j, h$ [
3.1.1 基本概念
) A0 ^" ] u1 J% p3.1.2 使用场景7 `6 ]$ F0 x) H- W
3.1.3 常用技术
/ i( ]0 k" B- m" K3.2 Apache ActiveMQ
6 H# I$ I) S. M' B3.2.1 例子:producer-consumer2 |3 G+ X S: L) c8 `) d+ b3 r, z8 m
3.2.2 例子:使用JMX来监控ActiveMQ: f; n# J5 u5 E, f) h. S" `! c
3.2.3 例子:使用Java实现producer-consumer
L6 s: K# x/ D! k3.3 RabbitMQ
1 S# p' J& y8 t+ E+ Y3.3.1 例子:Work Queues
' f3 Z Z, d- O+ g7 m, \3.3.2 例子:Publish/Subscribe
' v( R% N0 ?( a: F& u! h3.3.3 例子:Routing
$ l- `0 _) J$ R. H, p" l3.3.4 例子:Topics
4 u7 p) z* I4 b( a% y# M5 s) r2 G/ ]3.3.5 例子:RPC- n. b7 ]) v h3 P) {, d
3.4 Apache RocketMQ; e2 D, `! J# U) @0 v$ y" d
3.4.1 例子:使用Java实现producer-consumer2 N4 r/ v% h5 l3 L5 b
3.4.2 RocketMQ实践' a: y. x5 L! t6 `: t' c% J6 @) Y
3.5 Apache Kafka2 K& m! ^& j) T1 K
3.5.1 Apache Kafka的核心概念
& B2 c% e4 z: b( D, ^% t$ J3.5.2 Apache Kafka的使用场景
8 L, Q9 { |) E( V; a& q: i5 A9 W3.6 实战:基于JMS的消息发送和接收6 \& j- R' R# I0 c6 _0 w
3.6.1 项目概述
, m" \" ^' K: J" ^) R6 E: B3.6.2 项目配置# C' d4 G/ c& R- M
3.6.3 编码实现
& T j7 i" e& S# R( ^- U. ^3.6.4 运行1 I) d) R0 v) S `( I6 s. {5 W
第4章 分布式计算
" P; U t6 M1 a2 X4.1 分布式计算概述
: N1 ]6 U2 Y6 ?6 f' P" s7 i4.1.1 使用场景
4 L, z, m4 X1 c7 I4 a) s4.1.2 常用技术
. E7 i" d+ D7 Z' y3 a; z3 n* n0 ?4.2 MapReduce
- `/ i# w" V& S2 Q6 J3 `4.2.1 MapReduce简介
2 L- R1 K! f% M; D4.2.2 MapReduce的编程模型
, ~, t% O) o' k% t5 l0 h% |4.2.3 MapReduce接口实现
: Y1 q- [* |6 l4.2.4 MapReduce的使用技巧% N! R2 [" j* n' O0 q5 u, M/ @
4.3 Apache Hadoop9 N6 l3 N5 Z; m* A$ E
4.3.1 Apache Hadoop的核心组件
6 g+ Q3 \* \9 [( _* A) M4.3.2 例子:词频统计WordCount程序2 z( \6 l+ O; L/ P( K
4.4 Spark
! e! b/ A8 T2 y4 |) A! a4.4.1 Spark简介0 B/ M% D* c1 k1 r
4.4.2 Spark与Hadoop的关系
9 C; k/ n2 U# q9 t; b4.4.3 Spark 2.0的新特性0 A$ k& P( Z' F' d( P3 j6 f1 v
4.4.4 Spark集群模式
% n3 v" y# C7 [" `6 f4.5 Mesos
) v) f! Y8 a; O2 ?4.5.1 Mesos简介% |3 u; r1 p+ D+ n) I2 a6 y K
4.5.2 设计高可用的Mesos framework* k3 V/ J7 f) s! S3 }5 s
4.6 实战:基于Spark的词频统计/ l. p- Y8 J5 _) V9 {6 h
4.6.1 项目概述' o/ }% u! Z% r& ^: y
4.6.2 项目配置
. z. V% s d. \' N4.6.3 编码实现, Z7 m, Y% D4 Z2 \
4.6.4 运行
1 t$ }# z: {2 \$ y第5章 分布式存储+ X8 i' C% B; T: e
5.1 分布式存储概述( W0 W( [6 w- ^; @- ?: M& a* G6 z
5.1.1 使用场景9 l( B* \0 E/ {3 `5 R5 ^
5.1.2 常用技术% o; l- T4 v# \" l7 A' d$ P
5.2 Bigtable3 L4 B7 T# n# Q8 K. `4 Z5 A
5.2.1 Bigtable的数据模型
* W% a4 X, B/ G' J# w5.2.2 Bigtable的实现& d6 f1 I8 \' c) V7 J1 t
5.2.3 Bigtable的性能优化
" K; Y' J: |+ X: D2 u; w, V1 ^5.3 Apache HBase
' v: u7 a2 \; ~5.3.1 Apache HBase的基本概念7 J& o+ G5 [( N' ~& Z5 d' P
5.3.2 Apache HBase的架构- q! F9 H+ k h* S3 r/ ~
5.4 Apache Cassandra
" K* l* {: W! ?1 |5.4.1 Apache Cassandra简介
- q( G/ b4 `! ?# T5 J5.4.2 Apache Cassandra的应用场景
) o, F* C, h2 N i: I: s5.4.3 Apache Cassandra的架构和数据模型& U0 t. ]0 X( F( D
5.4.4 用于配置Apache Cassandra的核心组件4 _" F4 m k, L6 ~
5.5 Memcached
( x1 m& d- i% ^7 }/ L+ O, m5.5.1 Memcached简介
4 d1 P2 { ~7 v( I$ W& A5.5.2 Memcached的架构
' C) G. |& \$ J5.5.3 Memcached客户端! }8 k" R8 P ?
5.6 Redis2 L5 \2 g. h1 E8 ?
5.6.1 Redis简介0 M( B, R9 W$ P k+ S% F, O5 E9 s
5.6.2 Redis的下载与简单使用, {" S. \4 l7 p7 ]0 {, P3 T
5.6.3 Redis的数据类型及抽象7 `' u5 D$ t! d! @) i
5.7 MongoDB) h$ ]" m x) J2 a
5.7.1 MongoDB简介
) ]! }- e5 H/ c' z+ n/ X5.7.2 MongoDB核心概念
* |: O& g: b7 z9 F2 A; E8 W5.7.3 MongoDB的数据模型
% \) r! H+ a k. Q5.7.4 示例:Java连接MongoDB
0 q/ a6 Q4 i* N" K, F5.8 实战:基于Redis的分布式锁
% k' w: m6 ] |1 W4 X5.8.1 项目概述
% i+ i" Y2 w. e% E5.8.2 项目配置
% |8 A9 ~' f; l$ p6 z- T5.8.3 编码实现# ?; f" Q9 i; y8 `4 F6 y& h
5.8.4 运行5 I" v( N0 K( L1 ~, z
第6章 分布式监控
' R8 T6 W& {4 n: P5 k3 w5 V- g: n6.1 分布式监控概述
$ d' Y5 u. K- u6.1.1 使用场景
& R- ~2 ?: }* h# o4 r$ `' |7 i6.1.2 常用技术( w: W5 e1 j- o5 X6 W
6.2 Nagios
( W5 s: U2 P* g3 E6.2.1 Nagios监控3 T4 Y7 h+ E0 [4 h& v% A [
6.2.2 Nagios插件
8 G! h% j% j9 I/ J7 a3 C6.3 Zabbix
( `8 R, q& _- }- v0 l% h6.3.1 Zabbix对容器的支持
8 Y- S! p' F) c6 C: m3 D1 O6.3.2 Zabbix的基本概念, X* M' Q2 D6 u: |8 r$ V
6.4 Consul
7 ^8 |1 f* ^- s7 v6.4.1 Consul架构
) o4 c& T; {) Z: o f6.4.2 Consul agent
4 n/ R9 D* J# [7 G& H3 l2 X/ w6.5 ZooKeeper& I! |) V* J' N6 f
6.5.1 ZooKeeper简介
/ Q6 N% T& K! r1 K6.5.2 ZooKeeper内部工作原理
# w) j, D2 S% d" ~6.5.3 例子:ZooKeeper实现barrier和producer-consumer queue2 f% l" t4 \! h+ A, k
6.6 实战:基于ZooKeeper的服务注册和发现
1 [ R1 Q( ?5 J" }; k3 z' O. J: ]6.6.1 项目概述
$ ]6 _6 i( M) t2 S- ]" R7 G$ F6.6.2 项目配置3 X( ]7 N: o" P! Z }
6.6.3 编码实现8 \: m( S% k; I% h! i+ `6 H( s
6.6.4 运行- y! j/ ?1 ?! B
第7章 分布式版本控制系统) `* ?5 F5 A& u; a+ N
7.1 分布式版本控制系统概述
0 S; d4 w/ n5 A. o& F/ N; m3 p9 M7.1.1 集中式与分布式
3 K, ^- V, l6 j- ~8 ?7.1.2 分布式版本控制系统的核心概念# I$ O9 r6 p$ g9 q) \, |
7.2 Bazaar
, R/ q) A6 B( k! _7.2.1 Bazaar的核心概念
+ r3 m& n8 l2 t3 ~% I2 [7.2.2 Bazaar的使用- N( T: F5 `! U8 d, p9 @8 t
7.3 Mercurial) d P" z# Y" ?
7.3.1 Mercurial的核心概念
5 q' ?0 H( p8 Y1 v7.3.2 Mercurial的使用! M% ~- f/ m2 B2 M+ w; s7 d+ n
7.4 Git5 t6 A$ g j. I/ k8 F
7.4.1 Git的基础概念
5 Z4 R$ }9 l6 s+ E% }' f; F. }. R7.4.2 Git的使用- J. s8 N/ p) I" B S: W
7.5 Git Flow—团队协作实践5 C& k' [! {4 I4 k1 o8 Y& l
7.5.1 分支定义
1 F9 t$ n8 V. L% c* `7.5.2 新功能开发工作流
( O _! P0 d- ~" h# B7.5.3 Bug修复工作流0 K# Z3 u4 @6 d3 k
7.5.4 版本发布工作流
5 }! `; ], d p& d7 C第8章 RESTful API、微服务及容器技术
2 F( i& x7 K) [' {! |! Q) L% j8.1 Jersey" ]2 G/ g' E7 K/ z) S- B* P
8.1.1 Jersey简介$ u- [3 K* _' V7 |' b* _
8.1.2 Jersey的模块和依赖
- G) j! ^: q L. f" g: @2 D* D8.1.3 JAX-RS核心概念
8 Y3 ~7 T' P* o; |8.1.4 例子:用SSE构建实时Web应用6 j. M' ~# k! E/ A8 k+ ^
8.2 Spring Boot( i" T5 c7 `4 m U H
8.2.1 Spring Boot简介
; I& H- X' U4 C+ }8 s' X8.2.2 Spring Boot的安装1 j; L7 u2 d# o" T4 e
8.2.3 Spring Boot的使用" ]/ V1 y$ O' { d
8.2.4 Spring Boot的属性与配置
# b) M$ Q1 D/ E3 d/ l8.3 Docker java8.com
8.3.1 Docker简介
) _( n& c4 [4 O" ~( Y* ]8.3.2 Docker的核心组成、架构及工作原理4 Q0 ~- P' z4 E- F
8.3.3 Docker的使用( P8 n" a! r( @1 P7 S" s
8.4 实战:基于Docker构建、运行、发布微服务
; R2 {; `. d$ M% ?; ?8.4.1 编写微服务( b* |3 L$ Z! X9 h
8.4.2 微服务容器化0 p* I6 D# ]1 P5 X2 T2 e
8.4.3 构建Docker image
9 }: Q/ h/ T0 {: L' m8.4.4 运行image
: V2 W' O& y+ X: C8 b6 ]1 }; _$ N8.4.5 访问应用
) i' @3 f U( a8.4.6 发布微服务
5 |5 L. S8 g( L& m
8 |" G2 g" C: V3 G2 C/ A( G4 D