大型网站系统与Java中间件开发实践
出版信息
曾宪杰 / 电子工业出版社 / 2014-4-24 / 65.00
内容简介
本书围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构变迁;接着讲述构建 Java 中间件的相关知识;之后的几章都是根据笔者的经验来介绍支撑大型网站架构的 Java 中间件系统的设计和实践。希望读者通过本书可以了解大型网站架构变迁过程中的较为通用的问题和解法,并了解构建支撑大型网站的 Java 中间件的实践经验。对于有一定网站开发、设计经验,并想了解大型网站架构和支撑这种架构的系统的开发、测试等的相关工程人员,本书有很大的参考意义;对于没有网站开发设计经验的人员,通过本书也能宏观了解大型网站的架构及相关问题的解决思路和方案。
作者简介
曾宪杰,淘宝花名华黎,现任淘宝技术部总监。2002年毕业于浙江大学计算机系。2007年加入淘宝网平台架构团队,负责构建淘宝自主的消息中间件系统,同期主导了淘宝数据层的创建,这两个产品也是淘宝中间件中较为重要的两个。2010年下半年起开始负责整个淘宝中间件团队,帮助团队成为业内知名的Java技术团队。2012年开始从中间件走向应用系统的研发工作,2013年初负责新组建的淘宝技术部。熟悉C++和Java,在多线程、并发、网络通信及支撑大型网站的中间件领域有较多经验,对新技术有浓厚的兴趣。致力于带领团队在无线、数据、业务 平台和组件化开发方面取得突破。与林昊合著有《OSGi原理与最佳实践》一书。
目录
第1章 分布式系统介绍 1
1.1 初识分布式系统 1
1.1.1 分布式系统的定义 1
1.1.2 分布式系统的意义 3
1.2 分布式系统的基础知识 5
1.2.1 组成计算机的5要素 5
1.2.2 线程与进程的执行模式 6
1.2.3 网络通信基础知识 13
1.2.4 如何把应用从单机扩展到分布式 18
1.2.5 分布式系统的难点 31
第2章 大型网站及其架构演进过程 35
2.1 什么是大型网站 35
2.2 大型网站的架构演进 37
2.2.1 用Java技术和单机来构建的网站 37
2.2.2 从一个单机的交易网站说起 38
2.2.3 单机负载告警,数据库与应用分离 40
2.2.4 应用服务器负载告警,如何让应用服务器走向集群 41
2.2.5 数据读压力变大,读写分离吧 50
2.2.6 弥补关系型数据库的不足,引入分布式存储系统 56
2.2.7 读写分离后,数据库又遇到瓶颈 58
2.2.8 数据库问题解决后,应用面对的新挑战 60
2.2.9 初识消息中间件 63
2.2.10 总结 64
第3章 构建Java中间件 67
3.1 Java中间件的定义 67
3.2 构建Java中间件的基础知识 68
3.2.1 跨平台的Java运行环境——JVM 69
3.2.2 垃圾回收与内存堆布局 70
3.2.3 Java并发编程的类、接口和方法 72
3.2.4 动态代理 89
3.2.5 反射 91
3.2.6 网络通信实现选择 93
3.3 分布式系统中的Java中间件 94
第4章 服务框架 97
4.1 网站功能持续丰富后的困境与应对 97
4.2 服务框架的设计与实现 100
4.2.1 应用从集中式走向分布式所遇到的问题 100
4.2.2 透过示例看服务框架原型 101
4.2.3 服务调用端的设计与实现 107
4.2.4 服务提供端的设计与实现 132
4.2.5 服务升级 137
4.3 实战中的优化 138
4.4 为服务化护航的服务治理 142
4.5 服务框架与ESB的对比 146
4.6 总结 147
第5章 数据访问层 149
5.1 数据库从单机到分布式的挑战和应对 149
5.1.1 从应用使用单机数据库开始 149
5.1.2 数据库垂直/水平拆分的困难 150
5.1.3 单机变为多机后,事务如何处理 152
5.1.4 多机的Sequence问题与处理 165
5.1.5 应对多机的数据查询 168
5.2 数据访问层的设计与实现 174
5.2.1 如何对外提供数据访问层的功能 174
5.2.2 按照数据层流程的顺序看数据层设计 177
5.2.3 独立部署的数据访问层实现方式 192
5.2.4 读写分离的挑战和应对 194
5.3 总结 200
第6章 消息中间件 203
6.1 消息中间件的价值 203
6.1.1 消息中间件的定义 203
6.1.2 透过示例看消息中间件对应用的解耦 204
6.2 互联网时代的消息中间件 208
6.2.1 如何解决消息发送一致性 209
6.2.2 如何解决消息中间件与使用者的强依赖问题 218
6.2.3 消息模型对消息接收的影响 222
6.2.4 消息订阅者订阅消息的方式 229
6.2.5 保证消息可靠性的做法 230
6.2.6 订阅者视角的消息重复的产生和应对 245
6.2.7 消息投递的其他属性支持 249
6.2.8 保证顺序的消息队列的设计 252
6.2.9 Push和Pull方式的对比 257
第7章 软负载中心与集中配置管理 259
7.1 初识软负载中心 259
7.2 软负载中心的结构 261
7.3 内容聚合功能的设计 263
7.4 解决服务上下线的感知 267
7.5 软负载中心的数据分发的特点和设计 269
7.5.1 数据分发与消息订阅的区别 269
7.5.2 提升数据分发性能需要注意的问题 271
7.6 针对服务化的特性支持 272
7.6.1 软负载数据分组 272
7.6.2 提供自动感知以外的上下线开关 273
7.6.3 维护管理路由规则 273
7.7 从单机到集群 274
7.7.1 数据统一管理方案 275
7.7.2 数据对等管理方案 276
7.8 集中配置管理中心 280
7.8.1 客户端实现和容灾策略 282
7.8.2 服务端实现和容灾策略 284
7.8.3 数据库策略 285
第8章 构建大型网站的其他要素 287
8.1 加速静态内容访问速度的CDN 287
8.2 大型网站的存储支持 291
8.2.1 分布式文件系统 292
8.2.2 NoSQL 294
8.2.3 缓存系统 298
8.3 搜索系统 301
8.3.1 爬虫问题 302
8.3.2 倒排索引 302
8.3.3 查询预处理 304
8.3.4 相关度计算 304
8.4 数据计算支撑 304
8.5 发布系统 307
8.6 应用监控系统 310
8.7 依赖管理系统 312
8.8 多机房问题分析 315
8.9 系统容量规划 317
8.10 内部私有云 319
后记 321