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频繁 可能由于缓存不足

增加内存

不能增加内存或还是不够,考虑分散存储或增加缓存服务器

操作系统调优就是找到瓶颈并解决。