⼤型⽹站技术架构(核⼼原理与案例分析)
Chapter 1.⼤型⽹站架构演化 ⼤型⽹站软件系统的特点 ⾼并发、⼤流量(⾯对⾼并发⽤户,⼤流量访问)⾼可⽤(系统7x24⼩时服务)海量数据⽤户分布⼴泛,⽹络情况复杂安全环境恶劣需求快速变更,发布频繁渐进式发展⼤型⽹站架构演化发展历程 初始阶段的⽹站架构 应⽤程序、数据库、⽂件等所有的资源都在⼀台服务器上应⽤服务器和数据服务分离 --> 数据库瓶颈 应⽤程序、数据库、⽂件分别在独⽴的服务器上,对服务器的硬件资源要求各不相同使⽤缓存改善⽹站性能 --> 应⽤服务器瓶颈 本地缓存分布式缓存(远程分布式缓存)使⽤应⽤服务器集改善⽹站的并发处理能⼒ --> 数据库瓶颈 通过负载均衡调度服务器,将⽤户的请求分发到应⽤服务器集中的任何⼀台服务器上数据库读写分离 --> ⽹站访问速度瓶颈 利⽤数据库主从复制机制实现数据更新同步,主数据库复制写,从服务器负责读封装专门的数据访问模块,使数据库读写分离对应⽤透明使⽤反向代理和CDN加速⽹站响应 --> 单⼀服务器瓶颈 CDN部署在⽹络提供商的机房,使⽤户在请求⽹站服务时,可以从距离⾃⼰最近的⽹络提供商机房获取数据反向代理部署在⽹站的中⼼机房,⽤户请求⾸先访问反向代理服务器,如果反向代理服务器中缓存着⽤户资源,则直接返回使⽤分布式⽂件系统和分布式数据库系统 --> 数据存储和检索需求复杂 分库分表分布式⽂件存储使⽤NoSQL和搜索引擎 --> 业务复杂业务拆分 --> 应⽤系统整体复杂度增加,部署维护困难 将⼀个⽹站拆分成许多不同的应⽤,每个应⽤独⽴部署维护应⽤间通过超链接建⽴联系,也可以通过消息队列进⾏数据分发,最多的还是通过访问同⼀个数据存储系统来构成⼀个关联的完整系统分布式服务 提取每个应⽤系统中相同的业务操作独⽴部署,应⽤系统只需要管理⽤户界⾯
网站程序下载
Chapter 2.⼤型⽹站架构模式 ⽹站架构模式 分层(横向) 将系统在横向维度上切分成⼏个部分,每个部分负责⼀部分相对⽐较单⼀的职责,然后通过上层对下层的依赖和调⽤组成⼀个完整的系统⼤型⽹站分层结构 应⽤层:负责具体业务和视图展⽰服务层:为应⽤层提供服务⽀持数据层:提供数据存储访问服务分割(纵向) 将不同的功能和服务分割开来,包装成⾼内聚低耦合的模块单元,⼀⽅⾯有助于开发和维护,另⼀⽅⾯便于不同模块的分布式部署分布式 优点 ⾼并发访问⼤数据量处理问题 ⽹络开销服务器宕机数据⼀致性⽹站依赖错综复杂,开发管理维护困难⽅案 分布式应⽤和服务分布式静态资源分布式数据和存储分布式计算分布式锁分布式配置分布式⽂件系统......集 多台服务器部署相同应⽤构成⼀个集,通过负载均衡设备共同对外提供服务缓存 CDN(内容分发⽹络)反向代理本地缓存分布式缓存异步 单⼀服务器:多线程共享内存队列的⽅式实现异步分布式系统:分布式消息队列实现异步异步消息队列的特性 提⾼系统可⽤性加快⽹站响应速度消除并发访问⾼峰冗余 集、备份(冷备份、热备份)、灾备数据中⼼⾃动化 ⾃动化代码管理⾃动化测试⾃动化安全检测⾃动化部署⾃动化监控⾃动化报警⾃动化失效转移⾃动化失效恢复⾃动化降级⾃动化分配资源安全 ⾝份验证⽹络通信加密、数据加密验证码编码转换过滤风险控制
Chapter 3.⼤型⽹站核⼼架构要素 性能 浏览器端 浏览器缓存页⾯压缩合理布局页⾯减少Cookie传输CDN反向代理应⽤服务器端 本地缓存和分布式缓存异步操作集多线程、改善内存管理数据库服务器端 索引缓存SQL优化可⽤性 主要⼿段是冗余,应⽤部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份任何⼀台服务器宕机不会影响应⽤的整体可⽤,也不会导致数据丢失伸缩性
通过不断向集中加⼊服务器的⼿段来缓解不断上升的⽤户并发访问压⼒和不断增长的数据存储需求应⽤服务器集 通过负载均衡设备就可以向集中不断加⼊服务器缓存服务器集 加⼊服务器可能导致缓存路由失效,需改进缓存路由算法关系数据库集 通常需在数据库之外实现,通过路由分区等⼿段将部署有多个数据库的服务器组成⼀个集扩展性 事件驱动架构(通常利⽤消息队列实现)分布式服务安全性
Chapter 4.瞬时响应:⽹站的⾼性能架构 ⽹站性能测试 不同视⾓下的⽹站性能 ⽤户视⾓的⽹站性能 ⽤户在浏览器上直观感受到的⽹站响应速度快还是慢开发⼈员视⾓的⽹站性能 应⽤程序本⾝及其相关⼦系统的性能(响应延迟、系统吞吐量、并发处理能⼒、系统稳定性等)运维⼈员视⾓的⽹站性能 更关注基础设施性能和资源利⽤率性能测试指标(开发和测试⼈员视⾓) 响应时间:指应⽤执⾏⼀个操作需要的时间,包括从发出请求开始到收到最后响应数据所需要的时间。直观反映了系统的“快慢”并发数:指系统能够同时处理请求的数⽬。反映了系统的负载特性吞吐量:指单位时间内系统处理的请求数量。反映了系统的整体处理能⼒ TPS(每秒事务
数)QPS(每秒查询数)HPS(每秒HTTP请求数)性能计数器:描述服务器或操作系统性能的⼀些数据指标(系统负载、对象与线程数、内存使⽤、CPU使⽤、磁盘与⽹络I/O等)性能测试⽅法 性能测试负载测试压⼒测试稳定性测试性能测试报告性能优化策略 性能分析----定位问题性能优化----解决问题Web前端性能优化 浏览器访问优化 减少HTTP请求 合并CSS合并JS合并图⽚使⽤浏览器缓存通
过设置HTTP头中Cache-Control和Expires的属性设定浏览器缓存更新静态资源时应采⽤逐量更新⽅法启⽤压缩 GZip压缩等CSS放在页⾯最上⾯、JS放在页⾯最下⾯ 浏览器会下载完全部CSS之后才对整个页⾯进⾏渲染浏览器在加载JS后⽴即执⾏,有可能会阻塞整个页⾯减少Cookie传输 Cookie包含在每次请求和相应中,太⼤的Cookie会严重影响数据传输,尽量减少Cookie中传输的数据量CDN 加速 将数据缓存在离⽤户最近的地⽅,使⽤户以最快速度获取数据,⼀般缓存的数据为静态资源反向代理 安全功能缓存功能负载均衡功能应⽤服务器性能优化 分布式缓存 缓存的基本原理 缓存指将数据存储在相对较⾼访问速度的存储介质中, 以供系统处理。缓存的本质是⼀个内存Hash表合理使⽤缓存 频繁修改的数据没有热点的访问数据不⼀致与脏读缓存可⽤性缓存预热缓存穿透分布式缓存架构异步操作 消息队列 改善⽹站的扩展性改善⽹站的性能很好的削峰作⽤使⽤集代码优化 多线程 线程安全问题资源复⽤ 单例对象池数据结构垃圾回收存储性能优化 机器硬盘 vs 固态硬盘B+树 vs LSM树RAID vs HDFS RAID(廉价磁盘冗余阵列)技术主要是为了改善磁盘的访问延迟,增强磁盘的可⽤性和容错能⼒ RAID0:数据从内存缓冲区写⼊磁盘时,根据磁盘数量将数据分成N份,同时并发写⼊N块磁盘RAID1:数据在写⼊磁盘时,将⼀份数据同时写⼊两块磁盘RAID10:结合RAID0和RAID1RAID3:在数据写⼊磁盘时,将数据分成N-1份,并发写⼊N-1块磁盘,并在第N块磁盘记录校验数据,任何⼀块磁盘损坏(包括校验数据磁盘),都可以利⽤其他N-1块磁盘的数据恢复RAID5:与RAID3相似,但校验数据不是写⼊第N块磁盘,⽽是螺旋式地写⼊所有磁盘中RAID6:与RAID5相似,但数据只写⼊N-2块磁盘,并螺旋式地在两块磁盘中写⼊校验信息HDFS(Hadoop分布式⽂件系统) 以块(Block)为
单位管理⽂件内容,⼀个⽂件被分割成若⼲个Block,每个Block默认持有两个副本(存在其他服务器上)NameNode(名字服务节点)和DataNode(数据存储节点)
Chapter 5.万⽆⼀失:⽹站的⾼可⽤架构 ⽹站可⽤性的度量与考核 ⽹站可⽤性度量 ⽹站不可⽤时间(故障时间)= 故障修复时间点 -故障发现时间点⽹站年度可⽤性指标 = (1 - ⽹站不可⽤时间 / 年度总时间)x 100%⽹站可⽤性考核 故障分 = 故障时间(分钟)x
故障权重⾼可⽤的⽹站架构 主要⼿段:数据和服务的冗余备份及失效转移不同层的解决⽅案 应⽤层:通过负载均衡设备将⼀组服务器组成⼀个集共同对外提供服务服务层:与应⽤层类似,也是通过集⽅式实现⾼可⽤,只是这些服务器被应⽤层通过分布式服务调⽤框架访问数据层:数据需在写⼊时同步复制到多台服务器上,实现数据冗余备份⾼可⽤的应⽤ 通过负载均衡进⾏⽆状态服务的失效转移应⽤服务器集的Session管理 Session复制:在集中的服务器之间同步Session对象Session绑定:将某个⽤户的所有请求都在同⼀台服务器上处理,即Session绑定在某台特定服务器上利⽤Cookie记录SessionSession服务器⾼可⽤的服务 分级管理:将服务器进⾏分级管理,核⼼应⽤和服务优先使⽤更好的硬件超时设置:在应⽤程序中设置服务调⽤的超时时间,⼀旦超时,通信框架就抛出异常,应⽤程序根据服务调⽤策略选择继续重试或请求转移异步调⽤:将次要的不会影响下⼀步操作的服务通过消息队列等异步⽅式完成,避免⼀个服务失败导致整个应⽤请求失败的情况,同时可加快响应速度服务降级:服务可能因⼤量的并发调⽤⽽性能下降,严重时可能会导致宕机,为保证核⼼应⽤和功能的
正常运⾏,需对服务进⾏降级 拒绝服务 拒绝低优先级应⽤的调⽤随机拒绝部分请求的调⽤关闭功能 关闭部分不重要的服务服务内部关闭部分不重要的功能幂等性设计⾼可⽤的数据 CAP原理:⼀个提供数据服务的存储系统⽆法同时满⾜数据⼀致性(Consistency)、数据可⽤性(Availability)和分区耐受性(Partition Tolerance)这三个条件 数据⼀致性(Consistency):所⽤应⽤程序都能访问得到相同的数据 数据强⼀致数据⽤户⼀致数据最终⼀致数据可⽤性(Availability):任何时候,任何应⽤程序都可以读写访问分区耐受性(Partition Tolerance):系统可以跨⽹络分区线性伸缩数据备份 冷备份:简单、廉价,但不能保证数据最终⼀致,不能保证数据可⽤性热备份 同步热备⽅式(⼀般采⽤并发同步)异步热备⽅式失效转移 失效确认 ⼼跳检测应⽤程序访问失败报告访问转移数据恢复⾼可⽤⽹站的软件质量保证 ⽹站发布 发布过程中,每次关闭集中的⼀部分服务器,并在发布完成后⽴即可以访问,要保证整个应⽤的可⽤,不影响⽤户使⽤⾃动化测试预发布验证代码控制⾃动化发布灰度发布 每天只发布⼀部分服务器,观察运⾏稳定⽆故障后继续发布⼀部分服务器,持续⼏天才把整个集全部发布完毕,期间如果发现问题,只需回滚已发布的⼀部分服务器⽹站运⾏监控 监控数据采集 ⽤户⾏为⽇志收集 服务端⽇志收集客户端浏览器⽇志收集服务器性能监控运⾏数据报告监控管理 系统报警失效转移⾃动优雅降级
Chapter 6.永⽆⽌境:⽹站的伸缩性架构 ⽹站架构的伸缩性设计 不同功能进⾏物理分离实现伸缩 纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性横向分离(业务分割
后分离):将不同业务模块分离部署,实现系统伸缩性单⼀功能通过集规模实现伸缩应⽤服务器集的伸缩性设计 HTTP重定向负载均衡 HTTP重定向服务器 普通的应⽤服务器,其唯⼀的功能就是根据⽤户的HTTP请求计算⼀台真实的Web服务器地址,并将该Web服务器地址写⼊HTTP重定向响应中返回给浏览器DNS域名解析负载均衡 ⼤型⽹站总是部分使⽤DNS域名解析,利⽤域名解析作为第⼀级负载均衡⼿段,即域名解析得到的⼀组服务器并不是实际提供Web服务的物理服务器,⽽是同样提供负载均衡服务的内部服务器反向代理负载均衡(应⽤层负载均衡) 反向代理服务器提供负载均衡功能,管理⼀组Web服务器,将请求根据负载均衡算法转发到不同Web服务器上,Web服务器处理完成的响应也需要通过反向代理服务器返回给⽤户IP负载均衡 在⽹络层通过修改请求⽬标地址进⾏负载均衡响应数据包如何返回给负载均衡服务器? 负载均衡服务器在修改⽬的IP地址的同时修改源地址为⾃⾝负载均衡服务器作为真实物理服务器集的⽹关服务器数据链路层负载均衡 负载均衡数据分发过程中不修改IP地址,只修改⽬的MAC地址,通过配置真实物理服务器集所有机器虚拟IP和负载均衡服务器IP地址⼀致,从⽽达到不修改数据包的源地址和⽬的地址就可以进⾏数据分发的⽬的。(三⾓传输模式)⼤型⽹站使⽤最⼴的⼀种负载均衡⼿段,在Linux平台上最好的链路层负载均衡开源产品是LVS(Linux Virtual Server)负载均衡算法 轮询(Round Robin,RR):请求依次分发到每台服务器上加权轮询(Weighted Round Robin,WRR):在轮询的基础上,按照配置的权重将请求分发到每个服务器,⾼性能的服务器能分配更多请求随机(Random):请求被随机分配到各个应⽤服务器最少连接(Least Connections):记录每个应⽤服务器正在处理的连接数(请求数),将新到的请求分
发到最少连接的服务器上源地址散列(Source Hashing):根据请求来源的IP地址进⾏Hash计算,得到应⽤服务器分布式缓存集的伸缩性设计 Memcached分布式缓存集的访问模型 应⽤程序通过Memcached客户端访问Memcached服务器集,Memcached客户端主要由⼀组API、Memcached服务器集路由算法、Memcached服务器集列表及通信模块构成分布式缓存的⼀致性Hash算法 原始⼀致性Hash 将缓存服务器节点放置再⼀个长度为2^32的整数环上,然后根据需要缓存的数据的Key计算得到其Hash值,在Hash环上顺时针查距离这个Key的Hash值最近的缓存服务器节点,完成Hash映射查使⽤虚拟节点的⼀致性Hash 将每台物理缓存服务器虚拟为⼀组虚拟缓存服务器,将虚拟缓存服务器的Hash值放置在Hash环
上,Key在环上先到虚拟缓存服务器节点,再得到物理服务器的信息实践中,⼀台物理服务器虚拟为150个节点较合适,当然需根据具体情况具体对待数据存储服务器的伸缩性设计 关系数据库集的伸缩性设计 利⽤关系数据库的数据复制功能,对数据库进⾏简单伸缩⽀持数据分⽚的分布式关系数据库产品 AmoebaCobarNoSQL数据库的伸缩设计 HBase
Chapter 7.随机应变:⽹站的可扩展性架构 扩展性与伸缩性 扩展性(Extensibility):指对现有系统影响最⼩的情况下,系统功能可持续扩展或提升的能⼒伸缩性(Scalability):指系统能够通过增加(减少)⾃⾝资源规模的⽅式增强(减少)⾃⼰计算处理事务的能⼒构建可扩展的⽹站架构 设计⽹站可扩展架构的核⼼思想是模块化,并在此基础上,降低模块间的耦合性,提⾼模块的复⽤性模块分布式部
署后的聚合⽅式主要有:分布式消息队列和分布式服务利⽤分布式消息队列降低系统耦合性(模块不存在直接调⽤) 事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作分布式消息队列:将队列这种数据结构部署到独⽴的服务器上,应⽤程序可以通过远程访问接⼝使⽤分布式消息队列,进⾏消息存取操作,进⽽实现分布式的异步调⽤利⽤分布式服务打造可复⽤的业务平台 巨⽆霸⽹站 存在问题 编译、部署困难代码分⽀管理困难数据库连接耗尽新增业务困难解决⽅案 纵向拆分:将⼀个应⽤拆分为多个⼩应⽤,如果新增业务较为独⽴,那么直接将其设计部署为⼀个独⽴的Web应⽤系统横向拆分:将复⽤的业务拆分出来,独⽴部署为分布式服务,新增业务只需要调⽤这些分布式服务,不需要依赖具体的模块代码WebService的缺点 臃肿的注册与发现机制低效的XML序列化⼿段开销相对较⾼的HTTP远程通信复杂的部署与维护⼿段⼤型⽹站分布式服务的需求与特点 负载均衡失效转移⾼效的远程通信整合异构系统对应⽤最少侵⼊版本管理实时监控分布式服务框架设计可扩展的数据结构 关系型数据库僵硬的数据结构难以⾯对需求变更带来的挑战NoSQL数据库使⽤的ColumnFamily(列
族)设计可随意扩展利⽤开放平台建设⽹站⽣态圈 开放平台的⼀般架构 API接⼝:平台暴露给开发者使⽤的⼀组API,其形式可以是RESTful、WebService、RPC等各种形式协议转换:将各种API输⼊转换成内部服务可以识别的形式,并将内部服务的返回封装成API的格式安全:⾝份识别、权限控制、分级访问带宽限制审计:记录第三⽅应⽤的访问情况,并进⾏监控、计费等路由:将开放平台的各种访
问路由映射到具体的内部服务流程:将⼀组离散的服务组织成⼀个上下⽂相关的新服务,隐藏服务细节,提供统⼀接⼝供开发者调⽤
Chapter 8.固若⾦汤:⽹站的安全架构 道⾼⼀尺魔⾼⼀丈的⽹站应⽤攻击和防御 XSS攻击 XSS攻击即跨站点脚本攻击(Cross Site Script),指⿊客通过篡改⽹页,注⼊恶意的HTML脚本,在⽤户浏览⽹页时,控制⽤户浏览器进⾏恶意操作的⼀种攻击⽅式XSS攻击类型 反射型:攻击者诱使⽤户点击⼀个嵌⼊恶意脚本的链接,达到攻击的⽬的持久型:⿊客提交持有恶意脚本的请求,保存在被攻击的Web站点的数据库中,⽤户浏览⽹页时,恶意脚本被包含在正常页⾯中,达到攻击的⽬的防攻击⼿段 消毒:过滤和消毒处理⽤户输⼊的内容,对某些HTML危险字符进⾏转义,但需进⾏⽂本匹配后再转义,以免破坏⽤户输⼊的正常内容HttpOnly:浏览器禁⽌页⾯JS访问带⽤HttpOnly属性的Cookie。防⽌XSS攻击者窃取Cookie,可通过对Cookie添加HttpOnly属性,避免被攻击脚本窃取注⼊攻击 SQL注⼊攻击 攻击者在HTTP请求中注⼊恶意的SQL命令,服务器⽤请求参数构造数据库SQL命令时,恶意SQL被⼀起构造,并在数据库中执⾏防攻击⼿段 消毒:可通过正则表达式过滤请求数据中可能注⼊的SQL参数绑定:使⽤预编译⼿段,绑定参数OS注⼊攻击CSRF攻击 CSRF(Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法⽤户的⾝份进⾏⾮法操作。其核⼼是利⽤了浏览器Cookie或服务器Session策略,盗取⽤户⾝份。防攻击⼿段 表单Token:通过在请求参数中增加随机数的办法来阻⽌攻击者获得所有请求参数-->在页⾯表单中增加⼀个随机数作为Token,每次响
应页⾯的Token都不相同,从正常页⾯提交的请求会包含该Token值,⽽伪造的请求⽆法获得该值,服务器检查请求参数中Token的值是否存在且正确以确定请求提交者是否合法验证码:即在请求提交时,需要⽤户输⼊验证码,以避免在⽤户不知情的情况下被攻击者伪造请求Referer check:HTTP请求头的Referer域中记录着请求的来源,通过检查请求来源,验证其是否合法其他攻击和漏洞 Error Code(错误回显) 服务器端未处理的异常堆栈信息直接输出到客户端浏览器,给⿊客有机可乘防御⼿段:配置Web服务器参数,跳转500页⾯到专门的错误页⾯HTML注释提⽰性的注释可能会给⿊客造成攻击便利防御⼿段:程序发布前进⾏代码review或⾃动扫描,避免HTML注释漏洞⽂件上传 如果允许上传的⽂件是可执⾏的程序,攻击者可能利⽤该程序来获取服务端命令执⾏能防御⼿段:设置上传⽂件⽩名单、修改⽂件名、使⽤专门的存储等⼿段路径遍历 攻击者在请求的URL中使⽤相对路径,遍历系统未开放的⽬录或⽂件防御⼿段:将JS、CSS等静态资源⽂件部署在独⽴服务器、使⽤独⽴域名,其他⽂件不使⽤静态URL访问,动态参数不包含⽂件路径信息Web应⽤防⽕墙 开源的ModSecurity 商业产品SiteShell⽹站安全漏洞扫描 ⽹站安全漏洞扫描⼯具:构造具有攻击性的URL请求,模拟⿊客攻击⾏为,⽤以发现⽹站安全漏洞信息加密技术及密钥安全管理 信息加密技术 单向散列加密 指通过对不同输⼊长度的信息进⾏散列计算,得到固定长度的输出,散列计算过程是单向的,即不能对固定长度的输出进⾏计算从⽽获得输⼊信息常⽤的单向散列算法:MD5、SHA等应⽤场景:密码加密,⽣成信息摘要,计算具有⾼离散程度的随机数等对称加密 指加密和解密使⽤的密钥是同⼀个密钥(或者可以相互推算)常⽤的对称加密算法:DFS算法、RC算法等应⽤场景:⽤在信息需要安全交换或存储的场合,
如Cookie加密、通信加密等⾮对称加密 指加密和解密使⽤的密钥不是同⼀个,其中⼀个对外界公开,称为公钥,另⼀个只有所有者知道,称为私钥。⽤公钥加密的信息必须⽤私钥才能解开,反之,⽤私钥加密的信息则必须⽤公钥才能解开常⽤的⾮对称加密算法:RSA算法等应⽤场景:信息安全传输、数字签名等场合密钥安全管理⽅案 ⼀、把密钥和算法放在⼀个独⽴的服务器上,或者做成⼀个专⽤的硬件设施,对外提供加密和解密服务,应⽤系统通过调⽤这个服务,实现数据的加解密⼆、将加解密算法放在应⽤系统中,密钥则放在独⽴服务器中,实际存储时,密钥被切分成数⽚,加密后分别保存在不同存储介质中信息过滤与反垃圾 ⽂本匹配 正则表达式Trie算法(本质是确定⼀个有限状态⾃动机,根据输⼊数据进⾏状态转移)多级Hash表分类算法 贝叶斯分类算法等⽤户反垃圾、信息⾃动分类等⿊名单 Hash表实现布隆过滤器实现电⼦商务风险控制 风险 账户风险买家风险卖家风险交易风险风控 规则引擎:⼀种将业务规则和规则处理逻辑相分离的技术统计模型:使⽤分类算法或机器学习算法进⾏智能统计
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论