1. 与仅有几台服务器的小规模服务的区别
负载均衡 可扩展
保证冗余
Reduced Operation:减少人工干预(机器太多 记不过来)
2. 大规模数据处理难点 内存vs磁盘
内存比磁盘快百万倍
3. 大规模数据的技巧
写程序
尽量都在内存完成
使用能应对数据增长的算法(二叉树 O(logn) )
使用数据压缩和搜索技术
前提知识:底层基础
操作系统缓存
分布式为前提 应用rdbms必须要做的事
大规模环境 数据结构和算法如何使用
4. 操作系统缓存
虚拟内存:进程不直接使用内存地址,内核透明化,从0开始访问;操作系统以页面为单位分配内存
页面缓存:进程读入内存的数据不会直接释放掉,缓存起来供后面使用
vfs:磁盘缓存是由页面缓存实现的,vfs负责屏蔽底层不同的文件系统,实现缓存
对文件的缓存:使用LRU,最小单位为页面大小
降低io负载:内存大于数据文件则能全部缓存,不能考虑压缩数据
局部性分布式:根据访问模式 实施分布式数据
5. 数据库横向扩展策略
分布式mysql要点
灵活应用操作系统缓存
正确设置索引
以横向扩展为前提设计应用
Mysql分布式
replication:master slave
对更新/写入扩展:表分割、key-value
6. 特殊用途索引
倒排索引:用于全文检索,可以单独创建索引服务器
7, 全文索引的实现
步骤:爬行 存储 建立索引 搜索 评分 显示结果
逆向索引的结构:Directiory+Position
Directory建立:字典+AhoCoraSic 或者 语素分析
8. 可扩展的思路
根据负载调优:可视化负载
考虑机器用途:爬虫 客户
9. 保证冗余
应用server:增加server数量;负载均衡实现失败转移和失败恢复
数据库server:增加数据量; multi-master,相互replication 切换时有不同步风险,忽视之,出现则人工恢复
存储服务器:
系统稳定性
与资源利用率 有个取舍:维持适当余量
资源增加、内存泄露都有可能影响:自动dos判断 异常重启 终止耗时查询
10. 提高效率
虚拟化:可扩展 性价比 高可用。缺点:性能开销,cpu2% 内存10% 网络50% IO5%
有效利用廉价硬件:多核cpu SSD硬盘
11. 网络
分界点:1G bps 500主机 全球化 CDN
受益一生:理解负载均衡的重点:操作系统,缓存、多线程/多进程、虚拟内存、文件系统
查看单机负载:查看平均负载,确定有无CPU/IO瓶颈
平均负载:top uptime,等待cpu+等待io任务/单位时间
CPU瓶颈:sar vmstat
top/sar确认是用户进程还是系统进程
ps查看进程状态和cpu使用时间,确认导致问题的进程
确定进程后使用strace或oprofile剖析,确定问题所在
IO瓶颈: 多因程序请求过多io,或页面交换导致频繁访问磁盘,通过sar或vmstat确认交换区状态
如果发生页面交换
ps确认是否消耗大量内存
程序原因,改进程序
内存确实不够加内存,无法增加 考虑分布式
没发生交换,io频繁 可能由于缓存不足
增加内存
不能增加内存或还是不够,考虑分散存储或增加缓存服务器
操作系统调优就是找到瓶颈并解决。
转载于:https://blog.51cto.com/yingtju/1299911