1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 大型网站技术架构(核心原理与案例分析)

大型网站技术架构(核心原理与案例分析)

时间:2022-12-18 08:33:03

相关推荐

大型网站技术架构(核心原理与案例分析)

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数据库的伸缩设计 HBaseChapter 7.随机应变:网站的可扩展性架构扩展性与伸缩性 扩展性(Extensibility):指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力伸缩性(Scalability):指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力构建可扩展的网站架构 设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性模块分布式部署后的聚合方式主要有:分布式消息队列和分布式服务利用分布式消息队列降低系统耦合性(模块不存在直接调用) 事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作分布式消息队列:将队列这种数据结构部署到独立的服务器上,应用程序可以通过远程访问接口使用分布式消息队列,进行消息存取操作,进而实现分布式的异步调用利用分布式服务打造可复用的业务平台 巨无霸网站 存在问题 编译、部署困难代码分支管理困难数据库连接耗尽新增业务困难解决方案 纵向拆分:将一个应用拆分为多个小应用,如果新增业务较为独立,那么直接将其设计部署为一个独立的Web应用系统横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务,不需要依赖具体的模块代码WebService的缺点 臃肿的注册与发现机制低效的XML序列化手段开销相对较高的HTTP远程通信复杂的部署与维护手段大型网站分布式服务的需求与特点 负载均衡失效转移高效的远程通信整合异构系统对应用最少侵入版本管理实时监控分布式服务框架设计 Dubbo......可扩展的数据结构 关系型数据库僵硬的数据结构难以面对需求变更带来的挑战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表实现布隆过滤器实现电子商务风险控制 风险 账户风险买家风险卖家风险交易风险风控 规则引擎:一种将业务规则和规则处理逻辑相分离的技术统计模型:使用分类算法或机器学习算法进行智能统计

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。