ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:151.03KB ,
资源ID:3543303      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3543303.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大型网站技术架构笔记1.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

大型网站技术架构笔记1.docx

1、大型网站技术架构笔记1一、 大型网站架构演化 在网站还很小的时候就去追求网站的架构是舍本逐末,得不偿失。而是伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。驱动大型网站技术发展的主要力量是网站的业务发展。 如果能控制住并发访问的量,很多棘手的技术问题也就不是什么问题了。1. 初始阶段 一台服务器,应用、DB、文件都在一块,使用经典的LAMP模式构建整个站点。 优点很明显,开发部署都简单,船小好掉头,做不起来也亏不了多少。2. 应用服务与数据服务分离 随着访问量的增长,出现问题了:web性能变差,数据存储空间不够。这时候需要更多的服务器,首要任务是将数据库分离出来,单独占用一台服务器,如果

2、文件读写多,需要增加文件服务器;不同的服务器对硬件的要求也不尽相同。 应用服务器需要处理大量业务逻辑,这需要更强的CPU; 数据库服务器需要快速磁盘检索和数据缓存,这需要更快的硬盘和更大的内存; 文件服务器需要存储用户上传的文件,需要更大的硬盘;3. 使用缓存改善网站性能 访问量持续增长,web性能再次变差。考虑使用缓存改善网站性能,web的访问规律,80%业务访问集中在20%的数据上,把一小部分数据缓存在内存中,数据库压力得到有效缓解。 缓存可通过以下方式增加: 增加应用服务器本地缓存,这个最直接,也最简单; 增加远程分布式缓存集群,当本地的内存不足以放下需要缓存的数据时,就只有通过分布式;

3、4. 应用服务器集群化改善网站的并发处理能力 随着网站的成长,单一应用服务器成为网站瓶颈。 解决方案:应用服务器集群化提高网站并发处理能力,如果有更多的用户,就在集群中加入更多的应用服务器。 做成集群的关键是增加负载均衡服务器来调度应用集群。5. 数据库读写分离 问题:当增加缓存之后,随着访问量的持续增长,数据库再次出现问题:数据库负载压力过高。 解决方案:数据库读写分离,利用数据库主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。6. 使用反向代理和CDN 问题:网站做大,全国甚至全球各区域的访问量都来了,但是各区域的访问速度差别巨大。 解决方案

4、:使用反向代理和CDN,CDN和反向代理基本原理都是缓存,CDN部署在网络提供商的机房,使用户从最近的节点获取数据。而反向代理则部署在网站的中心机房,用户请求时首先访问到反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,则直接返回给用户。7. 使用分布式文件系统和分布式数据库系统 问题:应用集群如果将session管理做好,或做成无状态的应用集群,可达到线性伸缩;而数据库的压力却不是很好解决。 解决方案:使用分布式数据库拆分,可使用的方法有,单表拆分:将相同的表放到不同的库中,从而降低单个数据库的结点的负载;这样带来的问题就是不同库中的表无法做join操作;另一种方法就是按业务拆分,将

5、属于同一业务的表划分到一个库中,从而有效降低数据库负载,同时在业务逻辑实现上不至于过于复杂;8. 使用NoSQL和搜索引擎 问题:出现海量数据存储和检索的需求。 解决方案:使用NoSQl产品分布式部署来支持海量数据的查询和存储,如搜索引擎;9. 业务拆分 按照业务来划分子系统,按产品线划分系统,通过一个超链接建立关系。10. 分布式服务 将一些共用的业务提取出来,独立部署。如会员中心。二、 大型网站架构模式1. 分层 将系统在横向维度上切分成几个部分。最基本的分层一般分为以下三层: 应用层:面向终端用户的应用; 服务层:为应用层提供服务的通用服务; 数据层:数据存储层; 禁止跨层次的调用(应用

6、层直接调用数据层)及逆向调用(数据层调用服务层)。2. 分割 分割是从纵向对软件进行切分。通过分割网站的功能和业务,大而化小,将不同的模块分布式部署,从而提高并发处理能力和功能扩展能力;3. 分布式 分布式需要注意的问题: 分布式调用增加网络开销; 服务器多了,服务器宕机概率增大; 如何保持分布式存储的数据的一致性; 分布式事务难以保证; 分布式部署结构复杂,带来开发管理维护困难;(1)分布式应用和服务 分层和分割后的应用分布式部署,提升网站性能和并发性、加快开发和发布速度,减少数据库连接资源,增加网站的伸缩性和扩展性;(2)分布式静态资源 (动静分离) 这是最为简单的分布式,将网站中的静态资

7、源分离出去,部署到别的机器上, 减轻应用服务器压力;这种分离最为简单,而且性能提升明显;同时,采用独立域名,加大浏览器的并发加载量,让网站更快的呈现在用户面前;web优化中有这么一个优化顺序,先前端后后台,前端优化是需要时间最少而见效最快的方式。(3)分布式数据和存储 包括关系数据库的分布式和NoSQL的分布式;关系数据库的分布式,可以细分为分表和数据分片;数据库的分布式不是那么简单,阿里的OceanBase项目貌似是做到了关系数据库的分布式;Nosql的分布式相对简单许多,例如新浪的redis使用场景,就是分布式存储微博内容;(4)分布式计算 以Hadoop和MapReduce为代表的分布式

8、计算,主要应用场景为日志分析、索引建立,数据挖掘等,实时处理的分布式计算还是见得少;4. 集群 即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。5. 缓存(1)CDN 即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商那里,在这里缓存一些静态资源。(2)反向代理 反向代理属于前端架构的一部分,部署在网站的前端,用户最先访问的就是反向代理服务器,在这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。(3)本地缓存 在服务器本地缓存热点数据。(4)分布式缓存 需要缓存的内容多了,单机装不下,就得考虑分布式缓存。下图展

9、示了用户的WEB请求中会遇到的缓存;CDN提供最基础的缓存(静态化的页面和静态资源(css、js等);反向代理提供与CDN类似的数据;WEB服务器的缓存提供片段化的缓存和警惕资源缓存,页面中变化的部分则需要通过web服务器生成,其中涉及到调用应用服务器;应用服务器中的缓存为计算结果的缓存,主要是内容缓存,基础数据缓存;6. 异步 单一服务器上使用多线程共享内存队列来实现异步,在集群中通常使用分布式消息队列来实现,比如我们用到的MQ、ZeroQ等;可以达到提高系统可用性,加快网站响应速度,消除并发访问高峰。7. 冗余 考虑到数据安全,备份必不可少;冷备份没有什么好说的,主要是热备,架构的设计中需

10、要考虑数据的热备;8. 自动化 自动化应该是程序员最应该掌握的基础技能;一般而言,自动化要求的技术含量不是很高,但却是长期实践的经验结晶;自动化能有效的降低公司运营成本,提升程序员的生活质量,想想就欢乐,重复的工作都交给机器来做,创造性的工作才需要人来参与嘛;自动化主题广泛,大致包含以下方面: 发布过程自动化 自动化代码管理 自动化测试 自动化部署 自动化监控 自动化报警 自动化失效转移和恢复 自动化降级 自动化分配资源9. 安全 加密,验证码,过滤、风控。三、 网站的高性能架构-瞬时响应1. 性能测试指标(1)响应时间 指应用执行一个操作从发出请求到最后收到响应数据所需要的时间。如下列出了系

11、统常用的操作响应时间表:操作响应时间网络传输2Kb数据1微秒Java程序本地方法调用几微秒从内存读取1M数据十几微秒从SSD磁盘顺序读取1M数据0.3毫秒从远程分布式Redis读取一个数据0.5毫秒从机械磁盘顺序读取1M数据2毫秒机械磁盘一次寻址定位4毫秒数据库查询一条记录(有索引)十几毫秒打开一个网站几秒 实践中计算响应时间通常是通过平均时间计算的平均值。(2)并发数 指系统能够同时处理请求的数目,这个数字也反映了系统的负载性能。对于网站而言,并发数指网站用户同时提交请求的用户数目。(3)吞吐量 指单位时间内系统处理的请求数量。可用“请求数/秒”或“页面数/秒”或“访问人数/天”或“处理业务

12、数/小时”等来衡量。 TPS(每秒事物数)是吞吐量的一个常用量化指标。HPS(每秒HTTP请求数)、QPS(每秒查询数)。(4)性能计数器 指操作系统的一些数据指标如System load(系统负载),CPU使用率、内存使用率、磁盘等使用情况。2. 性能测试方法 性能测试(合理范围):在资源可接受范围内,是否能达到性能预期。 负载测试(性能最高时的临界值):对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值。这时继续施压系统的处理能力将会下降。 压力测试(最大能承受的访问值):对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。

13、稳定性测试(长时间运行):给系统加载一定业务压力,使系统运行一段较长时间,检测系统是否稳定。3. 性能测试报告并发数响应时间(ms)TPS错误率(%)Load内存(GB)备注1050020058性能测试208003001010性能测试3010004021514性能测试40120045203016负载测试60200030405016压力测试80超时0100不详不详压力测试 Load为正在执行和等待执行的进程数量。4.Web前端优化(1)浏览器访问优化 减少HTTP请求数,主要可通过合并CSS、JavaScript、图片(CSS偏移)。 使用浏览器缓存,通过设置HTTP头中的Cache-Contr

14、ol和Expires的属性设置浏览器缓存,缓存时间可以是几天,也可以是几个月。当需要及时应用到客户端浏览器时,可通过改变文件名来实现。而且在更新文件的时候不要全部文件一起更新,避免用户集中刷新文件。 启用压缩,在服务器端对文件进行压缩,在浏览器端对文件解压缩,如GZip。文本文件的压缩效率可达80%以上。但是压缩对服务器和浏览器产生一定的压力,带宽良好的时候就需要权衡考虑了。 CSS放在页面最上面,JavaScript放在页面最下面(除非页面解析时就需要用到JS)。 减少Cookie传输的数据量。静态资源使用独立域名访问,避免请求静态资源时发送Cookie,减少Cookie传输的次数。(2)C

15、DN加速 CDN(Content Distribute Network,内容分发网络)的本质仍然是一个缓存,只是部署在离用户最近的网络运营商的机房,一般缓存的都是静态资源。(3)反向代理 代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求,访问请求必须经过代理服务器。除了能够保护网站安全的作用以及负载均衡的作用外,反向代理还能够提供缓存作用,当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其它用户访问该静态内容的时候,就可以直接从反向代理服务器返回。5. 应用服务器性能优化 应用服务器就是处理网站业务的服务器,网站的业务代码都部署在这里,主要优化手段有缓

16、存、集群、异步等。(1)分布式缓存 当网站遇到性能瓶颈时,第一个想到的解决方案就是使用缓存。 缓存指将数据存储在相对较高访问速度的存储介质中,并且无需重复计算即可直接使用。时间复杂度为O(1)。 合理使用缓存: 频繁修改的数据,数据更新前至少读取两次,缓存才有意义; 没有热点的访问,不遵循二八定律,即大部分数据访问并没有集中在小部分数据上,那么缓存就没有意义,因为大部分数据还没有被再次访问就已经被拉出缓存了; 数据不一致与脏读; 缓存可用性,缓存数据丢失或者缓存不可用不应该影响到应用程序的处理。因缓存服务崩溃导致库压力增大而宕机使整个网站不可用,这种情况被称作缓存雪崩。缓存热备(违反了缓存的设

17、计初衷),使用分布式缓存保证大部分缓存可用; 缓存预热,在缓存系统启动时就把热点数据加载好; 缓存穿透,如果因为不恰当的业务,或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,对数据库造成压力。一个简单的对策是将不存在的数据也缓存起来(其值value值为null)。 分布式缓存指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其具体架构有两种,一种是以JBoss Cache伪代码的需要更新同步的分布式缓存,一种是以Memcached为代表的不互相通信的分布式缓存。 Jboss Cache 的分布式缓存在集群中的所有服务器中保存相同的缓存

18、数据,当某台服务器有缓存更新的时候,会通知集群中其他机器跟新缓存数据。优点是应用程序可以从本地快速的获取缓存数据,但当集群规模较大的时候,缓存更新信息需要通过到集群所有机器,其代价可想而知。(2)异步操作 为了改善网站的扩展性,可以使用消息队列将调用异步化。 任何可以晚点做的事件都应该晚点再做。(3)使用集群 在网站高并发访问的情况下,使用负载均衡技术为一个应用构建一个由多台服务器组成的集群,将并发访问请求分发到多台服务器上处理。(4)代码优化 多线程: 启动线程数=任务执行时间 / (任务执行时间 - IO等待时间) * CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反

19、比。如果任务都是CPU计算任务,那么线程数最多不超过CPU内核数,因为启动再多线程,CPU也来不及调度。 线程安全问题,将对象设计为无状态对象(指对象本身不存储状态信息,即对象无成员变量,或者成员变量也是无状态对象),使用局部对象(每个进入该方法的线程私有),并发访问资源时使用锁。 资源复用(单例或对象池): 数据库连接,网络通信连接、线程、复杂对象 数据结构: 垃圾加收:6. 存储性能优化 机械硬盘是目前最常用的一种硬盘,通过马达驱动磁头臂,带到磁头到指定的磁盘位置访问数据,随机访问时性能很差。需要保证数据在不断更新、插入、删除后依然有序,传统做法是使用B+树。 固态硬盘(SSD或Flash硬盘),数据存储在可持久记忆的硅晶体里,因此可以像内存一样快速随机访问,而且具有更小的功耗和更少的磁盘震动与噪声。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1