阅读更多
web 前端 优化
浏览器
减少http请求 合并css js 图片
浏览器缓存
缓存更新 — 更新文件名
逐量更新 防止服务器压力突然增大
启用压缩 gz
页面渲染 css最上面 js最下面
减少cookie css js带cookie没意义 启用不同域名 这样请求静态资源就不会带上cookie
CDN加速 网络链路层优化
反向代理服务器 缓存
应用服务器
分布式缓存 memcache
缓存穿透 对取不到的值也缓存 防止攻击
磁盘
机械磁盘 顺序读快 随机读慢
数据库系统 2层索引B+树 3层
Nosql LSM树 N阶合并数 先操作内存中的树 超过阈值才与磁盘树合并
RAID 廉价磁盘冗余列阵
N块磁盘
RAID0 写入磁盘时 分成N份并发写入 读取, 读写快 无备份
RAID1 同时写入2块磁盘 备份
RAID10 RAID0 RAID1 结合 所有磁盘分成2份 并发写 同时备份
RAID3 分成N-1份 写入N-1块磁盘 第N块记录效验数据 (第N块相当于备份所有数据) N磁盘容易坏
RAID5 和RAID3相似 但不是固定写入第N块 循环写入所有磁盘 备份数据平均分布到所有磁盘
RAID6 和RAID5类似 但数据只写入N-2块磁盘 2块磁盘做备份 循环写
HDFS 服务器集群规模的备份
无状态服务
session管理
session复制 机器数量上去后 开销大
session绑定stick 单点失败
cookie 记录session cookie大小限制 每次都要传输cookie 关闭cookie不正常
session服务器 分布式缓存 数据库
服务 高可用
分级管理 核心服务 非核心
设置请求超时 请求会占用太长时间 占用连接资源
异步调用 减少等待时间 有些业务没法异步 必须确认成功才能往下走
服务降级 拒绝服务 关闭功能
幂等设计 防止重复调用
高可用 数据
缓存高可用 缓存是不是必要 是提供缓存可用 还是 加强数据库
CAP
分区耐受性 P 数据不会丢失 分区
可访问性 A 数据可用
数据一致性 C 分区数据不一致
数据强一致
数据用户一致 分区不一致 但同一用户看的到一致
数据最终一致
数据备份
冷备 简单 廉价 不能保证数据最终一致 不能保证可用(恢复备份要花时间)
热备 异步写入(一个写入就算成功)master slave 同步写入(全部写入才算成功)无主从
失效转移
失效确认 心跳检测 访问失败报告
访问转移
数据恢复 恢复可用数据副本个数
软件质量保证
网站发布 切掉流量 再部署 恢复流量
自动化测试
预发布验证 smoke test 外部用户无法访问 处理错误 fast failed
vcs
主干开发 分支发布 主干反应整个应用状态 便于管理 控制 持续集成, 并行开发时, 发布周期不同,主干可能是半成品状态(一部分做完了,一部分没做完)
分支开发 主干发布 分支独立 互不干扰
自动化发布 train 模型
灰度发布 用户测试 AB测试
运行监控
用户行为日志收集
服务器端日志 浏览器端js日志收集
性能监控 CPU MEM IO
运行数据报告 缓存命中率 响应时间 业务数据
监控管理
系统报警
失效转移
自动优雅降级
伸缩性设计 scalability
物理分离
单一服务器-》数据库分离-》缓存分离-》静态资源分离
分层分离
业务分离
单一功能服务器集群
服务器负载均衡
http重定向负载均衡
dns域名解析负载均衡
Dns有缓存 生效要时间
实践中作为第一级负载均衡
反向代理负载均衡
缺点 所有请求 响应的中转站 性能瓶颈
IP负载均衡
修改网络包IP地址
数据链路层负载均衡
修改mac地址,响应数据回去时不改IP不经过负载均衡服务器(进来时会经过) 代表产品 LVS
负载均衡算法
轮询 round robin
加权轮询 weighted round robin
Random
Least connections
Source IP hashing
缓存服务器集群
memcache
客户端API hash 分布
缺点 扩容的时候缓存需要重新计算offset 大部分会miss 解决办法 访问量少的时候扩容 模仿访问来预热缓存
一致性hash算法
有2的32次方个节点的环,集群服务器分布在环上,根据key算出对应的hash,看环上离此hash值最近的节点,放置数据。 当新加入服务器节点时,影响的只是一部分(key hash上次最近节点的数据),原有节点在环上分布越多,影响越少。
缺点是新加入的节点只分散了离它最近服务器的压力,解决办法是把一个物理节点虚拟成N个节点,分布到环上。这样新加入的机器可以分担N个节点的压力
通常使用二叉树查找
数据缓存服务器集群
关系数据库
主从读写分离
业务数据分库(跨库不能join)
数据多分片
扩容时数据需要迁移,一致性,可访问性。 解决办法,每个mysql实例上有多个子表, 新加服务器时,对一部分子表做同步复制,复制完成后,修改路由
invalid notification
nosql
hbase 由若干HRegion组成,每个HRegion存储一段key range的数据,当数据多时,key range分裂,分布到不同服务器做数据迁移
扩展性 extensibility
开闭原则
低耦合系统
降低耦合的方式 分布式队列 分布式服务
分布式队列
事件驱动
分布式服务
巨无霸系统
编译部署困难
代码分支管理困难
新增业务困难
纵向拆分
新业务为一个独立的web app
横向拆分
复用的业务拆分出来 部署为分布式服务
分布式服务特点
负载均衡
失效转移
高效远程通信
对应用最少侵入
版本管理
实时监控
网站安全
xss攻击 cross site script
危险字符转义
sql注入
参数消毒, sql预编译和参数绑定
csrf攻击 cross site request forgery
token 页面请求参数中嵌入随机数, 服务器端验证随机数
验证码
referer check
error code
html注释
文件上传执行
路径遍历
web 应用防火墙
网站安全漏洞扫描
信息加密技术 密钥安全管理
单向散列加密 md5 sha 加盐
对称加密算法 DES RC
非对称加密 RSA 信息安全传输(公钥加密,私钥解密) 数字签名(私钥加密,公钥解密)
密钥安全管理
密钥 算法 放在独立服务器
解密算法在应用系统, 密钥在独立服务器
信息过滤 反垃圾
文本匹配 trie算法 多级hash表 降噪处理
分类算法 Bayes算法
黑名单
电子商务风险控制
账户风险 黑客盗用 恶意注册账号
买家风险 恶意下单 抢购低价商品 欺诈退款
卖家风险 虚假发货 炒作信用 侵权品
交易风险 信用卡盗刷 支付欺诈
风控
分布式存储系统故障
瞬时故障 - 网络不好,GC,线程忙, 可自行恢复
自行重试
临时故障 - 网卡松动,系统升级,停机维护,内存坏,cpu过热, 人工干预恢复
读 - 路由到正常服务器, 写 - 临时存储服务器
永久故障 - 硬盘损坏,数据丢失
备份服务器做替换
秒杀系统架构
设计部署专门的秒杀系统
技术挑战
现有业务的冲击,高并发下数据库负载,网络带宽增加,直接访问下单的url
独立部署, 秒杀页面静态化, 临时租借带宽,CDN, 页面url加入随机数
页面购买按钮变亮,静态化页面里加入js控制, 静态页面刷新会动态请求js(文件小)
秒杀商品只有一个,保证只有一个用户买到。
放少量用户进入系统,其余直接显示秒杀结束页面
前端架构
CDN 动静分离 图片服务 反向代理 DNS
应用层架构
开发框架 页面渲染 负载均衡 session管理 动态页面静态化 业务拆分 虚拟化服务器
服务层架构
分布式消息 分布式服务 分布式缓存 分布式配置
存储层架构
分布式文件 关系数据库 nosql 数据同步
后台架构
搜索引擎 数据仓库 推荐系统
数据采集与监控
浏览器数据采集 服务器业务数据采集 服务器性能数据采集 系统监控 系统报警
安全架构
web攻击 数据保护
数据中心机房架构
机房架构 机柜架构 服务器架构