说说大型网站架构的核心要素

来源:互联网 发布:淘宝福利图2000张密码 编辑:程序博客网 时间:2024/05/23 15:38

架构,是最高层次的规划,难以改变的决定。这些规划与决定决定了事物发展的方向与最终蓝图。

而软件架构指的是:有关软件的整体结构与组件的抽象描述,可用于指导大型软件系统各个方面的设计。这些部分可以是具体的功能模块,也可以是非功能的设计与决策,它们共同组成了软件系统的架构。

下面我们会说说大型网站架构的五大核心要素:性能、可用性、伸缩性、扩展性以及安全性。

1 性能

性能是一个重要的指标。一个打开缓慢的网站会导致严重的用户流失,所以很多时候性能问题是架构需要优化升级的触发器。

优化手段很多,从浏览器一直到数据库都可以进行性能优化:

  • 浏览器 - 浏览器缓存、页面压缩、合理布局页面、减少 Cookie 传输、CDN以及反向代理
  • 应用服务器 - 本地缓存、分布式缓存、异步操作发送消息以及应用服务器集群
  • 代码 - 多线程、内存管理
  • 数据库服务器 - 索引、缓存以及SQL 优化

衡量性能还有一些指标(响应时间、系统吞吐量、性能计数器等),通过监控这些指标,可以分析系统的瓶颈,预期网站的容量,并对异常指标进行报警,保障系统可用性。

要考虑高并发访问的情况下,超出负载设计能力时会出现的性能问题;还要注意在访问压力不均衡的情况下保持稳定的性能。

2 可用性

虽然几乎所有的网站都宣称 7 * 24 可用,但实际上不可能做到。因为总会有一些故障时间。扣除这些故障时间后,就是网站的总可用时间。这个时间就可以换算为网站的可用性指标。一些知名的大型网站的可用性超过 99.99%。

大型网站通常会有上万台服务器,所以必然会出现某些服务器宕机。而当服务器宕机时,如果能够保证服务仍然可用,就实现了高可用的目标。

高可用的手段是冗余,应用被部署在多台服务器上,数据也存储在多台服务器上并相互备份,这样任何一台服务器宕机都不会影响应用的整体可用性,也不会导致数据丢失。

多台应用服务器通过负载均衡设备组成的集群,共同对外提供服务。这样任何一台服务器宕机,只要把请求切换到其他服务器即可实现高可用。但要注意这种方式无法保存请求的会话信息!

存储服务器上,对数据实时备份。这样服务器宕机时,就可以把数据访问转移到其他可用的服务器上并进行数据恢复。

高可用还需要软件开发过程的质量保证,通过预发布验证、自动化测试、自动化发布以及灰度发布,降低把故障引入线上环境发生的概率。

衡量一个系统架构设计是否满足高可用的目标,就是假设系统中任何一台或多台服务器宕机,或出现其他各种不可预期的问题时,系统整体是否依然可用。

3 伸缩性

伸缩性指的是:通过不断向集群加入服务器的手段来缓解不断上升的用户并发访问压力以及不断增长的数据存储请求。

衡量伸缩性的标准是:
1. 是否可以用多台服务器构成集群?
2. 是否容易加入新的服务器?
3. 加入的新服务器是否可以提供无差别服务(与原来的服务器相比)?
4. 可以容纳的总服务器数量是否有限制?

应用服务器集群,如果服务器上不保存数据,那么所有的服务器都是对等的,通过使用负载均衡设备就可以向集群不断加入新的服务器。

缓存服务器集群中,新加入的服务器会导致缓存路由失效,所以需要改进缓存路由算法来保证缓存数据的可访问性。

关系型数据库本身很难做到大规模的集群,所以必须在数据库之外来实现。

而 NoSQL 数据库就是为海量数据而生的,所以它们对伸缩性的支持非常好。

4 扩展性

网站的架构要能够快速响应需求的变化。

衡量扩展性好坏的标准是:
1. 增加新的业务产品时,是否可以对现有产品无影响,不需要改动或者只需要很少的改动就可以上线新产品?
2. 产品之间很少耦合。

提高扩展性的手段是:
1. 事件驱动架构 - 利用消息队列来实现,把用户的请求以及其他业务事件构成消息,发布到消息队列,然后消息的处理者作为消费者从消息队列中获取消息进行处理。
2. 分布式服务 - 把普通业务与可复用服务分离,使用分布式服务框架来调用。可复用服务升级时,通过提供多版本服务即可提供对应用的透明升级。
3. 开发平台接口 - 吸引第三方开发者来调用网站的服务,来扩展业务。

5 安全性

衡量安全性的标准是:对于现存以及潜在的各种攻击与窃取手段,是否有可靠的应对策略。

原创粉丝点击