大型网站架构设计

大型网站架构设计特点

高并发、大流量
高用性

7*24小时可用,如果因为某一时间节点造成的不可用,就会上热搜、比如美团2021年外卖不能下单。
网站高可用的主要手段是冗余+故障转移,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失,但是一个前提条件是应用服务器上不能保存请求的会话信息。否则服务器宕机,会话丢失,即使将用户请求转发到其他服务器上也无法完成业务处理。
对于存储服务器,由于其上存储着数据,需要对数据进行实时备份,当服务器宕机时需要将数据访问转移到可用的服务器上,并进行数据恢复以保证继续有服务器宕机的时候数据依然可用。
除了运行环境,网站的高可用还需要软件开发过程的质量保证。通过预发布验证、自动化测试、自动化发布、灰度发布等手段,减少将故障引入线上环境的可能,避免故障范围扩大。衡量一个系统架构设计是否满足高可用的目标,就是假设系统中任何一台或者多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用。
具体方案:https://zhuanlan.zhihu.com/p/88152015

安全性

由于互联网的开放性,使得互联网更容易受到攻击、密码泄露、信息泄露也会发生。
互联网是开放的,任何人在任何地方都可以访问网站。网站的安全架构就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。衡量网站安全架构的标准就是针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。

伸缩性

大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据。网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。
对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新加载,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃。需要改进缓存路由算法保证缓存数据的可访问性。
关系数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群。之前入职的一个公司DBA能够随时增加一台DB服务器做到伸缩。据说是用一种物理镜像,能在很快的时间就做到伸缩。
至于大部分NoSQL数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常都非常好,可以做到在较少运维参与的情况下实现集群规模的线性伸缩。

易扩展

不同于其他架构要素主要关注非功能性需求,网站的扩展性架构直接关注网站的功能需求。网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展架构主要的目的。
衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。
网站可伸缩架构的主要手段是事件驱动架构和分布式服务。
事件驱动架构在网站通常利用消息队列实现,将用户请求和其他业务事件构造成消息发布到消息队列,消息的处理者作为消费者从消息队列中获取消息进行处理。通过这种方式将消息产生和消息处理分离开来,可以透明地增加新的消息生产者任务或者新的消息消费者任务。
分布式服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增产品可以通过调用可复用的服务实现自身的业务逻辑,而对现有产品没有任何影响。可复用服务升级变更的时候,也可以通过提供多版本服务对应用实现透明升级,不需要强制应用同步变更。
大型网站为了保持市场地位,还会吸引第三方开发者,调用网站服务,使用网站数据开发周边产品,扩展网站业务。第三方开发者使用网站服务的主要途径是大型网站提供的开放平台接口。

高性能

性能是一个网站的重要指标,除非没得选择比如12306,否则用户无法忍受一个响应慢的网站,一个打开缓慢的网站会使用户严重的流失,正因为性能问题无处不在,所以优化网站性能的手段也非常多,从浏览器到数据库,影响用户请求的所有环节都可以进行性能优化。
在浏览器端,可以通过浏览器缓存,页面压缩、合理布局、减少Cookie传输等手段改善性能,还可以使用cdn,还可以将网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力。
在应用服务器端,可以使用服务器本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力。也可以通过异步操作将用户的请求发送至消息队列等待后续任务处理,而当前请求直接返回响应给用户。
在网站有很多用户高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能。
在代码层面,也可以通过使用多线程、改善内存管理等手段优化性能。
在数据库服务器端,索引,缓存,sql优化等性能优化手段都已经比较成熟,而方兴未艾的NoSql数据库通过优化数据模型,存储结构,伸缩特性等手段在性能方面的优势也日渐趋势明显。
衡量网站性能有一系列指标,重要的有响应时间、TPS、系统性能计数器等。
对于网站而言,性能符合预期仅仅是必要条件,因为无法预知网站可能会面临的访问压力,所以必须要考察系统在高并发访问情况下,超出负载设计能力的情况下可能会出现的性能问题。网站需要长时间持续运行,还必须保证系统在持续运行且访问压力不均匀的情况下保持稳定的性能特性。

海量数据

因为用户可能是以亿为单位的,需要存储大量的数据、图片等信息,所以需要大量的服务器在背后支持。
服务器的选择
应用服务器
需要处理大量的业务,计算等,所以需要更快更强大的CPU
数据库服务器
需要存储和数据缓存,所以需要更快的硬盘以及更大的内存
文件服务器
需要存储大量的文件,所以需要更大的硬盘。

改善网站性能

  1. 使用缓存减少数据库的压力
    二八原则,世界上的财富都被20%的人占用了,同样例如淘宝那些爆单的也是20%,所以我们把热数据放到缓存里面,这样能减少数据库的很大的压力,同时也能提高性能。
  2. 增加应用服务器
    随着访问人数增加、虽然数据库的压力能够使用缓存解决,但是应用服务器也会因为人数增加造成访问不了,这个时候可以选择增加服务器,并不要一味地增加服务器的配置。
  3. 数据库读写分离
    虽然我们使用了缓存减少了数据库的压力,但是我们目前并不是把所有的数据都放在缓存里面了,而且数据库还会面临写的压力。而大多数数据库都提供了主从热备份的功能,通过多台服务器,一个为主其他为从,主服务写入,其他服务器服务读取,这样也能减少数据库的压力。
  4. 数据库分库分表
    随着数据的增多,现如今面临的问题是单张表的数据超过了百万,甚至可能到达千万以上,如果到了一定数据量数据库查询就会变慢(比如mysql innodb引擎,3阶的B+树有能就会变成4阶),这个时候我们就要考虑到拆分表,按照一定的规则,将所属的数据拆分到多个表中或者多个库中,这样能一定程度的提高数据库的访问速度。分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用
  5. cdn、nginx反向代理
    CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
  6. NoSql和搜索引擎技术
    随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。
  7. 业务拆分
  8. 分布式服务
    随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致存数据库接资源不足,拒绝服务。既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。
网站架构模式
  1. 分层
  2. 分割
  3. 分布式
  4. 集群
  5. 缓存
  6. 异步
  7. 冗余
    即使QPS很小的服务也最少需要2个服务器做一个集群,可以其中一个有问题就立马切换到另外一个,以及数据库也要定期做备份
  8. 自动化
    做到自动化发布等
  9. 安全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值