首页>参考读物>计算机科学与技术>计算机网络

大型网站架构实战
作者 : 梁嘉祯 著
出版日期 : 2022-01-25
ISBN : 978-7-111-70059-3
定价 : 99.80元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 352
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书从大型网站架构的发展历程出发,逐步深入介绍大型网站架构的各个部分,并在最后配合实战案例,详细介绍大型网站架构需要关注的问题及其解决方法,让读者不但可以消除对大型网站架构的神秘感,而且还可以对大型网站架构有更加深入的理解。
本书共10章,分为4篇。第1篇“大型网站架构的发展与面临的挑战”,主要介绍大型网站业务和架构的发展,以及大型网站架构面临的挑战;第2篇“大型网站架构的技术细节”,主要介绍前端架构、后端架构、云计算服务架构和整体架构等内容;第3篇“大型网站架构实战案例”,主要介绍单点登录系统架构设计、媒体库管理系统架构设计和直播系统架构设计的相关内容;第4篇“未来架构的设想”,主要介绍作者对未来架构的一些设想和看法。
本书从实际问题出发,问题与技术相呼应,一步一步地剖析和还原大型网站架构设计,内容通俗易懂,实用性强,特别适合大型网站架构的入门与进阶读者阅读,也适合其他对大型网站架构和云计算感兴趣的读者阅读。

图书特色

资深架构师全面总结多年积累的实际项目架构经验,东软和前阿里巴巴等公司三位资深架构师力荐,深入剖析和还原大型网站架构设计过程,并归纳架构设计的思想与核心问题

配套资源获取方式
本书涉及的源代码等配套资源需要读者自行下载。请在机工新阅读网站(www.cmpreading.com)上搜索到本书,然后单击“资料下载”按钮,即可在本书页面上找到下载链接进行下载。

图书前言

  互联网的发展速度超出了大部分人的预期。淘宝等购物平台、斗鱼等直播平台、抖音等短视频平台和头条号等自媒体平台像雨后春笋般相继涌现,它们都属于大型网站平台。随着互联网的持续发展,未来一定还会出现更多的大型网站。成功的大型网站虽然是凤毛麟角,但是它们会成为行业的标杆,会拉动大型网站的需求,使得大型网站带来的项目机会越来越多。
  大型网站不仅要处理复杂、凌乱且时刻变化的业务需求,还要应对大量的用户访问和数据处理;而且随着近些年云计算的兴起,大型网站越来越复杂。因此,搭建一个大型网站不再是几个软件工程师就能完成的。大型网站要有更加全面的架构设计、更加复杂的功能和更加强大的处理能力,其对项目开发人才的要求也越来越高。理解大型网站架构是应聘互联网开发岗位的必要条件,也是一个加分项,更是成为架构师的前提。
  在笔者职业生涯的开端,曾参与了一个合同额每年亿元级的软件项目。该项目有一个独特的架构,可以让开发人员近似千人一面地完成开发工作,加之该项目有严谨的项目管理流程,使得它迭代十几年至今。之后笔者参与了一个不太成功的大型网站项目(合同额千万元级),其程序凌乱不堪,即使工程师们各显神通,最后成本还是严重超标,运维成本也非常高。
  那个不太成功的大型网站项目采用了当时最新的前端框架Angular 2和微服务框架,高并发和高可用性设计等也都采用当时较为流行的方案,但开发出来的软件质量却很差。这让笔者深深地体会到,仅靠框架和技术很难保证软件的质量,高质量的软件还依赖于良好的架构设计。架构设计不仅要选取现成的软件工具,而且还需要思考软件本身的结构,另外还需要约束软件开发的过程。
  对大型网站来说,想在项目之初就设计好架构,这确实是一件十分困难的事情。因为一个成熟的大型网站系统是非常复杂的,其涉及的问题也非常多,再加上工期等客观条件的限制,导致架构设计很多时候是滞后于开发的,开发过程也很难被约束。
  其实,在项目之初并不需要把大型网站整个架构都设计好,只需要解决一些关键问题即可,其他问题可以在项目迭代的过程中解决。那么,大型网站架构需要解决哪些关键问题呢?其实所谓关键问题都是经验之谈。解决好这些关键问题,在能提高项目质量的同时还能降低项目的成本。
  为了帮助读者全面、系统地学习大型网站架构设计的相关知识,笔者编写了本书,给出了自己对相关问题的思考,并对多年的从业经验进行了总结,相信对相关读者会有所帮助。
本书特色
* 内容新颖:讲解时涉及的大部分软件都采用最新版本(截至完稿时)。
* 内容完善:全面介绍大型网站架构设计的发展和面临的挑战,以及前端架构、后端架构、云计算服务架构和整体架构的技术细节,并详解3个典型的大型网站架构设计案例,最后对笔者所理解的未来架构设计做必要介绍。
* 案例典型:详细介绍单点登录系统、媒体库管理系统和直播系统的架构设计。
* 问题驱动:从问题出发,问题与技术相对应,一步步地剖析和还原大型网站架构设计,帮助读者更好地理解相关的知识。
* 经验总结:全面归纳和总结笔者经历的几个大型网站项目的实践经验。
* 图文并茂:提供160余幅示意图帮助读者更加直观地理解相关内容。
* 实用性强:结合具体示例讲解知识点,便于读者理解和掌握。
本书内容
  第1篇 大型网站架构的发展与面临的挑战
  本篇涵盖第1、2章,主要介绍大型网站架构的发展与面临的挑战。架构分为业务架构与技术架构,本篇从宏观上介绍业务架构与技术架构,以及它们之间的关系。
  第2篇 大型网站架构的技术细节
  本篇涵盖第3~6章,详细介绍大型网站架构的技术细节。本篇把大型网站架构细分为前端架构、后端架构、云计算服务架构和整体架构4个部分,分别介绍每部分需要解决的关键问题及其解决方法。本篇结合实际项目介绍相关知识点,以帮助读者更加深刻地理解大型网站架构。
  第3篇 大型网站架构实战案例
  本篇涵盖第7~9章,选取几个较为通用且典型的网站系统作为案例,还原这些系统的架构设计,以帮助读者进一步深入理解大型网站架构。
  第4篇 未来架构的设想
  本篇涵盖第10章,介绍笔者对未来架构的设想。本篇内容虽然是一家之言,但是笔者认为,架构设计是开放的,软件世界是无限包容的,其美好是从想象开始的。
读者对象
* 网站系统架构师;
* 网站系统开发人员;
* 云计算开发人员;
* 网站系统运维人员;
* 网站开发项目经理;
* 对大型网站架构感兴趣的人员;
* 各类院校学习网站架构的学生;
* 专业培训机构的相关学员。
本书配套资源
  本书涉及的源代码需要读者自行下载,请在机工新阅读网站(www.cmpreading.com)上搜索到本书,然后单击“资料下载”按钮,即可在本书页面上找到下载链接进行下载。
意见反馈
  鉴于笔者的水平所限,书中可能还存在一些疏漏,敬请各位读者指正。阅读本书时如果有疑问,可以发送电子邮件到yiigaa@126.com或hzbook2017@163.com以获得帮助。
  
梁嘉祯

上架指导

计算机\网络

封底文字

本书赞誉
本书提出了“顶层架构”的概念。顶层架构关心的是如何编写代码,以及如何让软件质量和生产效率最大化等问题,这的确是一个很好的概念。大型网站项目的失败往往不是因为选用了不够好的软件工具,而是没有约束好开发过程。很高兴看到我与作者多次讨论过的这个概念终于被完整、系统地总结了出来,相信会对相关读者有很大的启发。
——东软集团事业部首席架构师 许庆

想要设计好大型网站架构,不仅需要理解其包含的庞杂内容,而且还需要拥有大量的项目经验以便建立相关的知识体系。本书的可贵之处在于,作者结合自己积累的丰富的项目经验,系统地归纳出大型网站架构的知识体系。这使得本书不仅适合刚入行的初级软件工程师阅读,而且还适合中高级软件工程师阅读。
——蒙蒂无服务器基金会CEO/前阿里巴巴Serverless架构师 储静辉

正如作者常说的:“不要把手段当成目的,技术是为了解决问题而存在的,单纯地去讨论一项技术是没有意义的”。本书没有用罗列的方式介绍每一项被大多数技术人员认为是必备技能的技术,而是从问题出发,抽丝剥茧地分析大型网站架构的核心问题,并提出相应的解决方案。本书对大型网站架构剖析得非常透彻,就连刚入行的软件工程师也能读懂,这的确需要大量的项目经验和深厚的理论功底才能做到。
——均联智行高级架构师 姜国际

作者简介

梁嘉祯 著:梁嘉祯 架构师,自由职业者。曾任职于东软集团,从事Web全栈(前端、后端和云计算)开发,并参与项目架构设计。曾参与过多个合同额亿级和千万级的国内外软件项目,作为架构师或项目经理主导过多个合同额从百万级到五百万级的网站系统项目。现为自由职业者,提供架构咨询服务。本书写作过程中为一个合同额五百万级的社区网站系统提供全部的架构服务。深受本科专业涉及的工业、机械和化学思想的影响,持续思考和实践工业化项目过程、机械化软件结构和化学化编码呈现。拥有三套自主研发的前端、后端和云计算架构,经历过多个项目实践,能让大型项目缩减近一半的人力成本。

图书目录

前言
第1篇 大型网站架构的发展与面临的挑战
第1章 大型网站业务和架构的发展 2
1.1 大型网站的业务演变 2
1.1.1 静态网站的出现 2
1.1.2 动态网站的出现 3
1.1.3 大型网站系统的出现 4
1.1.4 大型云计算网站系统的出现 6
1.1.5 大型网站的未来 7
1.2 大型网站架构的发展 8
1.2.1 动态网页时代 8
1.2.2 B/S架构网站的崛起 8
1.2.3 CDN加速网站响应 10
1.2.4 应用和数据分离 11
1.2.5 非关系型数据库和关系型数据库并存 11
1.2.6 集群化 12
1.2.7 分布式趋势 13
1.2.8 微服务 15
1.2.9 大型网站架构的未来 15
1.3 小结 16
第2章 大型网站架构面临的挑战 17
2.1 大型网站架构的基本问题 17
2.1.1 业务架构面临的挑战 17
2.1.2 技术架构面临的挑战 20
2.1.3 业务架构和技术架构的相互成全 21
2.2 业务架构的基本思路 21
2.2.1 递进思想 22
2.2.2 版本计划逐渐完善 24
2.2.3 持续优化,推陈出新 25
2.3 技术架构的基本思路 26
2.3.1 分层思想 26
2.3.2 IaaS、PaaS和SaaS分层管理 27
2.3.3 前端、后端和云计算服务分层开发 28
2.4 大型网站技术架构的核心问题 30
2.4.1 性能问题 30
2.4.2 可用性问题 30
2.4.3 伸缩性问题 31
2.4.4 扩展性问题 31
2.4.5 安全性问题 32
2.5 小结 32
第2篇 大型网站架构的技术细节
第3章 前端架构 34
3.1 前端的工作原理 34
3.1.1 Web服务器搭建 34
3.1.2 构造一个简单的网页 38
3.1.3 前端网页的工作原理 41
3.2 前端架构需要解决的问题 47
3.2.1 规整化概述 47
3.2.2 适配性和兼容性概述 49
3.2.3 模块化概述 50
3.2.4 单页应用概述 51
3.3 规整化 53
3.3.1 编码规范 53
3.3.2 JavaScript库 59
3.3.3 组件工具箱 61
3.3.4 框架 64
3.4 适配性和兼容性 71
3.4.1 响应式布局 71
3.4.2 整体布局 73
3.4.3 模块布局 77
3.4.4 适配性测试 78
3.4.5 浏览器兼容 79
3.5 模块化 81
3.5.1 模块化的方法 82
3.5.2 现今前端模块化的困局 86
3.5.3 自研框架Trick 87
3.6 单页应用 88
3.6.1 单页应用用到的方法 88
3.6.2 单页应用的发展趋势 90
3.7 小结 91
第4章 后端架构 92
4.1 后端的工作原理 92
4.1.1 后端开发语言及框架 92
4.1.2 搭建Web应用服务器 94
4.1.3 构造一个简单的后端应用程序 105
4.1.4 后端应用程序的工作原理 114
4.2 后端架构需要解决的问题 120
4.2.1 规整化概述 121
4.2.2 数据库概述 122
4.2.3 非关系型数据库概述 122
4.2.4 整合其他应用程序 123
4.3 规整化 124
4.3.1 接口设计 124
4.3.2 编码规范 132
4.3.3 集中配置 140
4.3.4 Cookie和Session 145
4.3.5 应用拆分和协调 148
4.3.6 日志 149
4.3.7 自研框架Once 159
4.4 数据库 161
4.4.1 数据库对比 161
4.4.2 数据库的工作原理 162
4.4.3 数据库设计 164
4.4.4 数据库操作框架 168
4.4.5 数据库事务 175
4.4.6 分布式事务 178
4.5 非关系型数据库 188
4.5.1 键值存储非关系型数据库 188
4.5.2 列存储非关系型数据库 190
4.5.3 文档型非关系型数据库 191
4.5.4 图形非关系型数据库 191
4.6 小结 192
第5章 云计算服务架构 193
5.1 云计算服务的工作原理 193
5.1.1 云计算服务的应用场景 193
5.1.2 云计算开发语言及其框架 194
5.1.3 云计算服务软件的工作原理 195
5.2 云计算服务架构需要解决的问题 200
5.2.1 云计算服务软件基础框架构建概述 201
5.2.2 任务池与指令池的搭建和使用概述 202
5.2.3 进度数据池与状态数据池的搭建和使用概述 202
5.2.4 监控软件的构造概述 202
5.3 云计算服务软件基础框架的构建 203
5.3.1 进程与线程 203
5.3.2 线程同步 205
5.3.3 线程模型 211
5.3.4 软件结构 218
5.4 任务池与指令池的搭建和使用 219
5.4.1 消息队列 219
5.4.2 RabbitMQ消息队列 221
5.4.3 任务池的搭建与使用 232
5.4.4 指令池的搭建与使用 234
5.5 进度数据池与状态数据池的搭建和使用 237
5.5.1 公共数据空间 237
5.5.2 Redis数据库 239
5.5.3 进度数据池的搭建与使用 247
5.5.4 状态数据池的搭建与使用 248
5.6 监控软件的构造 249
5.6.1 软件结构 249
5.6.2 Supervisor监控软件 253
5.7 小结 254
第6章 整体架构 255
6.1 网站系统的基本结构 255
6.1.1 前端部分的基本结构 255
6.1.2 后端部分的基本结构 257
6.1.3 云计算服务部分的基础结构 258
6.1.4 网站系统的基本结构 259
6.2 整体架构需要解决的问题 260
6.2.1 性能概述 260
6.2.2 可用性概述 260
6.2.3 伸缩性概述 261
6.2.4 扩展性概述 261
6.2.5 安全性概述 261
6.3 性能 262
6.3.1 性能指标 262
6.3.2 压力测试 266
6.3.3 性能调优的基本思路 271
6.3.4 服务器性能调优 274
6.3.5 Nginx调优 280
6.3.6 CDN加速 283
6.3.7 浏览器访问页面的过程优化 284
6.3.8 Tomcat调优 285
6.3.9 缓存与静态文件 287
6.3.10 数据库性能优化 288
6.3.11 数据库集群 289
6.3.12 分布式文件系统 293
6.3.13 集群部署与分布式部署 294
6.4 可用性 297
6.4.1 服务器的定期维护与监控 297
6.4.2 服务器热备份 298
6.4.3 日志机制 299
6.4.4 环境分离与灰度发布 299
6.5 伸缩性 300
6.5.1 伸缩指标与伸缩策略 300
6.5.2 动态弹性伸缩的局限 300
6.6 安全性 301
6.6.1 安全堡垒机 301
6.6.2 接口鉴权 302
6.6.3 SQL盲注 302
6.6.4 跨域 303
6.7 小结 305
第3篇 大型网站架构实战案例
第7章 单点登录系统架构设计 308
7.1 单点登录系统的关键问题 308
7.1.1 为什么需要单点登录系统 308
7.1.2 单点登录系统需要解决的关键问题 309
7.2 单点登录系统的详细架构设计 310
7.2.1 统一的登录与注册入口 310
7.2.2 与其他子系统共享用户登录信息 311
7.2.3 集中管理用户的基本信息 312
7.3 小结 313
第8章 媒体库管理系统架构设计 314
8.1 媒体库管理系统的关键问题 314
8.1.1 为什么需要媒体库管理系统 314
8.1.2 媒体库管理系统需要解决的关键问题 315
8.2 媒体库管理系统的详细架构设计 315
8.2.1 统一的媒体文件上传入口和资源选择机制 316
8.2.2 媒体文件的删除机制 317
8.2.3 提供自动处理媒体文件等功能 318
8.3 小结 319
第9章 直播系统架构设计 320
9.1 直播系统的关键问题 320
9.1.1 为什么需要直播系统 320
9.1.2 直播系统需要解决的关键问题 321
9.2 直播系统的详细架构设计 321
9.2.1 明确直播场景 321
9.2.2 基础系统架构 322
9.2.3 直播流接收 323
9.2.4 直播流处理 323
9.2.5 直播观看 325
9.3 小结 326
第4篇 未来架构的设想
第10章 未来架构 328
10.1 理解架构 328
10.1.1 架构是什么 328
10.1.2 顶层架构 332
10.1.3 架构与技术 333
10.2 软件行业的发展 334
10.2.1 软件行业的现状 334
10.2.2 软件行业的发展方向 334
10.2.3 不断发展的结局 334
10.3 未来架构的方向 335
10.3.1 人力效率增加 335
10.3.2 人力资本转化成物力资本 336
10.3.3 物力资本汇聚成生态 337
10.4 小结 338

教学资源推荐
作者: Larry L. Peterson ; Bruce S. Davie
作者: Gary R.Wright,W.Richard Stevens
作者: [美]詹姆斯·F. 库罗斯(James F. Kurose)基思·W. 罗斯(Keith W. Ross) 著
参考读物推荐
作者: 何洁 等编著
作者: Christopher Ditto
作者: 亢少军 编著