前言:很久之前看的一本书,《大型网站技术架构》的书,李智慧著。当时写的一些内容,舍不得丢掉,就记录下来。这本书,讲的不深,有些旧。但是整体作为入门,还是值得快看的。
1、模式
1.1 分层
规划软件的逻辑结构,禁止跨层次、逆向调用
1.2 分割
独立,首页、搜索页面、商品详情
1.3 分布式 (更多计算机远程调用协同工作、分布式配置、分布式锁、分布式文件)
- 分布式应用和服务(分层或者分割后的服务分开部署)
- 分布式静态资源
- 分布式数据和存储(传统数据库分布式部署、NoSQL产品)
- 分布式计算(搜索引擎、数据仓库、数据分析、Hadoop、MapReduce,讲程序分发到数据所在位置以加速计算)
1.4 集群
负载均衡、提高系统的可用性
1.5 缓存
- CDN:热点内容分发网络,部署在距离终端用户最近的网络服务商。
- 反向代理:前端架构的一部分,缓存静态资源。
- 本地缓存:本机内存中访问,无需访问数据库(redis)
- 分布式缓存:数据量庞大导致内存空间不是单机能承受的。
1.6 异步(典型生产者消费者模式)
- 提高系统可用性
- 加快网站响应速度
- 消除并发访问高峰
1.7 冗余
冷备份(定期存储)、主从分离(热备份)。需要全球范围部署灾备数据中心。
1.8 自动化
自动化监控、自动化预警、自动化时效转移、自动化失效回顾、自动化降级、自动化分配资源。
1.9 安全
密码+手机校验码。XSS攻击、SQL注入。
2、 核心架构要素
1、性能
性能指标:响应时间、并发数、吞吐量、性能计数器(线程数、CPU、内存)
1、WEB前端优化
- 减少Http请求
- 使用浏览器缓存
- 启用压缩
- CSS放在页面最上面,JS放在页面最下面
- 减少Cokkie的传输(静态资源独立域名访问)
2、CDN加速
内容分发网络,Content distribute Network。部署在运营商的机房。
3、反向代理
多台机器做负载均衡,改善网络高并发情况下的性能。
4、应用服务器优化
- 分布式缓存、二八定律(80%的访问、落在20%的数据上)
- 合理使用缓存
- 频繁修改的数据
- 没有热点的访问
- 数据不一致和脏读
- 缓存可用性(缓存服务不可用,缓存雪崩,是否需要备份缓存)
- 缓存预热(LRU-最近最久未用算法)
- 缓存穿透(恶意攻击,缓存中没有的key)
- 分布式缓存(memcached)
- 异步操作(消息队列,先返回结果)
- 使用集群(负载均衡)
- 代码优化
- 多线程(无状态对象、局部对象、并发资源使用锁)
- 资源复用(连接池)
- 数据结构
- 解决hash冲突
- 垃圾回收
- 存储性能的优化
- B+树(排序后存储)数据库,采用两极索引的B+树,三层树结构。
- LSM树 N阶 合并树,可减少磁盘的访问次数。
2、可用性
1、高可用的应用
- 通过负载均衡实现失效转移。
- 无状态的请求很少,因此需要进行使用Session服务器。
2、高可用的服务
- 分级管理(订单会比评价服务优先级高,不会有连锁反应)
- 超时设置(不会卡死,抛出异常)
- 异步调用
- 服务降级(拒绝服务、关闭服务)
- 幂等性设计(请求重发,结果相同)
3、高可用的数据
- CAP原理 一致性、可用性、分区耐受性
- 数据备份
- 失效转移
- 失效确认
- 访问转移
- 数据恢复
4、高可用网站软件质量保证
- 网站发布
- 自动化测试
- 预发布测试
- 代码控制
- 自动化发布
- 灰度发布(回滚、切流)
5、网站运行监控
- 监控数据采集
- 监控管理
3、伸缩性
1、应用服务器的伸缩性设计
- Http重定向负载均衡
- DNS域名解析负载均衡
- 反向代理负载均衡
- IP负载均衡
- 数据链路层负载均衡
2、负载均衡算法
- 轮询
- 加权轮询
- 随机
- 最少链接
- 源地址散列(Hash计算访问者的IP)
3、分布式缓存集群伸缩性设计
缓存通过计算hash取余数,落到具体哪台机器。扩容就会很麻烦,100台线性增长不命中率是99%(解决方案可以使用hash环,选最近的服务器、但是压力不均衡,需要增加一层来进行,多个虚拟节点对应一台服务器,hash环的优化)
4、关系型数据库的伸缩性设计
主从(利用数据库支持数据复制的功能)。
分库(业务层面,局限性就是垮数据库不能Join操作)
A数据库和B数据库SQL解析模块以及SQL路由模块协同,通过结果合并模块进行返回结果。根据id的奇偶。
5、NoSQL的伸缩性设计
放弃了结构化查询语言和事务的一致性。更关注高可用和可伸缩性。HBase,分布式文件系统。
4、扩展性
降低耦合,较少的依赖,提高软件的复用性。对扩展开放,对修改关闭。
分布式消息队列进行降低耦合。事件驱动框架。消息队列利用发布-订阅的模式进行工作的。
利用磁盘可以实现消息队列的高可用性。
利用开放平台建设网站生态圈。
5、安全性
1、XSS攻击
攻击垮站点脚本攻击,篡改网页HTML脚本。
2、注入攻击
请求中注入恶意的SQL命令。
3、CSRF攻击
跨站点请求伪造,伪造身份,窃取请求者身份。