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

来源:互联网 发布:java设置pdf打印格式 编辑:程序博客网 时间:2024/05/29 07:56

小规模服务和大规模服务的区别:

1.保证可扩展性、负载均衡的必要性

横向扩展:通过增加服务器数量来提高系统整体的处理能力并分担负载。

纵向扩展:通过提高硬件性能来提高处理能力的方法。

硬件的性能和价格不是成比例的。越是大批量生产的通用硬件,其价格就越便宜,而横向扩展策略就是通过横摆放廉价硬件来确保可扩展性。采用横向扩展策略能降低成本,
但会产生各种各样的问题。例如:用户请求如何分配?(负载均衡器),采用分布式数据库如何保持数据同步?网络延迟怎么处理?


2.保证冗余性

系统的冗余性是必要的,也就是说,不论哪台服务器出现故障或不正常,服务必须能继续运行。


3.低成本运维的重要性

4.开发人数和开发方法的变化


应对大规模数据量:

运行大规模Web 应用程序时,绝大部分的精力都用在大规模数据处理方面。

计算机要从磁盘(硬盘)上读出数据并存储到内存上,然后CPU 会从内存上取得数据进行处理。而且,从内存上取得的指令会缓存到更高速的CPU 缓存中。所以,数据要经过磁盘→内存→缓存→CPU 多层才能被处理。

为减小这种速度差,操作系统使用了各种各样的手段,例如从磁盘加载数据后先放进内存中缓存等,从整体上使得设备间的速度差异减少到感觉不到的程度。数据库等中间件的数据结构和实现基本上也考虑了速度差异。
即使操作系统和中间件再努力,也是有极限的。数据量增大,就会经常发生缓存不命中,结果就要多次访问低速磁盘。进入磁盘I/O ( 输入输出〉等待队列的程序在等待读取完成之时,即使其他资源空闲,也无法进行下一步处理。这就会导致系统整体的速度下降。


大规模化的壁垒会突然出现在眼前。例如,数据规模增大引起的I/O负载上升并不是平滑增加的。从缓存不命中开始只需片刻,问题就会急剧显露出来,引起人们注意时,系统速度就已经开始下降了一一这种事情是极其常见的。



阅读全文
0 0
原创粉丝点击