大型网站技术架构:摘要与读书笔记xybaby

在网上一搜,这本书的读书笔记还是很多的,而我自己还是决定写一篇读书笔记,主要是为了避免自己忘得太快。笔记的内容并不完全按照原书的内容,主要记录的是我自己感兴趣的部分。

作者反复在文中提到一个观点:大型网站是根据业务需求逐步演化而来的,而不是设计出来的。

不得不承认,互联网行业发展到了今天,大鱼吃小鱼还是很普遍的,大公司的微创新能力分分钟就能干死一个小的项目,所以小公司需要足够快的发展,不停的快速迭代与试错。

下面是是一个演化的过程,图片来自网络。

在初始阶段,访问量并不大,所以应用程序、数据库、文件等所有的资源都在一台服务器上。

随着业务的发展,就会发现一台服务器抗不过来了,所以将应用服务器与数据(文件、数据库)服务器分离。三台服务器对硬件资源的要求各不相同:应用服务器需要更快的CPU,文件服务器需要更大的磁盘和带宽,数据库服务器需要更快速的磁盘和更大的内存。分离之后,三个服务器各司其职,也方便针对性的优化。

“世界上没有什么问题是加一级缓存解决不了的,如果有那就再加一级缓存”

缓存的使用无处不在,缓存的根本目的是加快访问速度。当数据库的访问压力过大的时候,就可以考虑使用缓存了。网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。

随着业务的发展,单个应用服务器一定会成为瓶颈,应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种。后面也会提到,将应用服务器设计为无状态的(没有需要保存的上下文信息),就可以通过增加机器,使用负载均衡来scaleout。

即使使用了缓存,但在缓存未命中、或者缓存服务时效的情况下,还是需要访问数据库,这个时候就需要数据库的读写分离:主库提供写操作,从库提供读服务。注意,在上图中增加了一个数据访问模块,可以对应用层透明数据库的主从分离信息。

CDN和反向代理其实都是缓存,区别在于CDN部署在网络提供商的机房;而反向代理则部署在网站的中心机房。使用CDN和反向代理的目的都是尽旱返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

单个物理机的磁盘是有限的,单个关系数据库的处理能力也是有上限的,所以需要分布式文件存储与分布式数据库。当然,也需要”统一数据访问模块“,使得应用层不用关心文件、数据的具体位置。值得一提的事,关系型数据库自身并没有很好的水平扩展方案,因此一般都需要一个数据库代理层,如cobar、mycat。

web2.0的很多应用并一定适合用关系数据库存储,更加灵活的NoSql能更加方便的解决一些问题,而且NoSQL天然就支持分布式。专门的搜索引擎在提供更优质服务的同时,也大大减轻了数据库的压力。

将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统

既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。

通过服务的分布式,各个应用能更好的独立发展,实现了从依赖模块到依赖服务的过渡。将通用的公共服务独立出来,也方便做服务管控,比如对各个应用的服务请求进行监控,在高峰时期限制、关闭某些应用的访问等。

这一部分是说大型网站需要解决的核心问题,以及解决这些问题的常规思路。

五个要点:性能,可用性,伸缩性,扩展性,安全

作者指出,很多时候大家都混淆了伸缩性(Scalability)与扩展性(Extensibility)。我以前也是把Scalability称之为扩展性,不过想想,在我们讲代码质量的时候,扩展性也是指Extensibility,以后还是直接说这两个英文单词好了。

这几点后面会详细介绍

对模式的定义,书中描述得很好:

"每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作"。模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。

用我自己的话来说,模式就是套路。这些模式,都是为了达成上面提到的核心要素。那么,有哪些模式呢

分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。

在大型网站架构中也采用分层结构,将网主占软件系统分为应用层、服务层、数据层。

分层的好处在于:解耦合,独立发展,伸缩性,可扩展性。上面网站的进化史也凸出了分层的重要性。

但是分层架构也有一些挑战,就是必须合理规划层次边界和接口,在开发过程中,严格遵循分层架构的约束,禁止跨层次的调用(应用层直接调用数据层)及逆向调用(数据层调用服务层,或者服务层调用应用层)。

分层强调的是横向切分,而分割是纵向切分,上面网站进化史部分的业务拆分就包含了分割。

分割的目标是高内聚、低耦合的模块单元

分层和分割的一个主要目的是分布式部署,但分布式也有自己的问题:网络通信带来的性能问题,可用性,一致性与分布式事务,系统维护管理复杂度。

一个机器解决不了的问题,就用几个机器来解决,当服务无状态的时候,通过往集群增加机器就能解决大部分问题。对应网站进化史中“使用应用服务器集群改善网站的并发处理能力”

缓存就是将数据存放在距离计算最近的位置以加快处理速度,同时大大减轻了数据提供者的压力

大型网站架构设计在很多方面都使用了缓存设计:CDN、反向代理、本地缓存、分布式缓存

异步是解耦合的一个重要手段,常见的生产者-消费者模型就是一个异步模式。

出了解耦合,异步还能提高系统可用性、加快响应速度、流量削峰

冗余是系统可用性的重要保障,也是数据可靠性的重要手段

凡人总是会出这样那样的错误,能自动话的就要自动化。自动化大大解放了程序员、运维人员的生产力!

发布过程自动化、自动化代码管理、自动化测试、自动化安全检测、自动化部署、自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级。

奥运精神:更快、更高、更强

技术人员对于性能的追求是无止境的。

性能,站在不同的角度,衡量指标是不一样的:

四招:缓存、集群、异步、代码优化

首先自然是缓存

网站性能优化第一定律:优先考虑使用缓存优化性能。

使用缓存,需要考虑的是缓存置换与一致性问题,其中缓存一致性问题也是分布式系统中需要解决的一个问题,主要的解决方法有租期和版本号。

并不是所有的场合都适合缓存,如频繁修改的数据、没有热点访问的数据。

缓存的可用性:理论上不能完全依靠,但事实上尽可能高可用,否则数据库宕机导致系统不可用。因此缓存服务器也要纳入监控,尽量高可用。

缓存穿透:如果因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,会对数据库造成很大压力,甚至崩横。一个简单的对策是将不存在的数据也缓存起来(其value值为null)。

多线程

为什么要使用多线程,IO阻塞与多核CPU

理想的load是:即没有进程(线程)等待,也没有CPU空闲

资源复用

这个很常见,各种池(pool):线程池、连接池

可用性是大型网站的命脉,是否可用,用户是可以立刻感知到的,短暂的不可用也会带来巨大的损失。这也是为什么大型网站在面对CAP问题时,更看重A(avalibility)的原因。

高可用架构的主要手段是数据和服务的冗余备份及失效转移。

在分层的网络架构中,通过保证每一层的高可用,就实现了整个系统的高可用。而每一层又有自己的高可用手段

位于应用层的服务器通常为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群共同对外提供服务,当负载均衡设备通过心跳检测等手段监控到某台应用服务器不可用时,就将其从集群列表中剔除,并将请求分发到集群中其他可用的服务器上,使整个集群保持可用,从而实现应用高可用。

应用层的高可用很容易,因为应用服务器很多时候是无状态的。

但是也有时候需要有维护的数据,如session,这样就不能将一个请求路由到任意的应用服务器。要解决session的问题,有以下几种方法:

服务层的高可用也是利用集群,不过需要借助分布式服务调用框架。

服务层的服务器被应用层通过分布式服务调用框架访问,分布式服务调用框架会在应用层客户端程序中实现软件负载均衡,并通过服务注册中心对提供服务的服务器进行心跳检测,发现有服务不可用,立即通知客户端程序修改服务访问列表,剔除不可用的服务器。

为了保证服务层的高可用,可以采用以下策略

包括分布式文件系统与分布式数据库,核心都是冗余加失效转移。

冗余(复制集、replica)需要解决的核心问题是一致性问题

失效转移操作由三部分组成:失效确认、访问转移、数据恢复。

上面描述了失效确认的两种方法:控制中心通过心跳检测存储服务器的存活性;应用在访问存储服务失败的时候通知控制中心检测存储服务存活性

网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。

将应用层设计成无状态,即可利用集群+负载均衡来解决伸缩性问题。

首先,缓存是有状态的,分布式缓存服务器集群中不同服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问。

在这个场景下,最好的负载均衡算法就是一致性hash

伸缩性总结:一个具有良好伸缩性架构设计的网站,其设计总是走在业务发展的前面,在业务需要处理更多访问和服务之前,就已经做好充足准备,当业务需要时,只需要购买或者租用服务器简单部署实施就可以。

设计网站可扩展架构的核心思想是模块化,并在此基础之上,降低模块间的耦合性,提高模块的复用性。

主要有分布式消息队列和分布式服务。

分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息。

分布式服务则通过接口分解系统辑合性,不同子系统通过相同的接口描述进行服务调用。

纵向拆分:将一个大应用拆分为多个小应用,如果新增业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统。

横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务,不需要依赖具体的模块代码,即可快速搭建一个应用系统,而模块内业务逻辑变化的时候,只要接口保持一致就不会影响业务程序和其他模块。

分布式服务依赖于分布式服务治理框架

服务治理框架的功能和特点:

所谓问题,就是体验一期望,当体验不能满足期望,就会觉得出了问题。消除问题有两种手段:改善休验或者降低期望。

问题被发现,它只是问题发现者的问题,而不是问题拥有者的问题,如果想要解决一个问题,就必须提出这个问题,让问题的拥有者知道问题的存在。

提出问题Tips:

1.把"我的问题"表述成"我们的问题"2.给上司提封闭式问题,给下属提开放式问题3.指出问题而不是批评人4.用赞同的方式提出问题--》不是说你这里有问题,而是说,方案不错,我有一点疑问(建议)

THE END
1.读书笔记:大型网站技术架构核心原理与案例分析李智慧《大型网站技术架构-核心原理与案例分析》 性能 可用性 伸缩性 扩展性 安全性 总结 这本书组织的很不错,语言精练,篇幅也不长,对网站架构的要点讲的狠清楚透彻,思路清晰。主要围绕架构的五个要点:性能、高可用、伸缩性、扩展性、安全性。令人印象非常深刻。而且李智慧老师深谙职场之道,后面一些关于技术人的建https://blog.csdn.net/shengqianfeng/article/details/118874806
2.技术架构的几种视角mob64ca13f5c557的技术博客安全架构 保护网站免遭攻击及敏感信息泄露。 Web攻击 以HTTP请求的方式发起的攻击,危害最大的就是XSS和SQL注入攻击。但是只要措施得当,这两种攻击都是比较容易防范的。 数据保护 敏感信息加密传输与存储,保护网站和用户资产。 数据中心机房架构 大型网站需要的服务器规模数以十万计,机房物理架构也需要关注。 https://blog.51cto.com/u_16213573/12777803
3.网站架构规划:构建一个成功网站的基石(网站架构规划方案)网站架构规划是网站发展的关键步骤,它为网站的成功奠定基础。精心规划的网站架构可以提升用户在规划网站架构时考虑SEO至关重要。优化页面标题、元描述和内容以提高网站在搜索结果中的可见度。 网站架构的最佳实践 以下是一些网站架构的最佳实践: 保持网站结构简单易懂。 https://www.ulidc.com/2024/12/17/%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84%E8%A7%84%E5%88%92%EF%BC%9A%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%88%90%E5%8A%9F%E7%BD%91%E7%AB%99%E7%9A%84%E5%9F%BA%E7%9F%B3-%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84/
4.大型网站架构的技术要点与应用层的组织方式分析通过采用分布式架构、异步通信、缓存机制等技术手段,可以提高系统的性能和可扩展性。在应用层,采用微服务架构、服务治理、API 网关等方式可以实现系统的解耦合和可管理性。此外,分布式文件存储、CDN 加速和数据分析与监控等技术也是大型网站架构中不可或缺的部分。通过综合运用这些技术和组织方式,可以构建出高可用、可https://baijiahao.baidu.com/s?id=1768312249908528897&wfr=spider&for=pc
5.大型网站技术架构图书简介 《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组展开短评 打开App写短评 xiaohanyu2015-06-11 22:35:51 通俗易懂,可以算是大型网站架构入门的科普书,可以看成是 http://book.douban.com/subject/108127https://m.douban.com/book/subject/25723064/
6.大型网站技术架构(一):大型网站架构演化如何打造一个高可用,高性能,易扩展,可伸缩且安全的网站?这是很多大型互联网企业和其架构师们应该关注的问题。在拜阅了李神的《大型网站技术架构》一书以及结合自己对于互联网的浅薄理解,决定对其每一章做个学习笔记,供大家交流学习,也希望大家能够做出批评和建议,在构建大型网站以及成为架构师之路上有所帮助~ https://www.jianshu.com/p/3724c09a29b8
7.大型网站技术架构:核心原理和案例分析(李智慧)网站秒杀系统架构设计案例分析 秒杀活动的技术挑战 秒杀系统的应对策略 秒杀系统架构设计 大型网站典型故障案例分析 写日志也会引发故障 高并发访问数据库引发的故障 高并发情况下锁引发的故障 缓存引发的故障 应用启动不同步引发的故障 大文件读写独占磁盘引发的故障 https://www.processon.com/view/6131796a63768906a21b8d86
8.大型网站技术架构pdf大型网站技术架构pdf文档介绍内容阿里云为您提供大型网站技术架构pdf相关的13858条产品文档内容及常见问题解答内容,还有等云计算产品文档及常见问题解答。如果您想了解更多云计算产品,就来阿里云帮助文档查看吧,阿里云帮助文档地址https://help.aliyun.com/。https://help.aliyun.com/wordpower/389849-1.html
9.大型网站技术架构核心原理剖析,附知识图谱下载维基百科定义:软件架构是指有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。 软件架构5大要素: 性能 可用性 伸缩性 扩展性 安全性 可以通过考察这5大要素来衡量一个软件架构设计的优劣。 高性能 网站性能是客观的指标,具体体现到响应时间、吞吐量等技术指标。 https://zhuanlan.zhihu.com/p/71776534
10.大型网站技术架构演进与性能优化大型网站技术架构 ISBN:9787121212000 大型网站技术架构核心原理与案例分析 ISBN:9787121212000 大型网站技术架构 :核心原理与案例分析 作者:李智慧 ISBN:9787121212000 出版社:电子工业出版社 出版年:2013 Web信息架构 :设计大型网站 作者:Morville ISBN:9787121070372 出版社:电子工业出版社 出版年:2008 大型系统应用https://www.las.ac.cn/front/book/detail?id=bb6608749120ab8426ec24d9d559cffd
11.《大型网站技术架构核心原理与案例分析(博文视点出品)》(李智慧计算机与互联网 > 网络与通信 > 电子工业出版社 > 大型网站技术架构 核心原理与案例分析(博文视点出品) 自营 电子工业出版社京东自营官方旗舰店 大型网站技术架构 核心原理与案例分析(博文视点出品) 李智慧著 京东价 ¥ 促销 展开促销 配送至 --请选择-- 支持https://item.jd.com/11322972.html
12.《软件架构设计:大型网站技术架构与业务架构融合之道》(余春龙Python量化交易实战-使用vn.py构建交易系统Python算法交易实战Python量化交易实战Python期货量化交易Java并发实现原理:JDK源码剖析Python量化交易软件架构设计:大型网站技术架构与业务架构融合之道 电子工业出版社当当自营 进入店铺收藏店铺 商品详情 开本:16开 纸张:胶版纸 http://product.dangdang.com/26511756.html
13.大型网站技术架构核心原理与案例分析李智慧.pdf大型网站技术架构_核心原理与案例分析_李智慧.pdf,[General Information] 书名=大型网站技术架构 核心原理与案例分析https://max.book118.com/html/2017/0703/119933465.shtm
14.解秘亿级网站——亿级流量网站架构核心技术为什么要从大型网站架构学起? 一者,网站是直接面对用户的,是公司的门户,必须快速响应,必须持续可用,必须抗得住洪峰,最能体现一家企业的技术精华 二者,任一个网站的发展过程中都会出现问题,业务规模越大的网站出现的问题越有典型性,克服问题的思路和过程也最有技术营养 https://maimai.cn/article/detail?fid=1735506722&efid=_1YrbPFY6CY5xjPbpg0alw
15.大型商城网站建设全流程方案探讨及优化策略研究seo搜索引擎用户体本文深入探讨了大型商城网站建设的全流程方案及优化策略,从六个方面进行详细阐述:需求分析与规划、技术架构与开发、用户体验设计、内容管理与SEO策略、安全与性能优化以及上线与维护。需求分析与规划阶段是整个项目的基础,明确目标和用户需求至关重要;接着,技术架构与开发决定了网站的功能性和可扩展性;用户体验设计则直接https://www.163.com/dy/article/JFBNFO1O05569BV4.html
16.GitHubdoocs/technical2大型网站系统与 Java 中间件实践[2014]曾宪杰(花名:华黎)围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。 3大型网站技术架构:核心原理与案例分析[2013]李智慧梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理。 https://github.com/doocs/technical-books
17.由浅至深推荐进阶java书籍(附PDF下载)作者是蘑菇街技术副总曾宪杰,曾长期负责淘宝主站。通过这本书可以了解大型网站架构变迁过程中的较为通用的问题和解法,并了解构建支撑大型网站的 Java 中间件的实践经验。 对于有一定网站开发、设计经验,并想了解大型网站架构和支撑这种架构的系统的开发、测试等的相关工程人员,本书有很大的参考意义;对于没有网站开发设计https://www.w3cschool.cn/java/java-book.html
18.2023年重大网络安全政策法规盘点据工信部网站5日消息,按照《中华人民共和国标准化法》和《强制性国家标准管理办法》,工信部装备工业一司组织全国汽车标准化技术委员会开展了《汽车整车信息安全技术要求》等四项强制性国家标准的制修订,已形成征求意见稿,并向社会各界公开征求意见。 《攻击面收敛架构技术规范》正式实施 https://www.eet-china.com/mp/a273064.html
19.李智慧·高并发架构实战课李智慧,极客时间专栏《从 0 开始学大数据》、《后端技术面试 38 讲》作者,同程旅行交通首席架构师、Apache Spark 代码贡献者、5 项分布式系统发明专利拥有者。他长期从事大型网站架构、大数据的研发工作,曾担任阿里巴巴技术专家、Intel 亚太研发中心架构师、宅米和 WiFi 万能钥匙 CTO,有超过 8 年的线下咨询、培训经验https://time.geekbang.org/column/intro/100105701/package
20.网络营销策划推广方案(精选11篇)为了高效率、系统化、有计划发展河南省旅游网络营销,河南省政府有关部门要尽快组织一批电子商务、旅游营销、网络技术、经济法律、银行金融等各方面的专家,组成编制组,分阶段编制《河南省旅游网络营销发展战略策划报告》。该《战略策划报告》要根据《河南省旅游业发展战略总体规划》,对旅游网络企业、旅游网站建设、网络营销https://www.unjs.com/fanwenku/299814.html
21.大型网站技术架构演进与性能优化高清pdf完整版[127MB]电子书下载《大型网站技术架构演进与性能优化》从一名亲历者的角度,阐述了一个网站在业务量飞速发展的过程中所遇到的技术转型等各种问题及解决思路。从技术发展上看,网站经历了Web应用系统从分布式、无线多端、中台到国际化的改造;在解决大流量问题的方向上,涉及了从端的优化到管道到服务端甚至到基础环境优化的各个层面。 https://www.jb51.net/books/681216.html