【大型网站架构】03 核心架构要素

203 阅读5分钟

本文是《大型网站技术架构:核心原理与案例分析》的学习笔记

架构:最高层次的规划,难以改变的决定

软件架构:软件整体结构和组件的抽象描述,用来指导大型软件系统各方面的设计。

除了系统功能需求外,还需要关注性能、可用性、伸缩性、扩展性和安全这五个架构要素。在架构设计过程中要平衡这5个要素之间的关系以实现需求和架构目标。这些要素也用来衡量一个软件架构设计的优劣。

性能

性能是网站的一个重要指标,网站响应速度缓慢会导致严重的用户流失。任何软件架构设计方案都必须考虑性能带来的问题。

优化网站性能的手段有很多,用户请求经过的所有环节都可以进行优化:

  • 浏览器:浏览器缓存、页面压缩、合理布局页面、减少Cookie传传输;CDN、反向代理
  • 应用服务器:本地缓存、分布式缓存、异步(请求发送至消息队列)、集群
  • 代码:多线程、改善内存管理
  • 数据库:索引、缓存、SQL优化;NoSQL数据库(优化数据模型、存储结构、伸缩性等)

衡量网站性能有一系列指标:响应时间、TPS、系统性能计数器等。通过这些指标可以确定系统设计是否达到目标。通过监控这些指标可以分析系统瓶颈、预测网站容量,并对异常指标进行报警,保障系统可用性。

大型网站需要考虑网站超出负载设计能力情况下可能出现的性能问题,并保证系统在持续运行且访问压力不均衡情况下保持稳定的性能特性。

可用性

对大型网站而言,网站宕掉、服务不可用是个重大事故。几乎所有网站都保证7*24小时可用,但实际情况下不可能达到完全的7*24可用。

网站的可用性指标,可以用网站排除故障时间后的总可用时间来换算。一些知名大型网站可以做到4个9以上,及可用性超过99.99%。

高可用设计的目标:服务器宕机时,服务或应用仍然可用。

高可用的主要手段是冗余,将应用部署在多台服务器上共同提供服务,数据存储在多台服务器上相互备份,当服务器宕机时,将请求和数据访问转移到其他服务器。

应用服务器上不能保存请求的会话信息(宕机会导致会话丢失)。

除了运行环境,网站的高可用还要软件开发过程的质量保证。通过预发布验证、自动化测试、自动化发布、灰度发布等手段,将少将故障引入线上环境的可能,避免故障范围扩大。

伸缩性

伸缩性是指通过不断向集群添加服务器的手段来缓解不断上升的并发访问压力和不断增长的数据存储需求

衡量架构伸缩性的主要标准:能否构建集群;能否向集群添加新的服务器;增减服务器是否影响服务;可容纳的服务器数量是否有限。

对于应用服务器集群,所有服务器都是对等的(服务器上不保存数据),使用合适的负载均衡设备就可以向集群中不断加人服务器。

对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,导致集群中的大部分缓存数据都无法访问。需要改进缓存路由算法保证缓存数据的可访问性。

关系数据库虽然支持数据复制、主从热备等机制,但很难做到大规模集群的可伸缩性。集群伸缩性方案要在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成集群。

NoSQL数据库产品,就是为海量数据而生,因此伸缩性很好。

扩展性

网站可扩展架构的目的是,能够快速响应需求变化。

衡量网站架构扩展性的主要标准是,在网站增加新的业务产品时,是否可以实现对现有产品透明无影响

网站可扩展架构的主要手段是事件驱动架构分布式服务

事件驱动架构通常利用消息队列实现。通过将消息(请求或其他业务事件)产生和消息处理分离开来,可以透明的增加新的消息生产者任务和消息消费者任务。

分布式服务是将业务和可服用服务分离开来。新增产品可以通过调用可复用的服务实现自身的业务逻辑,而对现有产品没有任何影响。 可复用服务升级变更时,也可通过提供多版本服务对应用实现透明升级,不需要强制应用同步变更。

安全

网站的安全架构就是保护网站不受恶意访问和攻击,保护重要的数据不被窃取

衡量网站安全架构的标准是,针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。