读书笔记:网站架构之性能篇
作者:网络转载 发布时间:[ 2013/12/10 11:05:46 ] 推荐标签:
应用服务器性能优化
一、分布式缓存(memcache)
*:网站性能优化第一定律:优先考虑缓存
1、缓存的基本原理:本质为内存Hash表
*:数据以Key、Value对形式存储在内存Hash表中。通过Hash(Key)得到HashCode,即Value对应内存的位置
2、合理使用缓存
*:不适合缓存的数据:频繁修改(写导致缓存中的数据失效)、没有热点、一致性要求高(缓存设有失效时间,这段时间内可能有脏数据)
*:缓存预热:缓存刚起来时为空数据,好在使用前预加载数据库数据
*:缓存雪崩:当缓存服务器崩溃时,所有请求会落到数据库导致数据库宕机。好的方法是使用分布式缓存服务器提高缓存可用性
*:缓存穿透:不正确或者恶意的请求可能落在某个不存在的Key导致频繁读数据库,一个简单对策将不存在的Key也缓存起来
3、分布式缓存架构
*:一种是以JBossCache为代表的,每个缓存服务器数据相同,需同步更新的分布式缓存(很少用)
*:一种是以Memcache为代表的,每个缓存服务器数据部相同,之间不需要通信的分布式缓存。应用程序通过一致性Hash等路由算法选择具体的缓存服务器
4、Memcache的特点
*:简单的通行协议:TCP的,一套基于简单文本的自定义协议(一个命令关键字+一组命令操作数,如get <key>)
*:丰富的客户端程序:几乎支持所有主流语言(因为通信协议简单)
*:高性能的网络通信:基于Libevent,提供稳定的长连接
*:高效的内存管理::简单固定的内存空间分配,slab_class=>slab=>chunk
*:互不通信的集群架构:客户端路由算法一致性Hash更成为数据存储伸缩性架构的范例
二、异步操作
*:使用消息队列将调用异步化,可改善网站的扩展性
*:消息队列:用户请求发送给消息队列后立即返回,再由消费队列的消费者进程将消息异步写入数据库,具有很好的削峰作用
三、使用集群
*:利用集群解决高并发问题,前端用负载均衡技术将请求均匀分发到多台服务器上(不单单局限在应用服务器)
四、代码优化
1、多线程
*:线程的优点:比进程更轻量,占用更少系统资源,切换代价更小
*:使用多线程的2个主要原因:IO阻塞(阻塞时可以调用其他线程处理)和多CPU(大限度使用CPU)
*:线程数估算公式:启动线程数 = [ 任务执行时间 / ( 任务执行时间 - IO等待时间 ) ] * CPU核数
*:线程安全问题实质:多线程并发对某块内存进行修改操作(对象、内存、文件、数据库等)
*:线程安全问题解决思路:对象设计为无状态,使用局部变量,并发访问加锁等
2、资源复用
*:开销较大的系统资源:数据库连接,网络Socket连接,线程,复杂对象等
*:资源复用的2个方法:单例模式和对象池,都可以防止不必要的创建和销毁操作
3、数据结构和算法
*:灵活组合数据结构和算法优化程序执行复杂度,如Hash等
// ===========================================================
存储性能优化
一、机械硬盘和固态硬盘
1、机械硬盘:每次访问数据都需要移动磁头臂(物理运动),故数据连续访问和随机访问性能表现差别大
2、固态硬盘:没有机械装置,数据存储于硅晶体中,有更好的性能。可靠性,性价比还有待提升,但逐步取代机械硬盘是迟早的事
二、B+树和LSM树
1、由于机械硬盘具有快速顺序读写,慢速随机读写的特性,故应用程序选择存储结构和算法极为重要
2、B+树是一种专门针对磁盘存储而优化的N叉排序树,目前数据库多采用两级索引,树的层次多三层
3、LSM树可以看为一个N阶合并树,数据写操作都在内存中进行,目前许多NoSQL都采用LSM树作为主要数据结构
三、RAID和HDFS
1、RAID,即廉价磁盘冗余阵列,主要是为了改善磁盘访问延迟,增加磁盘可用性和容错能力(数据在多块磁盘并发读写和数据备份)
2、HDFS,即分布式文件系统,Hadoop的文件系统,系统在整个存储集群的多台服务器上进行数据并发读写和备份
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11