应对大数据高并发
应对大数据高并发
- 如果应对大数据高并发
a) 读写分离
b) 负载均衡/集群
c) 消息队列
d) Redis
e) 分布式
f) 缓存
g) 分库分表 - 怎样成为架构师
a) 成熟的大型网站不是设计出来的,是演化出来的《淘宝技术这十年》
b) 要相信因事成人,而不是因人成事
c) 学习实践总结进阶 - 解决问题步骤
a) 钱能解决的问题,用钱解决
b) 用钱解决不了的问题,用技术解决
c) 用技术解决不了的,用业务解决
5. 单机系统
a)
b) 多线程并发相应(内存/CPU/带宽/硬盘读写),用户变多任何一个环节都有可能成为负担(硬件资源不够)
c) 压力测试:loadrunner可测试
d) 时间推移,用户增多,数据增多,并发量增多,服务器压力也越来越大,解决方案
i. 垂直扩展::升级硬件,见效快但是有上限
ii. 水平扩展:多来几台服务器,
6. 独立服务器
a) 分布式:一台服务器能做的事分成多台服务器协作完成
B) 很轻松的提升承载能力
6. 缓存
系统性能优化的第一步就就是使用缓存
二八原则:
- 集群负载均衡
a) 集群:一台服务器做的事儿,现在由多台服务器共同承载,每台服务器都能独立完成的
b) 分布式:一台服务器做的事分成多台服务器协作完成,每台服务器完成其中的一部分
c) 集群和负载均衡
i. 集群------必然需要负载均衡----请求分发
ii. DNS-----负载均衡------就是可以就近分发—毕竟不是自己的,不灵活
iii. 硬件负载均衡----F5
iv. 软件级负载均衡: - LVS----Linux----4层协议(ip/端口)----转发更有效率,功能性差,配置麻烦
- HAProxy—7层协议(http报文(cookie))----策略丰富,用的不多
- Nginx—7层协议(http报文)----各种策略(1.平均轮询-----2.加权轮询—3.IP_hash:会话粘滞(用户IP首次访问,决定走那个服务器)(用户持久化))4.Fire策略:根据服务器信息进行智能分配5.URL-hash
v. 解决用户持久化问题: - 会话粘滞
- Cookie/token
- Session共享(stateServer /sqlServer/Redis最多)
- 数据库读写分离
a) 架构图解
b) 数据库瓶颈:数据库读写分离
c) 木桶理论:决定一个木桶装水能力是由最短的那块板
d) 二八原则:80%的业务都是查询,20%是增删改
e) 1主库----N从库:数据结构-数据都是一摸一样
f) 发布订阅式读写分离
i. 一开始从库是直接镜像拷贝主库
ii. 主数据库—增删改Sql直接操作主库----数据库日志—发往发布服务器
iii. 发布服务器----负责接收主库的操作日志—从库订阅日志
iv. 订阅服务器(订户—从数据库)—根据日志同步数据
v. 注意 - 发布订阅,从库的多少不会影响主库
- 有延迟,局域网熟读够快,一般在毫秒级
- 从库直接从日志同步数据,比sql效率高
vi. 数据库执行sql语句底层分析:执行语句分析—执行计划分析—执行计划—执行操作—生成日志
vii. 开发怎末配合?很简单—增删改操作一个链接/查询搞一顿链接数据库字符串自定义策略然后均衡一下 - 数据库优化
a) 分库分表,表分区
i. 表分区:是数据库本省提供的功能,是为了解决单表数据量太大
ii. 分库—一个库变成多个库,----垂直分库----水平分库 - 垂直分库:电商平台分成了,存储库,订单库,用户库
- 水平分库:电商平台分成了华南-华东-华北,每个库结构一致,数据不一样
- 跨库查询怎末办?
a) 数据拷贝式:总数据报表,24点数据同步,专门为报表服务
b) 即时查询式—Service/统计数据式/
c) 业务妥协
iii. 分表 - 垂直分表(文章表)
- 水平分表(时间/地区/类)
- 继续缓存(CDN加速/缓存:)
a) 架构示例图
b) CDN(外部购买,阿里云):是DNS提供的,
i. CDN就是把数据存在离用户最近的地方,主要解决图片 视频,缓存加快速度按—减少服务器请求
ii. 请求----dns(互联网的第一心跳)----ip/端口—
c) 反向代理(服务端,开发者部署)屏蔽和保护,还可以缓存(js/css/….)减少请求资源 - 分布式文件服务器(视频多,图片多)
a) 架构示例
b) 分布式文件服务系统(TFS,GFS,NFS)把多个硬盘管理成本地硬盘可以直接读写 - 专项突破
a) 架构示例
b) 搜索引擎:人性化搜索()
i. 全文检索工具(lucene.Net----Solr—ES):分词二次存储,查询是再分词,搜索新存储
ii. 数据库全文索引(几乎没人用)
c) NOSQL
i. Redis - 一个Key—Value内存存储-----Remote Dictionary Server
- 内存读写快,可以做缓存,
- 不仅是缓存,而是Web2.0之友
- 单线程模型—没有线程安全问题/原子性—10WQPS(请求)/秒----多进程
- 防止超卖:100件商品10000个并发请求
a) Redis—初始化100个库存----decr----建议返回结果—结果效益0停止秒杀(只有100个请求回到数据库)—放弃支付----incr - 例如:
a) 访问计数器—分布式大家都能访问的书都快的存储
b) 集群的用户持久化----session共享,RedisSessionState
c) 做数据统计—直播平台(Redis—Zset—有序的列表,一个key对应一组数组—刷礼物就增加以下)