读《大型网站技术架构》总结之概述篇

读《大型网站技术架构》总结之概述篇

一、大型网站架构演化

与传统企业应用系统相比,大型互联网应用系统有以下特点:

  • 高并发、大流量
  • 高可用
  • 海量数据
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣
  • 需求快速变更,发布频繁
  • 渐进式发展

大型网站架构演化发展历程:

  • 初始阶段的网站架构

应用程序、文件和数据库放在一个Linux操作系统下

  • 应用服务和数据服务分离

将应用程序,文件服务器和数据库服务器解耦

  • 使用缓存改善网站性能

为缓解数据访问压力,使用缓存。网站上的缓存分为两种,缓存在应用服务器上的本地缓存和专门的分布式缓存服务器上的远程缓存。

  • 使用应用服务器集群改善网站的并发处理能力

增加服务器分担原有服务器的访问和存储压力,实现系统的可伸缩性能。可以通过负载均衡调度服务器,将来自于用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器中。

  • 数据库读写分离

通过主从复制的方式,将主服务器的数据复制到从服务器中,通常在应用服务器端使用专门的数据访问模块,使得数据库读写分离对应用透明。

  • 使用反向代理和CDN加速网站响应

加速网站访问的速度,也减轻后端服务器的负载压力:主要手段有使用CDN和反向代理。这两者的基本原理都是缓存。区别在于CDN部署在网络提供者的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

  • 使用分布式文件系统和分布式数据库系统

分布式文件系统+分布式数据库。

分布式数据库的拆分手段是将业务进行拆分,将不同业务的数据库部署到不同的物理服务器中。

  • 使用Nosql和搜索引擎

Nosql+搜索引擎。

  • 业务拆分

为应对于复杂的业务场景,将整个网站业务分成不同的产品线,分归不同的业务团队负责。如淘宝的首页、商铺、订单、卖家、买家等产品线。每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都能指向的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整的系统。

  • 分布式服务

业务拆分地越来越小,存储系统越来越大,部署维护起来越来越苦难,由于所有的应用都要和所有的数据库系统连接,数据库规模远远小于连接数,数据库资源就严重不足,拒绝服务。这时每个应用系统都需要执行许多相同的业务操作,如用户管理、商品管理,就可以将这些公用的业务提取出来,独立部署。由这些可以复用的业务连接数据库,提供公用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。

大型网站架构演化的价值观:

  • 大型网站架构技术的核心价值是随着网站所需灵活应对;

  • 驱动大型网站技术发展的主要力量是网站的业务发展。

网站架构的设计误区:

  • 一味追随大公司的解决方案;

  • 为了技术而技术;

  • 企图用技术解决所有问题。

二、大型网站架构模式

目的:所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠运行灯一系列问题与挑战,为此,在实践中提出了许多解决方案,以实现网站高性能、高可靠性、易伸缩、可扩展、安全等各种技术架构目标。

1、分层

将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对于下层的依赖和调用组成一个完整的系统。

  • 应用层

负责具体业务和视图展示,如网站首页及搜索输入和结果展示;

  • 服务层

为应用层提供服务支持;

  • 数据层

提供数据存储访问服务,如数据库、缓存、文件和搜索引擎等。

2、分割

分割不同于分层,分割是在纵向方面对于软件进行切分。

网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分隔开来,包装成高内聚低耦合的模块单元,不仅有助于软件的开发维护也便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
大型网站分隔的粒度可能会很小。比如在应用层,将不同业务进行分隔,例如将购物、论坛、搜索、广告分隔成不同的应用,有对立的团队负责,部署在不同的服务器上。

3、分布式

对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,将不同模块部署在不同的服务器上,通过远程嗲用协同工作,分布式意味着可以使用更多的计算机完成同样的功能。

分布式方案主要有以下几种:

  • 分布式应用和服务

将分层和分隔后的应用和服务模块分布式部署,可以改善网站性能和并发性、加快开发和发布速度、减少数据库连接资源消耗。

  • 分布式静态资源

网站的静态资源如JSCSSLogo图片等资源对立分布式部署,并采用独立的域名,即人们常说的动静分离。静态资源分布式部署可以减轻应用服务器的负载压力;通过使用独立域名加快浏览器并发加载的速度。

  • 分布式数据和存储

大型网站需要处理以P为单位的海量数据,单台计算机无法提供如此大的存储空间,这些数据库需要分布式存储。

  • 分布式计算

目前网站普遍使用HadoopMapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算。

此外还有支持网站线上服务器配置实时更新的分布式配置;分布式环境下实现并发和协同的分布式锁;支持云存储的分布式文件系统等。

4、集群

虽然分布式已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块(如网站的首页),还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共用对外提供服务。

服务器集群能够为相同的服务提供更多的并发支持,因此当有更多的用户访问时,只需要向集群中加入新的机器即可;
另外可以实现当其中的某台服务器发生故障时,可以通过负载均衡的失效转移机制将请求转移至集群中其他的服务器上,因此可以提高系统的可用性。

5、缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度。

  • CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网站请求总是先到达他的网络服务商那里,在这里缓存网站的一些静态资源(较少变化的数据),可以就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在CDN;

  • 反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。

  • 本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库;

  • 分布式缓存:大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能承受的,所以处了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据;

使用缓存有两个条件:

  • 访问数据热点不均衡,即某些频繁访问的数据需要放在缓存中;
  • 数据在某个时间段内有效,不过很快过期,否在会因为数据过期而脏读,影响数据的正确性。

6、异步

业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。

  • 单一服务器:可以通过多线程共享内存队列的方式实现异步
  • 分布式系统中:多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看成内存队列的分布式部署。

异步架构的典型就是生产者消费者方式,两者不存在直接调用。

异步的作用:

  • 提高系统可用性

  • 加快网站响应速度

  • 消除并发访问高峰

7、冗余

服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务器和数据移植到其他机器上。

备份:冷备份(数据库定期备份,存档保存)和热备份(数据库进行主从分离,实现同步)。

8、自动化

发布过程自动化、自动化代码管理、自动化测试、自动化安全监测、自动化部署、自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源等。

9、安全

  • 通过密码手机校验码进行身份认证;
  • 登录、交易需要对网络通信进行加密
  • 为了防止机器人程序滥用资源,需要使用验证码进行识别;
  • 对常见的用于攻击网站的XSS攻击、SQL注入需要编码转换;垃圾信息需要过滤等;
  • 对于交易转账等重要操作根据交易模式和交易信息进行风险控制。

三、大型网站核心架构要素

除了网站的当前系统的功能需求外,软件架构还需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。

1、性能

性能是网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能带来的性能问题,也正因为性能问题几乎无处不在,所以优化网站性能的手段也非常多。

  • 浏览器端:可以通过浏览器缓存页面压缩传输合理布局页面减少Cookie传输等手段,甚至可以使用CDN加速资源相应功能
  • 应用服务器端:可以使用服务器本地缓存分布式缓存,也可以通过异步操作方式来加快响应,在高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能。
  • 数据库服务器端:可用使用索引优化缓存SQL性能优化等手段,还可以使用**NoSQL数据库**来优化数据模型、存储结构等。

衡量网站性能有一系列指标,重要的有响应时间、TPS、系统性能计数器等,通过这些指标以确定系统设计是否达到目标。

2、可用性

可用性即能够不间断提供服务的时间。几乎所有网站都承诺7×24小时可用,但事实上任何网站都不可能达到完全的7×24,总会有一些故障时间,扣除这些故障时间,就是网站的可用时间。一些大型网站可以做到49以上的可用性,也就是99.99%

网站高可用的主要手段就是冗余,应用部署在多台服务器上同时提供服务,数据存储在多台服务器上相互备份,任何一台服务器都不会影响应用的整体可以,通常的实现手段即把多台服务器通过负载均衡设备组成一个集群

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

3、伸缩性

大型网站需要面对大量用户的高并发访问存储海量数据,网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断整体上市用户并发访问压力和不断增长的数据存储需求。

衡量架构伸缩性的主要标准

  • 是否可用多台服务器构建集群?
  • 是否容易向集群中添加新的服务器?
  • 加入新的服务器后是否可以提供和原来的服务器无差别的服务?
  • 集群中可容纳的总服务器数量是否有限制?

解决手段:

  • 应用服务器:使用合适的负载均衡设备;

  • 缓存服务器:改进缓存路由算法保证缓存数据的可访问性;

  • 数据库服务器:集群和Nosql

4、扩展性

不同于其他架构要素主要关注非功能性需求,网站的扩展性架构直接关注网站的功能需求。网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展架构的主要目标。

衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不同产品之间是否很少耦合等。

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

  • 事件驱动通常利用消息队列实现,通过这种方式将消息生产和处理逻辑分隔开。
  • 服务器服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增加产品可用通过调用可复用的服务来实现自身的业务逻辑,而对现有产品没有任何影响。

5、安全性

互联网是开发的,任何人在任何地方都可以访问网站。网站的安全架构就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。

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

这个世界没有绝对的安全,正如没有绝对的自由一样,很遗憾,这个世界上没有固若金汤的网站安全架构,我们只能每天打起百分百的精神,预防可能的漏洞或者攻击。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值