大型网站技术架构 核心原理与案例分析

读书时间:

2017年

创新的业务发展模式对网站架构逐步提出更高的要求,才使得创新的网站架构得以发展成熟。是业务成就了技术,是事业成就了人,而不是相反。所以网站架构师应该对自己技术成绩的网站事业心存感恩,并努力提高技术回馈业务,才能在快速发展的互联网领域保持持续的进步。、

网站架构设计误区:

1、一味追随大公司的解决方案

2、为了技术而技术

3、企图用技术解决所有问题
技术是用来解决业务问题的, 而业务问题,也可以通过业务的手段去解决。

我们的现实生活中充斥着几乎千篇一律的人生架构模式:读重点学校,选热门专业,进稳定高收入的政府部门和企业,找门当户对的配偶,生一个孩子继续这个模式………… 但是人生不同于软件,精彩的人生绝不会来自于复制。

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

单机

LAMP(linux、apache、mysql、php)

应用服务和数据服务分离

  • 应用服务需要更强的cpu

  • 数据库服务需要快速磁盘检索和数据缓存,需要更快的硬盘

  • 文件服务器需要大硬盘

使用缓存改善网站性能

  • 80%的业务访问集中在20%的数据上。 如何缓存一小部分数据提高访问速度

使用应用集群改善网站并发性能

  • 通过负载均衡服务器,将访问请求分发到机器中

数据库读写分离

  • 读写分离

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

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

  • 分库分表

  • 业务分库

使用NOSQL和搜索引擎

业务拆分

  • 分而治之将业务分成不同的产品线

分布式服务

  • 重新聚合不同产品线相同功能的服务,独立部署提供共用业务服务

  • 分布式服务调用共用业务服务完成具体业务

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

网站的价值在于它能为客户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还是很小的时候就去追求网站的架构是舍本逐末,得不偿失。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。

大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。在这个漫长地技术演化过程中,不需要放弃什么,不需要推翻什么,不需要剧烈的革命,就那么润物细无声地把一个只有一台服务器,几百个用户的小网站演化成一个几十万台服务器,数十亿用户的大网站。

模式

为了解决大型网站面临的高并发访问、海量数据处理、高可靠运行等一系列问题与挑战,大型互联网公司再实践中提出了许多解决方案。

分层

将系统在横向维度切分为几个部分,每个部分负责一部分相对比较单一的职责。

应用层:负责具体业务和视图展示
服务层:为应用层提供服务支持,比如用户管理服务、购物车服务
数据层:提供数据存储访问服务,如数据库、缓存、文件等

分割

将系统在纵向方面对软件进行切分。

比如在应用层,将不同业务进行分割,将购物、论坛、搜索广告分割成不同的应用,由独立团队负责,部署在不同的服务器上;
同样在服务层也可以按需进行分割

分布式

对于大型网站,分层和分割的一个主要目的就是为了切分后的模块便于分布式部署,即将不同的模块部署在不同的服务器。

分布式在解决网站高并发问题的同时也带来了其他问题:

  1. 分布式意味着服务调用必须通过网络,这可能对性能造成比较严重的影响

  2. 服务器越多,服务器宕机的概率也就越大,一台服务异常导致的服务不可用可能会导致许多应用不可访问

  3. 数据在分布式的环境中保持一致性也非常困难,分布式事务也难以保证

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

常用的分布式方案有以下几种:

  • 分布式应用和服务

  • 分布式静态资源

  • 分布式数据和存储

  • 分布式计算

集群

多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
所以在网站应用中,即使是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小的集群,目的就是提供系统的可用性

缓存

  • CDN

  • 反向代理

  • 本地缓存

  • 分布式缓存

异步

优点:

  1. 提供系统可用性

  2. 加快网站响应速度

  3. 消除并发访问高峰

缺点:
处理业务可能会对用户体验、业务流程造成影响,需要产品设计方面的支持。

冗余

网站需要7*24连续运行,但是服务器随时可能出现故障,就需要一定程度的服务器冗余运行,数据冗余备份。
数据库除了定期备份,存档保存,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离,实现同步实现热备份。

为了抵御地震、海啸等不可抗力,某些大型网站会对数据中心进行备份,部署灾备数据中心。

自动化

devops运维管理类似

自动化管理、测试、发布、监控、报警、转移等等

安全

  • 通过密码和手机校验码进行身份认证

  • 登陆、交易等操作需要对网络通信进行加密

  • 为了防止机器人程序滥用网络资源攻击网站,网站使用验证码进行识别

  • 常见的xss攻击、sql注入,进行编码转换等相应处理

  • 对于垃圾信息、敏感信息进行过滤

  • 对于交易等重要操作根据交易模式和交易信息进行风险控制

大型网站核心架构要素

性能

常用系统操作响应时间

操作 响应时间
数据中查询一条记录(有索引) 十几毫秒
机械硬盘一次寻址定位 4毫秒
从机械硬盘顺序读取1M数据 2毫秒
从SSD顺序读取1M数据 0.3毫秒
从redis读取一个数据 0.5毫秒
从内存读取1M数据 十几微秒
网络传输2KB数据 1微秒

测试指标

  • 响应时间

  • 并发数

  • 吞吐量

  • 性能计数器

测试方法

  • 性能测试

  • 负载测试

  • 压力测试

  • 稳定性测试

优化策略

  • 性能分析 :检查请求处理得各个环节得日志,分析哪个环节响应时间不合理、超出预期;然后检查监控数据,分析影响性能得主要因素是内存、磁盘、网络还是CPU,是代码问题还是架构设计不合理,或者系统资源确实不足。

  • 性能优化

    1. web前端性能优化

      减少http请求

      使用浏览器缓存

      启用压缩

      CSS放上面,js放下面

      减少cookie传输

      cdn 加速

      反向代理

    2. 应用服务器性能优化

      分布式缓存: 优先考虑使用缓存优化性能

      数据不一致与脏读

      缓存可用性

      缓存预热

      缓存穿透

      异步操作

      使用集群

      代码优化

      多线程

      资源复用

      数据结构:原始字符串—>md5—>hashcode ,散列效果好

      垃圾回收

    3. 存储性能优化

      机械硬盘or固态硬盘:机械硬盘特点快速顺序读写、慢速随机读写。

      B+树 vs LSM 树

      RAID VS HDFS

    总结

    性能优化的最终目的就是改善用户的体验,使他们感觉网站很快。离开这个目的,追求技术上的所谓高性能,是舍本逐末。 而用户体验的快或是慢,可以通过技术手段改善,也可以通过优化交互体验改善。

    即使再技术层面,性能优化也需要全面考虑,综合权衡:性能提示一倍,但服务器数量也增加了一倍;或者响应时间缩短,同时数据一致性也下降,这样的优化是否可以接受?

    技术是为业务服务的,离开了业务发展的支持和驱动,技术走不远,甚至还会迷路。

可用性

  • 负载均衡

  • 集群session管理

高可用服务

  • 分级管理

  • 超时设置

  • 异步调用

  • 服务降级

  • 幂等性设计

高可用数据

  • CAP 原理

  • 数据备份

  • 失效转移

    软件质量保证

    • 无影响用户发布方式

    • 自动化测试

    • 预发布验证

    • 代码控制

    • 自动化发布

    • 灰度发布

    网站运行监控

    • 监控数据采集

      用户行为日志采集

      服务器性能监控

      运行数据报告

    • 监控管理

      系统报警

      失效转移

      自动优雅降级

总结

1
工程师对架构做了许多优化、对代码做了很多重构,对性能、扩展性、伸缩性做了很多改善,但别人未必能直观得感受到,也许你地直接领导都不知道你做的这些意义何在。但如果你负责的产品出了重大故障,CEO都会知道你的名字。

伸缩性

应用服务器的集群伸缩

  • http 重定向负载均衡

  • DNS域名解析负载均衡(优势基于地理位置的域名解析)

  • 反向代理负载均衡

  • ip负载均衡

  • 数据链接层负载均衡(三角传输)

分布式缓存集群的伸缩

  • 一致性hash算法

数据存储服务器的伸缩

  • 关系型数据库集群

    amoeba

    cobar

  • NOSQL

总结

1
遇到问题,分析问题,最后总能解决问题。许多问题只是看起来一样,具体问题总是要具体对待的,没有银弹,没有救世主。

扩展性

降低系统耦合度,构建可扩展的网站架构。

  • 利用分布式消息队列降低系统耦合性

    可以复杂用mq,也可以简单用mysql

  • 微服务

大型网站分布式服务的需求和特点

  1. 服务注册和发现

  2. 负载均衡

  3. 失效转移

  4. 高效的远程调用

  5. 整合异构系统

  6. 对应用少侵入

  7. 版本管理

  8. 实时监控

总结

1
马克思的劳动价值理论告诉我们,产品的内在价值在于劳动的时间,劳动的时间不在于个体付出的劳动时间,而在于行业一般劳动时间,资本家只会为行业一般劳动时间买单,如果你的效率低于行业一般劳动时间,对不起,请自愿加班。反之,如果你有一个更有效率的架构,可以更加快速地开发出产品,你至少在这个全行业都加班的领域,你能够按时下班,陪陪家人,看看星星。

安全性

攻与防

  • XSS攻击 —> 消毒、httponly

  • 注入攻击 –> 消毒、参数绑定

  • CSRF攻击–> 表单token、验证码、referer check

  • 其他漏洞:error code、html注释、文件上传、路径遍历

应用防火墙

  • 开源的 modsecurity

安全漏洞扫描

信息过滤与反垃圾

  • 文本匹配: trie算法、降噪预处理

  • 分类算法:贝叶斯算法

  • 黑名单:布隆过滤器

风控

  • 规则引擎

  • 统计模型

总结

没有绝对的安全。网站的相对安全是通过提高攻击门槛达到的。让攻击者为了获得有限的利益必须付出更大的代价,致使得不偿失,望而却步。