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

大型网站技术架构-核心原理与案例分析–(李智慧)

1 大型网站结构演化

1.1 大型网站软件系统的特点

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

1.2 大型网站结构演化发展历程

  • 初始阶段的网站架构 > 单服务器 应用程序+文件+数据库
  • 应用服务器和数据服务器分离
  • 使用缓存改善网站性能
  • 使用应用服务器集群改善王章的并发处理能力
  • 数据库读写分离
  • 使用反向代理和CDN加速网站响应
  • 使用分布式文件系统和分布式数据库系统
  • 使用NoSql和搜索引擎
  • 业务拆分
  • 分布式服务

![image](001 - 较构图)

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

  • 核心价值是随网站多需灵活应对
  • 驱动大型网站技术发展的主要力量是网站的业务发展

1.4 网站架构设计误区

  • 一味追随大公司的解决方案
  • 为了技术而技术
  • 企图用技术解决所有问题 > 例如大数据量的分页,阿里在一定页数后直接返回null

2 大型网站架构模式

2.1 网站架构模式

  • 高性能
  • 高可用 > redis哨兵 > mysql keepalived
  • 易伸缩
  • 可扩展 > 雪花算法分布式ID
  • 安全

2.1.1 分层

  • 网络协议7层

2.1.2 分割

  • 按照业务纵向分割

2.1.3 分布式

  • 分布式应用和服务
  • 分布式静态资源 > js css logo 独立域名
  • 分布式数据和存储
  • 分布式计算 > MapReduce 移动计算而不是移动数据
  • 分布式配置 > config
  • 分布式锁 > 分布式环境下实现并发和协同
  • 分布式文件 > 云存储

2.1.4 集群

  • 负载均衡实现集群

2.1.5 缓存

  • CDN > 即内容分发网络. 部署在距离终端用户最近的网络服务商,缓存静态资源
  • 反向代理 > 属于网站前端架构的一部分. 缓存网站的静态资源
  • 本地缓存 > 缓存热点数据. 使用本机内存缓存数据
  • 分布式缓存 > 缓存频繁访问的数据(统计数据访问)> 数据在某一个时间段内有效,不会很快过期

2.1.6 异步

  • 使用异步降低业务的耦合性
  • 单一服务器内,可通过多线程共享内存队列的方式实现异步.处于业务操作前面的线程降输出写入到队列,后面的线程从队列中读取数据进行处理.
  • 分布式系统,通过分布式消息队列实现异步. RabbitMQ

==作用==

  • 提高系统可用性 > 消费服务器发生故障,数据会缓存在消息队列中.
  • 加快网站的响应速度
  • 消除并发访问高峰 > 将并发访问放到消息队列中,等待消费者服务器处理.实现消峰

2.1.7 冗余

  • 服务集群 数据备份

  • 冷备份 > 定期存档保存

  • 热备份 > 主从分离,主从同步

  • 灾备数据中心 > 全球范围内部署

2.1.8 自动化

==发布过程自动化== > 减少人为干预,减少故障

  • 自动化代码管理 > 代码版本控制,代码分支创建合并等过程自动化. git 的加强 –>todo
  • 自动化测试
  • 自动化安全检测 findbug
  • 自动化部署
  • 自动化监控
  • 自动化报警
  • 自动化失效转移 > 将失效的服务器从集群中隔离出去
  • 自动化失效不想恢复
  • 自动化降级
  • 自动化分配资源

2.1.9 安全

  • 通过==密码==和==手机验证码==进行身份认证
  • 登录,交易等操作,需要对网络进行通信加密
  • 服务器上存储的==敏感数据==如用户信息进行加密
  • 防止机器人攻击,使用==验证码==进行识别
  • 对于常见的XSS攻击,SQL注入,进行编码转换等响应处理
  • 对于垃圾信息,敏感信息进行==过滤==
  • 对交易转账,进行==风险控制==

##好的设计模式绝对不是模仿,不是生搬硬套某个模式,而是对问题深刻理解之上的创造与创新,即使是”微创新”,也是让人耳目一新的似曾相识.##

3 大型网站核心架构要素

3.1 性能

==衡量指标==: 响应时间,并发数,吞吐量(TPS 每秒事务数,HPS 每秒http请求数,QPS 每秒查询数)等 OPS

  • 在浏览器端,可以通过浏览器缓存,使用页面压缩,合理布局页面,减少cookie传输等手段改善性能.
  • CDN 反向代理
  • 在应用服务器端, 本地缓存,分布式缓存
  • 异步操作
  • 高并发请求下,集群
  • 在代码层,多线程,改善内存管理
  • 在数据库服务器端,索引,缓存,sql优化. NoSQL

3.2 可用性 7X24可用

  • 预发布验证
  • 自动化测试 > 性能测试 负载测试 压力测试 稳定性测试
  • 自动化发布
  • 灰度发布 > AB测试

3.3 伸缩性

3.4 扩展性

3.5 安全性


CAP 原理

  • 数据持久性
  • 数据可访问性
  • 数据一致性

文章作者: 张曙
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张曙 !
评论