【简记】大规模Web开发技术(第二章)

来源:互联网 发布:淘宝活动怎样能找到 编辑:程序博客网 时间:2024/06/05 04:38

第二章主题:大规模数据处理入门(Linux背景下)

中-大数据标准,每张sql表的数据量都以GB为单位,表中数据量千万级别。



内存和磁盘的读取速率,差距在10^5~10^6倍。



Linux下:使用top或uptime等命令显示平均负载。



平均负载从左到右分别为1 分钟、5 分钟、15 分钟内,单位时间中处于等待状态的任务数。也就是说,该数字报告了平均有多少任务在等待。平均负载高,说明有相应数量的任务在等待,可以认为运行有延迟, 也就是负载过高。

平均负载过高时,要在CPU和I/O部分找原因。sar或者vmstat可以查看CPU使用率和I/O等待率随时间的推移情况。


"CPU 负载"过高时,用以下流程寻找原因:

确认是用户程序处理的瓶颈,还是系统程序的原因。用top 或sar 确认;

再通过ps 查看可见进程的状态和CPU 使用时间等,确定导致问题的进程;

确定进程之后,想要进一步寻找原因的话,可以通过strace 跟踪,或oprofile 进行剖测,以确定瓶颈所在。

一般来说, CPU 负载是由于以下两者之一:

·磁盘或内存容量等其他部分没有成为瓶颈,即处于理想状态;

·程序失控,需要消耗过多的CPU 。

如果是前者,并且系统的吞吐量有问题,可以采取增加服务器、改善程序逻辑和算法的方式。后者的情况要去除故障,避免程序失控。


"I/O 负载"过高,其原因多半是程序发出的I/O 请求过多导致负载过高,或是发生页面交换导致频繁访问磁盘。应通过sar或vmstat剖确认交换区状态,以找出原因。

根据确认结果,如果是发生页面交换的情况,应该从以下几点着手调查:
·用ps 确认是否有进程消耗了大量的内存;

·如果由于程序故障造成内存消耗过大,应改进程序;

·如果是因为内存安装不足,就要增加内存。无法增加内存时考虑分布式。

如果是没有交换发生,而且磁盘I/O频繁的情况,可能是用于缓存的内存不足。根据服务器拥有的数据量和可增加的内存量,按照以下步骤选择应对方法:

· 如果通过增加内存可以扩大缓存,就增加内存;

· 如果增加内存还不够用,就考虑分散存储数据,或增加缓存服务器等。当然,改进程序减少I/O频率也是一种方法。

上面就是寻找负载原因的基本策略。

改善I/O性能,需要确认以下几点:

·能否通过增加内存以保证缓存区域的方法解决;
.数据量是否本来就过多;
·有无必要改变应用程序的I/O算法。


=====

Web 应用程序在进行计算时,也就是说接受HTTP 请求、查询数据库,再把数据库返回的数据加工变成HTML后发送给客户端,基本上只消耗CPU 。后面讲述服务器组成时会有说明,这些都是代理服务器或应用服务器( application server ) 的工作。

相反,数据库服务器需要较多I/O资源。




Web应用程序的三层结构由代理服务器、应用程序服务器、数据库组成。



处理大规模数据的重点:

1.能在内存中完成多少?

将磁盘寻道次数降到最低(使用索引)

可以实现分布式,有效利用局部性

2.能应对数据量增加的算法和数据结构

例如:线性搜索→二叉树搜索

O(n)→O(logn)

3.数据压缩、信息搜索技术





阅读全文
0 0