第十二章 保证可扩展性的必要思路——规模扩大和系统扩展
Hatena 的大规模服务由几十台服务器构成,各台服务器均为4 核CPU 1 ~2 个,安装8GB ~ 32GB 内存,并能够根据负载状况进行扩展。
各层的扩展性:
应用程序的扩展比较简单。
因为应用程序服务器没有状态,将任何请求分配到其他应用程序服务器上都不会发生任何问题,因此只须在负载均衡器上添加新服务器就可以不断扩大。只要增加服务器,就可以扩展到无限大。
而数据库服务器和文件服务器等,就很难像应用程序服务器那样实现分布式、保证可扩展性。对于数据源的请求包括read(读取)和write (写入)两种, read 的分布式比较容易实现,而write 的分布式很困难。
掌握负载进行调优
测量指标——平均负载,内存,CPU
首先要看平均负载(load average) 。之前讲过,平均负载是重要数据。Linux 内核会启动多个进程。平均负载就是处于随时可以运行但尚未分配到CPU 而处于等待状态的进程数的平均值。例如, 5 分钟内的平均负载为1 ,那就是说5 分钟内平均有1 个进程处于等待状态。
根据用途进行调优——面向爬虫和面向用户的服务器
爬虫对于响应时间的要求并不严格,因此调整服务器使得请求的处理量最大,实际的平均负载也会提高。
面向用户的服务器中可以看出,负载随着用户活动和流量而变化。深夜负载会稍稍回落, 白天增高,晚上的繁忙时间更高。与前面面向爬虫服务器的6 相比,平均负载被控制在1~3 左右,为实现良好的响应时间,不应用尽所有服务器资源,而是要朝着维持良好的响应时间,不要产生等待进程的方向进行调优。
总结一下,要将应用程序服务器分成面向爬虫和面向用户,制定不同的调优策略,有的重视效率,有的重视响应时间,有的重视资源的有效利用。
服务规模和调优
随着服务器越来越多,如何找到行为异常的服务器就成了问题。
保证可扩展性