《大型网站技术架构:核心原理与案例分析》阅读笔记——2

大型网站架构模式

综述

1. 模式:每个模式描述了一个在咱们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而没必要作重复工做。html

2. 网站架构模式:大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各类技术框架目标。这些解决方案又被更多网站重复使用,从而逐渐造成大型网站架构模式。前端

分层

概念

1. 将系统在横向维度上切分红几个部分,每一个部分负责一部分相对比较单一的职责,而后经过上层对下层的依赖和调用组成一个完整的系统。数据库

2. 实践中,大的分层结构内部还能够继续分层。缓存

目的

1. 便于分工合做开发和维护;安全

2. 各层独立,只要维持调用接口不变,各层可根据具体问题独立演化发展而无需其余层必须相应调整;服务器

3. 物理部署上,三层结构可部署在同一物理机器上,随着网站业务发展,必然要分离部署,其三层结构分别部署在不一样服务器,使网站拥有更多计算资源应对更多用户访网络

问。多线程

举例

应用层架构

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

服务层

为应用层提供服务支持,如用户管理服务,购物车服务等

数据层

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

分割

概念

1. 从纵向方面对软件进行切分,将不一样功能和服务分割开来,包装成高内聚低耦合的模块单元。

2. 大型网站分割粒度可能会很小。

目的

1. 有助于软件开发和维护;

2. 便于不一样模块的分布式部署,提供网站的并发处理能力和功能扩展能力。

举例

1. 在应用层,按业务分割为购物、论坛、搜索、广告不一样的应用,独立团队负责,部署在不一样服务器;

2. 同一应用内部,若是规模庞大业务复杂,会继续分割,好比购物业务分割为机票酒店业务、3C业务、小商品业务等更细小的粒度。

分布式

概念

分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即不一样模块部署在不一样服务器上,经过远程调用协同工做。

目的

可以使用更多的计算机完成一样的功能,计算机越多,CPU、内存、存储资源也越多,处理并发访问和数据量就越大。

缺点

1. 分布式服务调用必须经过网络,可能会影响性能;

2. 服务器越多,服务器宕机几率就越大;

3. 分布式环境数据一致性很是困难,分布式事务也难以保证;

4. 分布式致使网站依赖错综复杂,开发管理维护困难。

举例

1. 分布式应用和服务:将分层和分割后的应用和服务模块分布式部署。

2. 分布式静态资源:网站的静态资源如JS、CSS、Logo图片等资源独立分布式部署,并采用独立域名,即动静分离。

3. 分布式数据和存储:大型网站需处理以P为单位的海量数据,单台计算机没法提供如此大的存储空间,此时需分布式存储。

4. 分布式计算:严格来讲,应用、服务、实时数据处理都是计算,网站除了要处理这些在线业务,还有很大一部分后台业务,包括搜索引擎的索引构建、数据仓库的数据分析统计等。

集群

概念

经过负载均衡技术为一个应用构建一个多台服务器组成的集群,共同对外提供服务。

目的

提升系统可用性。

缓存

概念

将数据存放在距离计算最近的位置。

目的

加快处理速度。

举例

1. CDN。

2. 反向代理。

3. 本地缓存。

4. 分布式缓存。

5. 以上4个都在前面章节已说明,再也不赘述。

异步

概念

1. 单一服务器内部可经过多线程共享内部队列方式实现异步,业务操做前面的线程将输出写入队列,后面的线程从队列读取数据处理。

2. 分布式系统中,多个服务器集群经过分布式消息队列实现异步。

目的

1. 提升系统可用性:消费者服务器发生故障,数据会在消息队列服务器存储堆积,生产服务器能够继续处理业务请求,系统总体表现无端障。消费者服务器恢复正常后,继续处理消息队列中的数据。

2. 加快网站响应速度:业务处理前端的生产着服务器将数据写入消息队列,无需等待消费者服务器处理就能够返回,响应延迟减小。

3. 消除并发访问高峰:用户访问网站是随机的,虽然存在高峰和低谷,但突发事件(促销活动、微博热点事件)会形成网站并发访问忽然增大。使用消息队列将忽然增长的访问请求数据放入消息队列,等待消费者服务器依次处理,减少网站负载压力。

4. 解耦,提高扩展性。

5. 缺点:消费者服务器处理(如业务校验、写数据库)失败,以订单提交为例,可在成功提交后Email或短信通知用户订单成功,避免交易纠纷。

冗余

概念

任何服务都必须部署至少两台服务器构成的一个集群。

目的

实现服务高可用。

举例

1. 冷备份:按期备份,存档保存。

2. 热备份:主从分离,实时同步。

自动化

目的

减小人为干预,减小故障。

举例

1. 自动化发布。

    a) 自动化代码管理:代码版本控制、代码分支建立合并等过程自动化,开发工程师只要提交本身参与开发的产品代号,系统自动为其建立开发分支,后期自动合并代码。

借鉴:http://www.javashuo.com/article/p-bvcrdsrx-bz.html

    b) 自动化测试:代码开发完成,提交测试后,系统自动将代码部署到测试环境,启动自动化测试用例测试,向相关人员发送测试报告,向系统反馈测试结果。

    c) 自动化安全检测:安全检测工具对代码静态安全扫描及部署到安全测试环境进行安全攻击测试,评估安全性。

    d) 自动化部署:将工程代码自动部署到线上生产环境。

2. 自动化监控。

    a) 自动化报警:对线上生产环境自动化监控,对服务器心跳检测,及各项性能指标和应用程序的关键数据指标。若是发现异常、超出预设阀值,自动化向相关人员发送报警,警告故障可能发生。

    b) 自动化失效转移:检测到故障发生后,系统自动化将失效服务器从集群隔离,再也不处理请求。

    c) 自动化失效恢复:待故障消除后,系统自动化从新启动服务,同步数据保证数据一致性。

    d) 自动化降级:网站遇到访问高峰,超出网站最大处理能力时,为保证整个网站安全可用,会自动化拒绝部分请求及关闭部分不重要服务将系统负载降至安全水平。

    e) 自动化分配资源:将空闲资源分配给重要服务,扩大部署规模。

安全

举例

1. 经过密码和手机验证码身份认证。

2. 登陆、交易等操做需网络通讯加密,网站服务器上存储的敏感数据也加密处理。

3. 使用验证码识别,防止机器人程序滥用网络资源攻击网站。

4. 对常见的用于攻击网站的XSS攻击、SQL注入进行编码转换等处理。

5. 对垃圾信息、敏感信息过滤。

6. 对交易转帐等重要操做根据交易模式和交易信息进行风险控制。

相关文章
相关标签/搜索