前言
互联网的发展速度超出了大部分人的预期。淘宝等购物平台、斗鱼等直播平台、抖音等短视频平台和头条号等自媒体平台像雨后春笋般相继涌现,它们都属于大型网站平台。随着互联网的持续发展,未来一定还会出现更多的大型网站。成功的大型网站虽然是凤毛麟角,但是它们会成为行业的标杆,会拉动大型网站的需求,使得大型网站带来的项目机会越来越多。
大型网站不仅要处理复杂、凌乱且时刻变化的业务需求,还要应对大量的用户访问和数据处理;而且随着近些年云计算的兴起,大型网站越来越复杂。因此,搭建一个大型网站不再是几个软件工程师就能完成的。大型网站要有更加全面的架构设计、更加复杂的功能和更加强大的处理能力,其对项目开发人才的要求也越来越高。理解大型网站架构是应聘互联网开发岗位的必要条件,也是一个加分项,更是成为架构师的前提。
在笔者职业生涯的开端,曾参与了一个合同额每年亿元级的软件项目。该项目有一个独特的架构,可以让开发人员近似千人一面地完成开发工作,加之该项目有严谨的项目管理流程,使得它迭代十几年至今。之后笔者参与了一个不太成功的大型网站项目(合同额千万元级),其程序凌乱不堪,即使工程师们各显神通,最后成本还是严重超标,运维成本也非常高。
那个不太成功的大型网站项目采用了当时最新的前端框架Angular 2和微服务框架,高并发和高可用性设计等也都采用当时较为流行的方案,但开发出来的软件质量却很差。这让笔者深深地体会到,仅靠框架和技术很难保证软件的质量,高质量的软件还依赖于良好的架构设计。架构设计不仅要选取现成的软件工具,而且还需要思考软件本身的结构,另外还需要约束软件开发的过程。
对大型网站来说,想在项目之初就设计好架构,这确实是一件十分困难的事情。因为一个成熟的大型网站系统是非常复杂的,其涉及的问题也非常多,再加上工期等客观条件的限制,导致架构设计很多时候是滞后于开发的,开发过程也很难被约束。
其实,在项目之初并不需要把大型网站整个架构都设计好,只需要解决一些关键问题即可,其他问题可以在项目迭代的过程中解决。那么,大型网站架构需要解决哪些关键问题呢?其实所谓关键问题都是经验之谈。解决好这些关键问题,在能提高项目质量的同时还能降低项目的成本。
为了帮助读者全面、系统地学习大型网站架构设计的相关知识,笔者编写了本书,给出了自己对相关问题的思考,并对多年的从业经验进行了总结,相信对相关读者会有所帮助。
《大型网站架构实战》特色
内容新颖:讲解时涉及的大部分软件都采用最新版本(截至完稿时)。
内容完善:全面介绍大型网站架构设计的发展和面临的挑战,以及前端架构、后端架构、云计算服务架构和整体架构的技术细节,并详解3个典型的大型网站架构设计案例,最后对笔者所理解的未来架构设计做必要介绍。
案例典型:详细介绍单点登录系统、媒体库管理系统和直播系统的架构设计。
问题驱动:从问题出发,问题与技术相对应,一步步地剖析和还原大型网站架构设计,帮助读者更好地理解相关的知识。
经验总结:全面归纳和总结笔者经历的几个大型网站项目的实践经验。
图文并茂:提供160余幅示意图帮助读者更加直观地理解相关内容。
实用性强:结合具体示例讲解知识点,便于读者理解和掌握。
《大型网站架构实战》内容
第1篇 大型网站架构的发展与面临的挑战
本篇涵盖第1、2章,主要介绍大型网站架构的发展与面临的挑战。架构分为业务架构与技术架构,本篇从宏观上介绍业务架构与技术架构,以及它们之间的关系。
第2篇 大型网站架构的技术细节
本篇涵盖第3~6章,详细介绍大型网站架构的技术细节。本篇把大型网站架构细分为前端架构、后端架构、云计算服务架构和整体架构4个部分,分别介绍每部分需要解决的关键问题及其解决方法。本篇结合实际项目介绍相关知识点,以帮助读者更加深刻地理解大型网站架构。
第3篇 大型网站架构实战案例
本篇涵盖第7~9章,选取几个较为通用且典型的网站系统作为案例,还原这些系统的架构设计,以帮助读者进一步深入理解大型网站架构。
第4篇 未来架构的设想
本篇涵盖第10章,介绍笔者对未来架构的设想。本篇内容虽然是一家之言,但是笔者认为,架构设计是开放的,软件世界是无限包容的,其美好是从想象开始的。
读者对象
网站系统架构师;
网站系统开发人员;
云计算开发人员;
网站系统运维人员;
网站开发项目经理;
对大型网站架构感兴趣的人员;
各类院校学习网站架构的学生;
专业培训机构的相关学员。
《大型网站架构实战》配套资源
《大型网站架构实战》涉及的源代码需要读者自行下载,请在华章公司的网站(www.hzbook.com)上搜索到本书,然后单击“资料下载”按钮,即可在本书页面上找到下载链接进行下载。
意见反馈
鉴于笔者的水平所限,书中可能还存在一些疏漏,敬请各位读者指正。阅读本书时如果有疑问,可以发送电子邮件到yiigaa@126.com或hzbook2017@163.com以获得帮助。
商品简介
《大型网站架构实战》从大型网站架构的发展历程出发,逐步深入介绍大型网站架构的各个部分,并在最后配合实战案例,详细介绍大型网站架构需要关注的问题及其解决方法,让读者不但可以消除对大型网站架构的迷茫,而且还可以对大型网站架构有更加深入的理解。
《大型网站架构实战》共10章,分为4篇。第1篇“大型网站架构的发展与面临的挑战”,主要介绍大型网站业务和架构的发展,以及大型网站架构面临的挑战;第2篇“大型网站架构的技术细节”,主要介绍前端架构、后端架构、云计算服务架构和整体架构等内容;第3篇“大型网站架构实战案例”,主要介绍单点登录系统架构设计、媒体库管理系统架构设计和直播系统架构设计的相关内容;第4篇“未来架构的设想”,主要介绍作者对未来架构的一些设想和看法。
《大型网站架构实战》从实际问题出发,问题与技术相呼应,一步一步地剖析和还原大型网站架构设计,内容通俗易懂,实用性强,特别适合大型网站架构的入门与进阶读者阅读,也适合其他对大型网站架构和云计算感兴趣的读者阅读。
作者简介
梁嘉祯架构师,自由职业者。曾任职于东软集团,从事Web全栈(前端、后端和云计算)开发,并参与项目架构设计。曾参与过多个合同额亿级和千万级的国内外软件项目,作为架构师或项目经理主导过多个合同额从百万级到五百万级的网站系统项目。现为自由职业者,提供架构咨询服务。本书写作过程中为一个合同额五百万级的社区网站系统提供全部的架构服务。深受本科专业涉及的工业、机械和化学思想的影响,持续思考和实践工业化项目过程、机械化软件结构和化学化编码呈现。拥有三套自主研发的前端、后端和云计算架构,经历过多个项目实践,能让大型项目缩减近一半的人力成本。
目录
前言<br/>第1篇 大型网站架构的发展与面临的挑战<br/>第1章 大型网站业务和架构的发展2<br/>1.1 大型网站的业务演变2<br/>1.1.1 静态网站的出现2<br/>1.1.2 动态网站的出现3<br/>1.1.3 大型网站系统的出现4<br/>1.1.4 大型云计算网站系统的出现6<br/>1.1.5 大型网站的未来7<br/>1.2 大型网站架构的发展8<br/>1.2.1 动态网页时代8<br/>1.2.2 B/S架构网站的崛起8<br/>1.2.3 CDN加速网站响应10<br/>1.2.4 应用和数据分离11<br/>1.2.5 非关系型数据库和关系型数据库并存11<br/>1.2.6 集群化12<br/>1.2.7 分布式趋势13<br/>1.2.8 微服务15<br/>1.2.9 大型网站架构的未来15<br/>1.3 小结16<br/>第2章 大型网站架构面临的挑战17<br/>2.1 大型网站架构的基本问题17<br/>2.1.1 业务架构面临的挑战17<br/>2.1.2 技术架构面临的挑战20<br/>2.1.3 业务架构和技术架构的相互成全21<br/>2.2 业务架构的基本思路21<br/>2.2.1 递进思想22<br/>2.2.2 版本计划逐渐完善24<br/>2.2.3 持续优化,推陈出新25<br/>2.3 技术架构的基本思路26<br/>2.3.1 分层思想26<br/>2.3.2 IaaS、PaaS和SaaS分层管理27<br/>2.3.3 前端、后端和云计算服务分层开发28<br/>2.4 大型网站技术架构的核心问题30<br/>2.4.1 性能问题30<br/>2.4.2 可用性问题30<br/>2.4.3 伸缩性问题31<br/>2.4.4 扩展性问题31<br/>2.4.5 安全性问题32<br/>2.5 小结32<br/>第2篇 大型网站架构的技术细节<br/>第3章 前端架构34<br/>3.1 前端的工作原理34<br/>3.1.1 Web服务器搭建34<br/>3.1.2 构造一个简单的网页38<br/>3.1.3 前端网页的工作原理41<br/>3.2 前端架构需要解决的问题47<br/>3.2.1 规整化概述47<br/>3.2.2 适配性和兼容性概述49<br/>3.2.3 模块化概述50<br/>3.2.4 单页应用概述51<br/>3.3 规整化53<br/>3.3.1 编码规范53<br/>3.3.2 JavaScript库59<br/>3.3.3 组件工具箱61<br/>3.3.4 框架64<br/>3.4 适配性和兼容性71<br/>3.4.1 响应式布局71<br/>3.4.2 整体布局73<br/>3.4.3 模块布局77<br/>3.4.4 适配性测试78<br/>3.4.5 浏览器兼容79<br/>3.5 模块化81<br/>3.5.1 模块化的方法82<br/>3.5.2 现今前端模块化的困局86<br/>3.5.3 自研框架Trick87<br/>3.6 单页应用88<br/>3.6.1 单页应用用到的方法88<br/>3.6.2 单页应用的发展趋势90<br/>3.7 小结91<br/>第4章 后端架构92<br/>4.1 后端的工作原理92<br/>4.1.1 后端开发语言及框架92<br/>4.1.2 搭建Web应用服务器94<br/>4.1.3 构造一个简单的后端应用程序105<br/>4.1.4 后端应用程序的工作原理114<br/>4.2 后端架构需要解决的问题120<br/>4.2.1 规整化概述121<br/>4.2.2 数据库概述122<br/>4.2.3 非关系型数据库概述122<br/>4.2.4 整合其他应用程序123<br/>4.3 规整化124<br/>4.3.1 接口设计124<br/>4.3.2 编码规范132<br/>4.3.3 集中配置140<br/>4.3.4 Cookie和Session145<br/>4.3.5 应用拆分和协调148<br/>4.3.6 日志149<br/>4.3.7 自研框架Once159<br/>4.4 数据库161<br/>4.4.1 数据库对比161<br/>4.4.2 数据库的工作原理162<br/>4.4.3 数据库设计164<br/>4.4.4 数据库操作框架168<br/>4.4.5 数据库事务175<br/>4.4.6 分布式事务178<br/>4.5 非关系型数据库188<br/>4.5.1 键值存储非关系型数据库188<br/>4.5.2 列存储非关系型数据库190<br/>4.5.3 文档型非关系型数据库191<br/>4.5.4 图形非关系型数据库191<br/>4.6 小结192<br/>第5章 云计算服务架构193<br/>5.1 云计算服务的工作原理193<br/>5.1.1 云计算服务的应用场景193<br/>5.1.2 云计算开发语言及其框架194<br/>5.1.3 云计算服务软件的工作原理195<br/>5.2 云计算服务架构需要解决的问题200<br/>5.2.1 云计算服务软件基础框架构建概述201<br/>5.2.2 任务池与指令池的搭建和使用概述202<br/>5.2.3 进度数据池与状态数据池的搭建和使用概述202<br/>5.2.4 监控软件的构造概述202<br/>5.3 云计算服务软件基础框架的构建203<br/>5.3.1 进程与线程203<br/>5.3.2 线程同步205<br/>5.3.3 线程模型211<br/>5.3.4 软件结构218<br/>5.4 任务池与指令池的搭建和使用219<br/>5.4.1 消息队列219<br/>5.4.2 RabbitMQ消息队列221<br/>5.4.3 任务池的搭建与使用232<br/>5.4.4 指令池的搭建与使用234<br/>5.5 进度数据池与状态数据池的搭建和使用237<br/>5.5.1 公共数据空间237<br/>5.5.2 Redis数据库239<br/>5.5.3 进度数据池的搭建与使用247<br/>5.5.4 状态数据池的搭建与使用248<br/>5.6 监控软件的构造249<br/>5.6.1 软件结构249<br/>5.6.2 Supervisor监控软件253<br/>5.7 小结254<br/>第6章 整体架构255<br/>6.1 网站系统的基本结构255<br/>6.1.1 前端部分的基本结构255<br/>6.1.2 后端部分的基本结构257<br/>6.1.3 云计算服务部分的基础结构258<br/>6.1.4 网站系统的基本结构259<br/>6.2 整体架构需要解决的问题260<br/>6.2.1 性能概述260<br/>6.2.2 可用性概述260<br/>6.2.3 伸缩性概述261<br/>6.2.4 扩展性概述261<br/>6.2.5 安全性概述261<br/>6.3 性能262<br/>6.3.1 性能指标262<br/>6.3.2 压力测试266<br/>6.3.3 性能调优的基本思路271<br/>6.3.4 服务器性能调优274<br/>6.3.5 Nginx调优280<br/>6.3.6 CDN加速283<br/>6.3.7 浏览器访问页面的过程优化284<br/>6.3.8 Tomcat调优285<br/>6.3.9 缓存与静态文件287<br/>6.3.10 数据库性能优化288<br/>6.3.11 数据库集群289<br/>6.3.12 分布式文件系统293<br/>6.3.13 集群部署与分布式部署294<br/>6.4 可用性297<br/>6.4.1 服务器的定期维护与监控297<br/>6.4.2 服务器热备份298<br/>6.4.3 日志机制299<br/>6.4.4 环境分离与灰度发布299<br/>6.5 伸缩性300<br/>6.5.1 伸缩指标与伸缩策略300<br/>6.5.2 动态弹性伸缩的局限300<br/>6.6 安全性301<br/>6.6.1 安全堡垒机301<br/>6.6.2 接口鉴权302<br/>6.6.3 SQL盲注302<br/>6.6.4 跨域303<br/>6.7 小结305<br/>第3篇 大型网站架构实战案例<br/>第7章 单点登录系统架构设计308<br/>7.1 单点登录系统的关键问题308<br/>7.1.1 为什么需要单点登录系统308<br/>7.1.2 单点登录系统需要解决的关键问题309<br/>7.2 单点登录系统的详细架构设计310<br/>7.2.1 统一的登录与注册入口310<br/>7.2.2 与其他子系统共享用户登录信息311<br/>7.2.3 集中管理用户的基本信息312<br/>7.3 小结313<br/>第8章 媒体库管理系统架构设计314<br/>8.1 媒体库管理系统的关键问题314<br/>8.1.1 为什么需要媒体库管理系统314<br/>8.1.2 媒体库管理系统需要解决的关键问题315<br/>8.2 媒体库管理系统的详细架构设计315<br/>8.2.1 统一的媒体文件上传入口和资源选择机制316<br/>8.2.2 媒体文件的删除机制317<br/>8.2.3 提供自动处理媒体文件等功能318<br/>8.3 小结319<br/>第9章 直播系统架构设计320<br/>9.1 直播系统的关键问题320<br/>9.1.1 为什么需要直播系统320<br/>9.1.2 直播系统需要解决的关键问题321<br/>9.2 直播系统的详细架构设计321<br/>9.2.1 明确直播场景321<br/>9.2.2 基础系统架构322<br/>9.2.3 直播流接收323<br/>9.2.4 直播流处理323<br/>9.2.5 直播观看325<br/>9.3 小结326<br/>第4篇 未来架构的设想<br/>第10章 未来架构328<br/>10.1 理解架构328<br/>10.1.1 架构是什么328<br/>10.1.2 顶层架构332<br/>10.1.3 架构与技术333<br/>10.2 软件行业的发展334<br/>10.2.1 软件行业的现状334<br/>10.2.2 软件行业的发展方向334<br/>10.2.3 不断发展的结局334<br/>10.3 未来架构的方向335<br/>10.3.1 人力效率增加335<br/>10.3.2
以下为对购买帮助不大的评价