《系统编程 分布式应用的设计与开发》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(英)理查德·约翰·安东尼(Richard John Anthony)著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111582564
  • 页数:427 页
图书介绍:本书用系统思维讲解分布式应用的设计与开发,以“进程、通信、资源、体系结构”四个视角为核心,跨越不同学科的界限,强调系统透明性。本书在实践教学方面尤为独到:既有贯穿各章的大型游戏案例,又有探究不同系统特性的课内仿真实验;不仅提供步骤详尽的方法指导,而且免费提供专为本书开发的Workbench仿真工具和源代码。本书自成体系的风格和配置灵活的实验工具可满足不同层次的教学需求,适合作为面向实践的分布式系统课程的教材,也适合从事分布式应用开发的技术人员自学。

第1章 绪论 1

1.1 基本原理 1

1.1.1 计算机科学的传统讲授方法 1

1.1.2 本书采用的系统方法 2

1.2 网络和分布式系统在现代计算中的重要性——简明历史回顾 4

1.3 分布式系统简介 6

1.3.1 分布式系统的优势和挑战 6

1.3.2 分布的本质 7

1.3.3 分布式应用程序的软件体系结构 8

1.3.4 分布式系统与应用的质量度量指标 9

1.3.5 透明性简介 9

1.4 案例研究简介 10

1.4.1 主案例研究(分布式游戏) 11

1.4.2 附加案例研究 11

1.5 教辅材料和练习简介 12

1.6 交互式教学工具Workbench套件 14

1.7 示例代码和相关练习 14

第2章 进程视角 16

2.1 基本原理和概述 16

2.2 进程 16

2.2.1 基本概念 16

2.2.2 创建进程 16

2.3 进程调度 21

2.4 实时系统调度 46

2.5 在现代操作系统中使用的特定调度算法及其变体 56

2.6 进程间通信 57

2.7 线程:导论 62

2.7.1 一般概念 62

2.7.2 线程实现 62

2.7.3 线程调度方法 63

2.7.4 同步(顺序的)与异步(并发的)线程操作 64

2.7.5 线程带来的额外复杂性 68

2.7.6 多线程IPC举例 70

2.8 操作系统的其他角色 77

2.9 程序中使用定时器 77

2.10 进程视角的透明性 80

2.11 进程视角的案例研究 80

2.11.1 调度要求 80

2.11.2 定时器的使用 81

2.11.3 多线程需求 81

2.11.4 IPC、端口和套接字 81

2.12 章末练习 82

2.12.1 问题 82

2.12.2 基于Workbench的练习 83

2.12.3 编程练习 87

2.12.4 章末问题答案 88

2.12.5 本章活动列表 88

2.12.6 配套资源列表 89

第3章 通信视角 90

3.1 基本原理和概述 90

3.2 通信视角 90

3.3 通信技术 91

3.3.1 单向通信 91

3.3.2 请求-应答通信 96

3.3.3 双向数据传输 100

3.3.4 寻址方法 100

3.3.5 远程过程调用 103

3.3.6 远程方法调用 105

3.4 通信的分层模型 107

3.4.1 OSI模型 109

3.4.2 TCP/IP模型 110

3.5 TCP/IP协议簇 111

3.5.1 IP 112

3.5.2 TCP 113

3.5.3 TCP连接 115

3.5.4 UDP 116

3.5.5 TCP和UDP的比较 118

3.5.6 TCP和UDP的选择 119

3.6 地址 119

3.6.1 扁平与分级编址 120

3.6.2 链路层地址 120

3.6.3 网络层地址 121

3.6.4 传输层地址(端口) 123

3.6.5 熟知端口号 124

3.7 套接字 125

3.7.1 套接字API:概述 126

3.7.2 套接字API:UDP原语序列 126

3.7.3 套接字API:TCP原语序列 130

3.7.4 绑定(进程到端口) 132

3.8 阻塞和非阻塞套接字行为 135

3.8.1 非阻塞套接字行为的处理 138

3.8.2 通信死锁 138

3.9 错误检测与校正 140

3.10 应用特定协议 142

3.11 面向业务逻辑的通信整合 143

3.12 帮助组件相互定位的技术 144

3.13 通信视角的透明性需求 145

3.14 通信视角的案例研究 146

3.15 章末练习 154

3.15.1 问题 154

3.15.2 基于Workbench的练习 154

3.15.3 编程练习 157

3.15.4 章末问题答案 157

3.15.5 Workbench练习的答案/结果 158

3.15.6 本章活动列表 159

3.15.7 配套资源列表 159

第4章 资源视角 169

4.1 基本原理和概述 169

4.2 CPU资源 169

4.3 通信中的存储器资源 170

4.4 内存管理 175

4.5 资源管理 185

4.5.1 私有存储空间资源的静态分配与动态分配 185

4.5.2 共享资源 189

4.5.3 事务 190

4.5.4 锁 190

4.5.5 死锁 193

4.5.6 资源复制 196

4.6 网络资源 197

4.6.1 网络带宽 197

4.6.2 数据压缩技术 202

4.6.3 消息格式 205

4.6.4 序列化 206

4.6.5 网络链路序列 209

4.6.6 路由器与路由 210

4.6.7 通信额外开销 215

4.6.8 恢复机制及其与网络拥塞的相互作用 215

4.7 虚拟资源 217

4.7.1 套接字 218

4.7.2 端口 218

4.7.3 网络地址 218

4.7.4 资源名称 219

4.8 分布式应用程序设计对网络效率的影响 220

4.9 资源视角的透明性 220

4.10 资源视角的案例研究 220

4.11 章末练习 223

4.11.1 问题 223

4.11.2 基于Workbench的练习 223

4.11.3 编程练习 226

4.11.4 章末问题答案 226

4.11.5 Workbench练习的答案/结果 227

4.11.6 本章活动列表 228

4.11.7 配套资源列表 228

第5章 体系结构视角 229

5.1 基本原理和概述 229

5.2 体系结构视角 229

5.2.1 关注点分离 230

5.2.2 网络化与分布性 230

5.2.3 分布式系统的复杂性 231

5.2.4 分层体系结构 232

5.2.5 层级体系结构 234

5.3 异构性 234

5.3.1 异构性的定义和来源 235

5.3.2 性能异构性 235

5.3.3 平台异构性 236

5.3.4 操作系统异构性 236

5.3.5 异构性影响 238

5.3.6 软件移植 239

5.4 硬件和系统级体系结构 240

5.4.1 紧耦合(硬件)系统 240

5.4.2 松散耦合(硬件)系统 240

5.4.3 并行处理 241

5.5 软件体系结构 242

5.6 软件体系结构分类法 246

5.6.1 单层应用程序 247

5.6.2 双层应用程序 247

5.6.3 三层应用程序 248

5.6.4 多层应用程序 248

5.7 客户端-服务器 249

5.7.1 客户端和服务器的生命周期 249

5.7.2 连接的主动方和被动方 250

5.7.3 CS体系结构模型 250

5.7.4 CS模型的变体 251

5.7.5 有状态服务与无状态服务 252

5.7.6 模块化和层级CS系统 253

5.8 三层和多层体系结构 254

5.9 对等体系结构 263

5.9.1 对等应用程序的特性 264

5.9.2 对等体系结构连接的复杂性 264

5.9.3 探索对等行为 265

5.10 分布式对象 268

5.11 中间件对软件体系结构的支持 270

5.12 提供集体资源和计算资源的系统模型 271

5.12.1 集群 272

5.12.2 网格 272

5.12.3 数据中心 272

5.12.4 云 273

5.13 软件库 273

5.13.1 软件库案例 275

5.13.2 静态链接和动态链接 280

5.13.3 语言相关的特性:C/C++头文件 281

5.14 硬件虚拟化 283

5.14.1 虚拟机 283

5.14.2 Java虚拟机 284

5.15 静态和动态配置 285

5.15.1 静态配置 285

5.15.2 动态配置 286

5.15.3 上下文感知 286

5.16 分布式应用程序的非功能性需求 287

5.16.1 复制 288

5.16.2 复制的语义 291

5.16.3 复制的实现 291

5.17 分布式应用程序与网络之间的关系 299

5.18 体系结构视角的透明性 300

5.19 体系结构视角的案例研究 301

5.19.1 有状态服务器设计 301

5.19.2 游戏组件的关注点分离 302

5.19.3 游戏应用程序的物理和逻辑体系结构 302

5.19.4 游戏的透明性 303

5.20 章末练习 304

5.20.1 问题 304

5.20.2 编程练习 305

5.20.3 章末问题答案 305

5.20.4 本章活动列表 307

5.20.5 配套资源列表 307

第6章 分布式系统 309

6.1 基本原理和概述 309

6.2 透明性 309

6.2.1 访问透明性 310

6.2.2 位置透明性 311

6.2.3 复制透明性 313

6.2.4 并发透明性 316

6.2.5 迁移透明性 319

6.2.6 故障透明性 320

6.2.7 规模扩展透明性 322

6.2.8 性能透明性 323

6.2.9 分布透明性 324

6.2.10 实现透明性 324

6.3 公共服务 324

6.4 名称服务 325

6.4.1 名称服务的运行 326

6.4.2 目录服务 327

6.4.3 名称服务设计和实现的挑战 332

6.5 域名系统 333

6.5.1 域名空间 334

6.5.2 DNS实现 336

6.5.3 DNS名称服务器:权威和授权 338

6.5.4 复制 339

6.5.5 名称解析的进一步细节 340

6.5.6 DNS中的缓存 341

6.5.7 探索地址解析 341

6.5.8 反向DNS查找 344

6.6 时间服务 344

6.6.1 时间服务简介 344

6.6.2 物理时钟同步 346

6.6.3 逻辑时钟与同步 350

6.7 选举算法 352

6.7.1 操作简介 353

6.7.2 bully选举算法 354

6.7.3 ring选举算法 355

6.7.4 领导者预选 356

6.7.5 针对一个选举算法的探索 356

6.8 组通信 362

6.9 通知服务 363

6.10 中间件:机制和操作 365

6.11 中间件例子和支持技术 367

6.11.1 公共对象请求代理体系结构 367

6.11.2 接口定义语言 373

6.11.3 可扩展标记语言 375

6.11.4 JavaScript对象表示法 376

6.11.5 Web服务与REST 376

6.11.6 简单对象访问协议 378

6.12 分布式系统的确定性和不确定性 379

6.13 章末练习 380

6.13.1 问题 380

6.13.2 编程练习 380

6.13.3 章末问题答案 381

6.13.4 本章活动列表 382

6.13.5 配套资源列表 382

第7章 案例研究:融会贯通 384

7.1 基本原理和概述 384

7.2 用例说明 384

7.3 案例研究1:时间服务客户端(基于库) 385

7.3.1 学习目标 385

7.3.2 需求分析 385

7.3.3 体系结构和代码结构 386

7.3.4 关注点的分离 390

7.3.5 组件之间的耦合与绑定 390

7.3.6 设计的通信特性 391

7.3.7 实现 394

7.3.8 测试 395

7.3.9 用例的透明性 396

7.3.10 案例研究资源 397

7.4 案例研究2:事件通知服务 397

7.4.1 学习目标 398

7.4.2 需求分析 398

7.4.3 体系结构和代码结构 399

7.4.4 关注点的分离 399

7.4.5 组件之间的耦合与绑定 400

7.4.6 设计的通信特性 401

7.4.7 事件通知服务的应用程序使用场景示例 405

7.4.8 测试 407

7.4.9 事件通知服务的透明性 410

7.4.10 案例研究资源 410

7.5 分布式应用程序的优秀设计实践 410

7.5.1 需求分析 410

7.5.2 架构方面 411

7.5.3 通信方面 412

7.5.4 尽可能重用代码 412

7.5.5 为通过测试的代码和信任的代码创建库 412

7.5.6 测试方面 413

7.6 章末练习 414

7.6.1 编程练习 414

7.6.2 配套资源列表 414

索引 416