读书笔记——《大规模Web服务开发技术》
2、Hatena的成长经历
1、大规模数据处理入门
HatenaBookmark的数据规模
精辟言论:每天发生的未知问题——在尝试中积累经验。没有“出现某种问题就该怎么做”的理论,只能在反复尝试中积累着经验。
2、大规模数据处理的难点——内存和磁盘
关于瓶颈,不要推测,要测量,掌握测量工具top,uptime,sar,ps,strace,oprofile
操作系统调优,就是找出负载原因(瓶颈)并去除之
3、可扩展性要点——cpu负载和i/o负载
cpu负载的扩展十分简单,可借助于:
增加相同结构的服务器,通过负载均衡器来分散
web、应用程序服务器、爬虫
i/0负载的扩展十分困难,可借助于:
数据库
大规模数据
4、处理大规模数据的基础知识
写程序的技巧(能在内存中完成多少,能应对数据量增加的算法和数据结构,数据压缩、信息搜索技术)
程序开发的底层基础(操作系统缓存,以分布式为前提的RDBMS应用,算法和数据结构)
第三章:操作系统的缓存和分布式
处理大规模数据的要点——i/o方面由操作系统负责
1、操作系统的缓存
内存的速度是磁盘的10的5次方-10的6次方倍
2、以缓存为前提的i/o负载降低策略
3、利用缓存上的局部性进行分布式
第四章:数据库的横向扩展策略——以分布式为基础
1、索引的重点
2、mysql的分布式
Replication,读写分离
3、横向扩展与Partitioning
Partitioning的优点:降低负载、增加局部性,提高缓存效果
缺点:运维变复杂,故障率上升,经济成本上升
Partitioning是杀手锏
第十一章-第十五章:web服务的基础设施
第十一章:支持大规模数据处理的服务器/基础设施入门——web服务的后台
1、web服务的基础设施特点和Hatena的特点
企业软件vs web服务
web服务基础设施重视的三点:
1)低成本、高效率(不应当追求100%可靠性)
2)设计很重要(可扩展性、响应性很重要)
3)开发速度很重要(要为服务提供灵活的资源)
云vs.自行构建基础设置
各种技术(后续章节详细介绍,第十二章-第十五章)
2、可扩展性
3、冗余化
4、提高效率
5、网络
第十二章:可扩展性思路——规模扩大和系统扩展
1、层和可扩展性
可扩展性要求:
许多服务可以在1台服务器上运行
大规模服务无法在一台服务器上运行
各层的可扩展性:
应用程序服务器,配置相同、不持有状态,扩展容易
数据源(数据库、文件服务器等)
read的分布式比较容易(安装大量内存等)
write的分布式,难
2、掌握负载进行调优
掌握负载
使用服务器管理工具
状态的监视
将负载可视化,以便掌握瓶颈、异常等
(测量负载的指标——平均负载、内存、cpu信息)
理解操作系统运行原理,正确发挥服务器性能
根据用途调优——面向用户服务器和面向爬虫服务器
负载均衡(lvs)
第十三章:保证冗余性和系统稳定性
不追求100%在线率(但需努力达到),去除单点故障(SPOF)
冗余性:
应用程序服务器:
增加服务器数量
负载均衡器实现失败转移和失败恢复
数据库服务器:
增加数量
Multi_master(切换时有不同步的风险,忽略该风险,有问题人工恢复)
存储服务器:
分布式文件系统(MogileFS)
稳定性:
不稳定因素
负载增大(功能增加、内存泄露、地雷、用户访问模式、数据量增加、外部管理程序增加)
硬件问题(性能下降,内存、硬盘、网卡故障)
稳定性措施:
维持适当余量(内存容量、cpu负载使用7成)
去除不稳定因素(规定sql负载上限,必要时转移,减少内存泄露,异常行为自律,自动DoS判断(mod_dossdetector),自动重启(应用程序服务器和宿主操作系统),自动终止耗时查询(kill掉耗时过长的sql))
第十四章:提高效率——提高硬件资源使用率
1、硬件效率(实现冗余化导致使用率下降)
2、虚拟化技术(提高主机集成度)
虚拟化优缺点及必要性
Hatena使用Xen
3、自行组装服务器(只组装必须设备,降低成本)
ssd做slave(性能优秀)
ssd寿命
第十五章:web服务和网络
网络的分界点
1Gbps的界限(pc路由器极限)
500主机的界限(一个子网的极限,子网、arp表极限)
全球化、CDN
更高的界限
第十六章:当前构建web服务需要的实践技术
1、作业队列系统——TheSchwarts/Gearman
2、存储的选择——RDBMS或key-value存储
3、缓存选择_Squid/Varnish
4、计算集群——Hadoop
第一章:定位——掌握整体
1、大规模web的概念、规模2、Hatena的成长经历
第二章-第五章:大规模数据处理方法
第二章:入门——内存和磁盘、web应用和负载1、大规模数据处理入门
HatenaBookmark的数据规模
精辟言论:每天发生的未知问题——在尝试中积累经验。没有“出现某种问题就该怎么做”的理论,只能在反复尝试中积累着经验。
2、大规模数据处理的难点——内存和磁盘
关于瓶颈,不要推测,要测量,掌握测量工具top,uptime,sar,ps,strace,oprofile
操作系统调优,就是找出负载原因(瓶颈)并去除之
3、可扩展性要点——cpu负载和i/o负载
cpu负载的扩展十分简单,可借助于:
增加相同结构的服务器,通过负载均衡器来分散
web、应用程序服务器、爬虫
i/0负载的扩展十分困难,可借助于:
数据库
大规模数据
4、处理大规模数据的基础知识
写程序的技巧(能在内存中完成多少,能应对数据量增加的算法和数据结构,数据压缩、信息搜索技术)
程序开发的底层基础(操作系统缓存,以分布式为前提的RDBMS应用,算法和数据结构)
第三章:操作系统的缓存和分布式
处理大规模数据的要点——i/o方面由操作系统负责
1、操作系统的缓存
内存的速度是磁盘的10的5次方-10的6次方倍
2、以缓存为前提的i/o负载降低策略
3、利用缓存上的局部性进行分布式
第四章:数据库的横向扩展策略——以分布式为基础
1、索引的重点
2、mysql的分布式
Replication,读写分离
3、横向扩展与Partitioning
Partitioning的优点:降低负载、增加局部性,提高缓存效果
缺点:运维变复杂,故障率上升,经济成本上升
Partitioning是杀手锏
第十一章-第十五章:web服务的基础设施
第十一章:支持大规模数据处理的服务器/基础设施入门——web服务的后台
1、web服务的基础设施特点和Hatena的特点
企业软件vs web服务
web服务基础设施重视的三点:
1)低成本、高效率(不应当追求100%可靠性)
2)设计很重要(可扩展性、响应性很重要)
3)开发速度很重要(要为服务提供灵活的资源)
云vs.自行构建基础设置
各种技术(后续章节详细介绍,第十二章-第十五章)
2、可扩展性
3、冗余化
4、提高效率
5、网络
第十二章:可扩展性思路——规模扩大和系统扩展
1、层和可扩展性
可扩展性要求:
许多服务可以在1台服务器上运行
大规模服务无法在一台服务器上运行
各层的可扩展性:
应用程序服务器,配置相同、不持有状态,扩展容易
数据源(数据库、文件服务器等)
read的分布式比较容易(安装大量内存等)
write的分布式,难
2、掌握负载进行调优
掌握负载
使用服务器管理工具
状态的监视
将负载可视化,以便掌握瓶颈、异常等
(测量负载的指标——平均负载、内存、cpu信息)
理解操作系统运行原理,正确发挥服务器性能
根据用途调优——面向用户服务器和面向爬虫服务器
负载均衡(lvs)
第十三章:保证冗余性和系统稳定性
不追求100%在线率(但需努力达到),去除单点故障(SPOF)
冗余性:
应用程序服务器:
增加服务器数量
负载均衡器实现失败转移和失败恢复
数据库服务器:
增加数量
Multi_master(切换时有不同步的风险,忽略该风险,有问题人工恢复)
存储服务器:
分布式文件系统(MogileFS)
稳定性:
不稳定因素
负载增大(功能增加、内存泄露、地雷、用户访问模式、数据量增加、外部管理程序增加)
硬件问题(性能下降,内存、硬盘、网卡故障)
稳定性措施:
维持适当余量(内存容量、cpu负载使用7成)
去除不稳定因素(规定sql负载上限,必要时转移,减少内存泄露,异常行为自律,自动DoS判断(mod_dossdetector),自动重启(应用程序服务器和宿主操作系统),自动终止耗时查询(kill掉耗时过长的sql))
第十四章:提高效率——提高硬件资源使用率
1、硬件效率(实现冗余化导致使用率下降)
2、虚拟化技术(提高主机集成度)
虚拟化优缺点及必要性
Hatena使用Xen
3、自行组装服务器(只组装必须设备,降低成本)
ssd做slave(性能优秀)
ssd寿命
第十五章:web服务和网络
网络的分界点
1Gbps的界限(pc路由器极限)
500主机的界限(一个子网的极限,子网、arp表极限)
全球化、CDN
更高的界限
第十六章:当前构建web服务需要的实践技术
1、作业队列系统——TheSchwarts/Gearman
2、存储的选择——RDBMS或key-value存储
3、缓存选择_Squid/Varnish
4、计算集群——Hadoop