《大型网站技术架构:核心原理与案例分析》读书笔记

news/2024/5/9 20:29:49/文章来源:https://blog.csdn.net/lonelymanontheway/article/details/82914762

写在前面:本书出版于2013年,鄙人工作第三年,此时(2018年9月底)看完此书,感觉收获并不多,并没有网上传闻那么牛逼,勉强6分(满分10),只能算是网站架构的入门科普书籍吧。

第一篇 概述

第一章 大型网站架构演化

大型网站软件系统的特点:

  1. 高并发、大流量
  2. 高可用
  3. 海量数据
  4. 用户分布广泛、网络情况复杂
  5. 安全环境恶劣
  6. 需求快速变更,发布频繁
  7. 渐进式发展

大型网站架构演化发展历程

  1. 初始阶段的网站架构
  2. 应用服务和数据服务分离
  3. 使用缓存改善网站性能
  4. 使用应用服务器集群改善网站的并发处理能力
  5. 数据库读写分离
  6. 使用反向代理和CDN加速网站响应
  7. 使用分布式文件系统和分布式数据库系统
  8. 使用NoSQL和搜索引擎
  9. 业务拆分
  10. 分布式服务

缓存分为两种,缓存在应用服务器的本地缓存和缓存在专门的分布式缓存服务器的远程缓存。
CDN和反向代理和基本原理都是使用缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;反向代理服务器则部署在网站的中心机房,用户请求到达机房后,首先访问反向代理服务器,若有缓存,直接返回给用户。

大型网站架构演化的价值观

  • 大型网站架构技术的核心价值是随网站所需灵活应对
  • 驱动大型网站技术发展的主要力量是网站的业务发展

网站架构设计误区

  • 一味追随大公司的解决方案
  • 为了技术而技术
  • 企图用技术解决所有问题

第二章 大型网站架构模式

网站架构模式

  • 分层,应用层、服务层、数据层;注意要合理规划层次边界和接口,禁止跨层次的调用或者逆向调用;横向切分;
  • 分割,纵向切分,按照模块/功能/服务来分割
  • 分布式,分布式应用和服务、静态资源、数据和存储、计算、配置、锁、文件系统
  • 集群
  • 缓存,包括CDN和反向代理;本地缓存和分布式缓存;使用缓存的两个前提条件:1. 数据访问热点不均衡,2. 数据在某个时间段内有效,不会很快过期;
  • 异步,系统解耦的手段之一:分层、分割、分布、异步;单一服务器内,通过多线程共享内存队列的方式实现异步,分布式系统通过分布式消息队列实现异步;
  • 冗余:数据定期备份、存档保存、冷备份、主从分离、实时同步热备份、灾备数据中心等;
  • 自动化
  • 安全

架构模式在新浪微博的应用
在这里插入图片描述
异步推拉相结合;
多级缓存;

第三章 大型网站核心架构要素

架构要素

  • 性能,衡量指标:响应时间、TPS、系统性能计数器
  • 可用性,手段:冗余、负载均衡
  • 伸缩性,集群增加节点,一致性哈希算法
  • 扩展性:衡量的主要标准就是:网站在添加新的业务产品时,是否可以实现对现有产品透明无影响;主要手段就是:事件驱动架构和分布式服务。
  • 安全性

第二篇 架构

第四章 瞬时响应:网站的高性能架构

网站性能是客观指标,也是主观感受;
网站性能测试
性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量指标;

  1. 不同视角下的网站性能:用户视角(优化手段:优化页面HTML样式、利用浏览器端的并发和异步特性、调整浏览器的缓存策略、使用CND服务、反向代理等);开发人员(关注响应延迟、系统吞吐量、并发处理能力、系统稳定性;优化手段:使用缓存加速数据读取、使用集群提高系统吞吐能力、使用异步消息加快请求响应以及削峰、代码优化);运维人员(关注基础设施性能和资源利用率,如网络运营商的带宽能力、服务器硬件配置、数据中心网络架构、服务器和网络带宽的资源利用率等,优化手段:建设优化骨干网、使用高性价比定制服务器、使用虚拟化技术优化资源利用率等)
  2. 性能测试指标:开发人员的视角:响应时间(重复请求取均值)、并发数(系统能够同时处理的请求的数量)、吞吐量(单位时间内系统处理的请求数量;TPS:每秒事务数;HPS:每秒HTTP请求数;QPS:每秒查询数)、性能计数器(指标:System Load、对象与线程数、内存使用、CPU使用、磁盘与网络IO等)
  3. 性能测试方法:性能测试、负载测试、压力测试、稳定性测试
  4. 性能测试报告
  5. 性能优化策略:性能分析进而性能优化

Web前端性能优化

  1. 浏览器访问优化:减少HTTP请求(合并CSS,合并JS、合并图片);使用浏览器缓存(将CSS、JS、图标等静态文件缓存在浏览器中。更新静态资源时,采用批量更新的方法);启用压缩(在服务器端对文件进行压缩,在浏览器端对文件解压缩);CSS放在页面最上面,JS放在页面最下面;减少Cookie传输;
  2. CDN加速,CDN可以最短路径返回响应;缓存静态资源;
  3. 反向代理

应用服务器性能优化

  1. 分布式缓存
  2. 异步操作
  3. 使用集群
  4. 代码优化

存储性能优化

  1. 机械硬盘vs.固态硬盘,机械硬盘快速顺序读写、慢速随机读写;连续访问(数据存储在连续的磁盘空间上),随机访问(数据存储在不连续的磁盘空间)
  2. B+树vs.LSM树,为了改善数据访问特性,文件系统或者数据库系统通常会对数据排序后再存储,加快数据检索速度,
  3. RAIDvs.HDFS

第五章 万无一失:网站的高可用架构

网站可用性的度量与考核
…网站可用性度量
…网站可用性考核

高可用的网站架构
.高可用的应用
…通过负载均衡进行无状态服务的失效转移
…应用服务器集群的Session管理
.高可用的服务
.高可用的数据
…CAP原理
…数据备份
…失效转移

高可用网站的软件质量保证
…网站发布
…自动化测试
…预发布验证
…代码控制
…自动化发布
…灰度发布
.网站运行监控
…监控数据采集
…监控管理

第六章 永无止境:网站的伸缩性架构

.网站架构的伸缩性设计
…不同功能进行物理分离实现伸缩
…单一功能通过集群规模实现伸缩
.应用服务器集群的伸缩性设计
…HTTP重定向负载均衡
…DNS域名解析负载均衡
…反向代理负载均衡
…IP负载均衡
…数据链路层负载均衡
…负载均衡算法
.分布式缓存集群的伸缩性设计
…Memcached分布式缓存集群的访问模型
…Memcached分布式缓存集群的伸缩性挑战
…分布式缓存的一致性Hash算法
.数据存储服务器集群的伸缩性设计
…关系数据库集群的伸缩性设计
…NoSQL数据库的伸缩性设计
.小结

第七章 随需应变:网站的可扩展架构

.构建可扩展的网站架构
.利用分布式消息队列降低系统耦合性
…事件驱动架构
…分布式消息队列
.利用分布式服务打造可复用的业务平台
…WebService与企业级分布式服务
…大型网站分布式服务的需求与特点
…分布式服务框架设计
.可扩展的数据结构
.利用开放平台建设网站生态圈
.小结

第八章 固若金汤:网站的安全架构

目录

  • 道高一尺魔高一丈的网站应用攻击与防御
    1. XSS攻击
    2. 注入攻击
    3. CSRF攻击
    4. 其他攻击和漏洞
    5. Web应用防火墙
    6. 网站安全漏洞扫描
  • 信息加密技术及密钥安全管理
    1. 单向散列加密
    2. 对称加密
    3. 非对称加密
    4. 密钥安全管理
  • 信息过滤与反垃圾
    1. 文本匹配
    2. 分类算法
    3. 黑名单
  • 电子商务风险控制
    1. 风险
    2. 风控

第三篇 案例

第九章 淘宝网的架构演化案例分析

.淘宝网的业务发展历程
.淘宝网技术架构演化
.小结

第十章 维基百科的高性能架构设计分析

Wikipedia网站整体架构
在这里插入图片描述
主要组成部分:

  • GeoDNS
  • LVS
  • Squid
  • Lighttpd
  • PHP
  • Memcached
  • Lucene
  • MySQL

Wikipedia性能优化策略

  • Wikipedia前端性能优化
    1. 包括DNS、CDN、反向代理、静态资源服务等;
    2. CDN缓存的几条准则:页面不含动态信息,避免页面内容缓存失效或者过期(部分失效或者过期也意味着页面的失真,即网站服务的不可靠性);每个页面有唯一的REST风格的URL,以便CDN可以快速查找并避免重复缓存;在HTML响应头写入缓存控制信息,通过应用控制内容是否缓存以及缓存有效期。
  • Wikipedia服务端性能优化
    1. 使用APC,PHP字节码缓存模块,加速代码执行减少资源消耗;
    2. 使用Imagemagic进行图片处理和转化
    3. 使用text进行文本格式化,特别是将科学公式内容转化成图片格式
    4. 替换PHP的字符串查找函数strtr(),使用更优化的算法重构
  • Wikipedia后端性能优化
    1. 包括缓存、存储、数据库;
    2. 针对缓存:
      1. 热点数据直接缓存到应用服务器的本地内存;
      2. 缓存数据内容尽量是应用服务器可以直接使用的格式,比如HTML格式,减少应用服务器从缓存中获取数据之后解析构造数据的代价;
      3. 存储Session对象
    3. MySQL优化:
      1. 增大内存;
      2. 将数据库事务一致性设置到较低水平,加快宕机恢复速度;
      3. 若Master数据库宕机,则切换到Slave数据库,关闭数据写服务,即关闭词条编辑功能;
      4. 使用RAID0磁盘阵列加速磁盘访问,提示性能读写问题,虽然降低数据库的持久可靠性,但其可靠性可以通过MySQL的主从复制、数据异步备份解决。

第十一章 海量分布式存储系统Doris的高可用架构设计分析

.分布式存储系统的高可用架构
.不同故障情况下的高可用解决方案
…分布式存储系统的故障分类
…正常情况下系统访问结构
…瞬时故障的高可用解决方案
…临时故障的高可用解决方案
…永久故障的高可用解决方案

第十二章 网购秒杀系统架构设计案例分析

目录

  • 秒杀活动的技术挑战
    1. 对现有的网站业务造成冲击
    2. 高并发的应用请求,数据库负载
    3. 突然增加网络带宽和服务器带宽
    4. 直接下单:控制下单URL的随机性
  • 秒杀系统的应对策略
    1. 秒杀系统独立部署
    2. 秒杀商品页面静态化
    3. 租借秒杀活动网络带宽
    4. 动态生成随机下单页面URL
  • 秒杀系统架构设计
    在这里插入图片描述
    细节:网站的秒杀业务不能使用正常的业务流程,不能和正常的网站交易业务共用服务器,必须设计部署专门的秒杀系统,进行专门应对;

第十三章 大型网站典型故障案例分析

案例:

  • 写日志也会引发故障,日志分类分别配置(本系统,第三方组件),日志级别
  • 高并发访问数据库引发的故障,首页应该是静态的,不宜访问数据库,数据从缓存服务器或者搜索引擎服务器获取
  • 高并发情况下锁引发的故障,加锁与解锁,细化锁的粒度(不要锁类,而应该锁代码块),操作耗时的方法(如远程调用)不宜加锁
  • 缓存引发的故障,注重缓存服务器集群的管理与运维
  • 应用启动不同步引发的故障,后端服务器启动完全之后才去启动前端服务器
  • 大文件读写独占磁盘引发的故障,针对文件类型、大小使用不能的文件存储服务器,如HDFS,FastDFS等;
  • 滥用生产环境引发的故障,生产环境隔离,增加预发布环境;
  • 不规范的流程引发的故障,代码提交git diff,code review
  • 不好的编程习惯引发的故障,NPE检查,输入对象尽量保证不是null,必要时构造空对象(使用空对象模式)

第四篇 架构师

第十四章 架构师领导艺术

目录

  • 关注人而不是产品
  • 发掘人的优秀
  • 共享美好蓝图
  • 共同参与架构
  • 学会妥协
  • 成就他人

第十五章 网站架构师职场攻略

目录

  • 发现问题,寻找突破
  • 提出问题,寻求支持
  • 解决问题,达成绩效

第十六章 漫话网站架构师

按作用划分架构师

  • 设计型架构师
  • 救火型架构师
  • 布道型架构师
  • Geek型架构师

按效果划分架构师

  • 夏尔巴人架构师
  • 斯巴达人架构师
  • 达官贵人架构师

按职责角色划分架构师

  • 产品架构师
  • 基础服务架构师
  • 基础设施架构师

按关注层次划分架构师

  • 只关注功能的架构师
  • 关注非功能的架构师
  • 关注团队组织和管理的架构师
  • 关注产品运营的架构师
  • 关注产品未来的架构师

按口碑划分架构师

  • 最好的架构师
  • 好的架构师
  • 一般的架构师
  • 差的架构师
  • 最差的架构师

非主流方式划分架构师

  • 普通架构师
  • 文艺架构师
  • 1+1架构师

附录A 大型网站架构技术一览

网站架构层次:
在这里插入图片描述
前端架构:
不包含业务逻辑,不处理动态内容;

  • 浏览器优化技术
  • CDN
  • 动静分离、静态资源独立部署
  • 图片服务,用户上传图片,产品图片等;
  • 反向代理
  • DNS

应用层架构:

  • 开发框架
  • 页面渲染
  • 负载均衡
  • Session管理
  • 动态页面静态化
  • 业务拆分
  • 虚拟化服务器

服务层架构

  • 分布式消息
  • 分布式服务
  • 分布式缓存
  • 分布式配置

存储层架构

  • 分布式文件
  • 关系数据库
  • NoSQL数据库
  • 数据同步

后台架构

  • 搜索引擎
  • 数据仓库
  • 推荐系统

数据采集与监控

  • 浏览器数据采集
  • 服务器业务数据采集
  • 服务器性能数据采集
  • 系统监控与报警

安全架构

  • web攻击
  • 数据保护

数据中心机房架构

  • 机房架构
  • 机柜架构
  • 服务器架构

附录B Web开发技术发展历程

CGI,过时技术,了解即可,略;

MVC
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_796582.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《大型网站系统与java中间件实践》读书笔记

As always,福利置顶,pdf下载链接:http://pan.baidu.com/s/1boE2xBp 密码:iu6o 书籍还算不错,把分布式系统各种可能的问题都细致地分析一遍,并给出几种解决方法和最佳的方案,这一点值得肯定。分布…

订餐网站2(后台界面)

因为后台不要求美观所以开始做后台界面给管理员用。需要的功能: 1. 登录页面 ->单独页面,aspx直接登录,成功转入管理页面 2. 管理员查看,处理订单 ->管理页面 3. 管理员修改菜品 ->管理页面 4. 管理员管理会员 ->…

订餐网站3(数据库设计)

由于网站比较小所以使用Access数据库, 表设计之后如下图,用Mindjet MindManager画的

订餐网站4(管理界面-dishes.aspx)

管理菜品的界面 1. 添加菜品通过 table中添加input text box实现 <asp:TableRow runat"server"> <asp:TableCell runat"server">菜品名称</asp:TableCell> <asp:TableCell runat"server">菜品介绍</asp:TableCell&…

jmeter模拟对网站做压力测试

一般的网站&#xff0c;在进入业务功能前先需登录&#xff0c;然后才能访问业务功能。基本框架如下 详细步骤&#xff1a; 1 .用badboy录制登录&#xff0c;访问随意一个网址。 2.用jmeter打开&#xff0c;一会自己写的时候可以参考里面的参数名称或路径什么的。如果对http熟悉…

Fiddler是最强大最好用的Web调试工具之一--网站抓包分析

Fiddler 教程 Fiddler是最强大最好用的Web调试工具之一&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。 阅读目录 Fid…

centos6下如何安装mysql服务_centos 6.5如何安装mysql?_网站服务器运行维护,centos 6.5,mysql...

Linux运维之shell变量.md_网站服务器运行维护我们知道shell里面有许多变量&#xff0c;比如我们经常会用到的PATH变量&#xff0c;它的作用就是&#xff0c;它的作用是设置可执行文件的目录&#xff0c;这样输入命令的时候就不用使用绝对路径了。centos 6.5安装mysql的方法&…

php网站开发实例教程源码,PHP+MYSQL网站开发全程实例

1. 从观念的引述、程序代码解析到范例的延伸应用&#xff0c;给您最完整的学习流程。2. 实务网站范例&#xff0c;所有技术整合运用&#xff0c;实作技巧一览无遗。3.在PHP的程序设计中&#xff0c;以高阶的程序设计&#xff0c;配上灵活的图解&#xff0c;增加您程序设计的功力…

项目1在线交流平台-7.构建安全高效的企业服务-5.redis高级数据结构应用-统计网站数据-独立访客和日活跃用户

文章目录功能需求一、dao层定义redis数据的key二、Service层处理业务逻辑1. 对独立访客UV的记录与查询记录new SimpleDateFormat("yyyyMMdd")format(new Date())- 日期类型转为指定日期格式字符串类型查询Calendar类 Calendar.getInstance()- 实例化操作日期的Calend…

打不开_网站打不开的原因有哪些

其实网站不管是在建设的过程中还是在投入运营使用之后&#xff0c;都会出现网站打不开的现象&#xff0c;而且还有很多的企业不知道出现这种现象的原因。今天八爪网就给大家分享网站打不开的原因有哪些&#xff0c;一起来看看吧。1、检查是否是网站服务器的问题有的企业在做网站…

使用Web标准建站第8天:CSS布局入门(2)

接下来开始要真正设计布局了。和传统的方法一样&#xff0c;你首先要在脑海里有大致的轮廓构想&#xff0c;然后用photoshop把它画出来。你可能看到有关web标准的站点大都很朴素&#xff0c;因为web标准更关注结构和内容&#xff0c;实际上它与网页的美观没有根本冲突&#xff…

java webmagic 使用_使用 | Java使用WebMagic 爬取网站

小小又开始学习了&#xff0c;这次跟着项目学习着&#xff0c;需要使用一个相关的爬虫&#xff0c;这里使用的是webmagic作为网站的爬虫。安装这里使用maven进行安装。根据maven下载相关的包us.codecraftwebmagic-core0.7.3us.codecraftwebmagic-extension0.7.3Hello World几乎…

linux shell监控网站延迟,shell脚本监控网站状态

给大家发个不错的网站监控shell,当然说它功能强大也不是很强大,但配置上很灵活,因为此脚本的作用是按固定频率不停访问给出的URL,当网站不可访问时自动给设定邮箱发送告警邮件以通知用户.好了.来看脚本吧.#!/bin/sh# */2 * * * * sh /var/monitor/web_monitor.sh http:///blog.…

Vue ElementUI el-tabs 监听导航栏的mouseover 和 mouseleave 事件

需求 项目需要对 el-tabs 的导航栏做鼠标监听事件&#xff0c;但官网仅有如下点击事件。所以另辟蹊径&#xff0c;对 class"el-tabs__nav-scroll" 做监听。 示例 <template><div><el-tabs class"my-tabs" v-model"activeName" …

网站的分布式架构学习

转载学习地址&#xff1a;http://www.cnblogs.com/sharpxiajun/archive/2013/05/11/3072798.html 网站的B/S技术架构图 在传统B/S架构的企业管理系统里&#xff0c;技术架构往往就是一个工程项目&#xff0c;各个逻辑分层都是该工程的业务逻辑模块。但是作为提供公共服务的网站…

做网站用UTF-8还是GB2312?

转载自 http://justjavac.javaeye.com/blog/695252 经常我们打开外国网站的时候出现乱码&#xff0c;又或者打开很多非英语的外国网站的时候&#xff0c;显示的都是口口口口口的字符&#xff0c; WordPress程序是用的UTF-8&#xff0c;很多cms用的是GB2312。 ● 为什么有这么…

小型电子商务网站设计原则

最近谈得最多的话题莫过于大规模&#xff0c;大数据量&#xff0c;高性能&#xff0c;高并发等架构话题&#xff0c;其实一个电子商务网站开始时一定是小规模&#xff0c;小数据量&#xff0c;用不着把架构弄得过于复杂。高度设计、过度扩展(高德纳大爷也说过&#xff0c;"…

Mysql在大型网站的应用架构演变

写在最前: 本文主要描述在网站的不同的并发访问量级下&#xff0c;Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关&#xff0c;没有并发的增长&#xff0c;也就没有必要做高可扩展性的架构&#xff0c;这里对可扩展性进行简单介绍一下&#xff0c;常用的扩展手段…

(转载)可扩展、高可用、负载均衡网站架构设计方案

可扩展、高可用、负载均衡网站架构设计方案作者&#xff1a;田逸(sery163.com) 本作品已刊登在《IT实验室周报》第6期第6版 基本需求: 1、 高可用性&#xff1a;将停止服务时间降低到最低甚至是不间断服务 2、 可扩展性&#xff1a;随着访问的增加&#xff0c;系统具备良好的…

MOUSEOVER在拼接的HTML无效处理

正常情况下&#xff1a; //鼠标移入移出&#xff08;顶部企业图标信息&#xff09;$(".patternBg").mouseover(function (){ $(".enterpriseContent").show(); }).mouseout(function () {$(".enterpriseContent").hide();}); 修改成&#x…