操做 | 响应时间 |
L1缓存 | 1ns |
分支错误 | 3ns |
二级缓存 | 4ns |
互斥锁/解锁 | 17ns |
压缩1KB的Zippy | 2,000ns≈2μs |
经过商品网络发送2,000字节 | 88ns |
SSD随机读取 | 16,000ns≈16μs |
从存储器中顺序读取1,000,000字节 | 5,000ns≈5μs |
往返于同一数据中心 | 500,000ns≈500μs |
从SSD中顺序读取1,000,000字节 | 78,000ns≈78μs |
磁盘查找 | 3,000,000ns≈3ms |
从磁盘顺序读取1,000,000字节 | 1,000,000ns≈1ms |
将数据包往返于荷兰 | 150,000,000ns≈150ms |
从远程分布式缓存Redis读取一个数据 | 0.5ms |
机械磁盘一次寻址定位 | 4ms |
在数据库中查询一条记录(有索引) | 十几ms |
打开一个网站 | 几秒 |
https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.htmljavascript
指单位时间内系统处理的请求数量,体现系统的总体处理能力。css
TPS:(每秒事务数)是吞吐量的一个经常使用量化指标。html
HPS:(每秒HTTP请求数)。前端
QPS:(每秒查询数)。java
性能测试、负载测试、压力测试、稳定性测试。web
测试目标:一、系统的最大负载点。二、系统的崩溃点。数据库
排查一个网站或者程序瓶颈的手法基本相同:检查请求处理的各个环节的日志,分析哪一个环节响应时间不合理、超过预期;而后检查监控数据,分析影响性能的主要因素是内存、磁盘、网络仍是CPU,编程
是代码问题仍是架构设计不合理,或者系统资源确实不足。后端
CDN(Content Distribute Network,内容分发网络)的本质仍然是一个缓存,并且将数据缓存在离用户最近的地方,使用户以最快速度获取数据,即所谓网络访问第一跳。
能够配置缓存加速web请求
网站性能优化第必定律:优先考虑使用缓存优化性能
1、缓存的基本原理 缓存指将数据存储在相对较高访问速度的存储介质中,以供系统处理。 网站数据访问一般遵循二八定律,即80%的访问落在20%的数据上,所以利用Hash表和内存的高速访问特性,将这20%的数据缓存起来,可很好的改善系统性能。
二、合理使用缓存
频繁修改的数据:不宜使用缓存。
(数据的读写比在2:1以上,即写入一次缓存,在数据更新前至少读取两次,缓存才有意义)
没有热点的访问:不宜使用缓存。
(若是应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问并无集中在小部分数据上,那么缓存也就没有意义)
数据不一致与脏读:若是不能容忍必定时间的数据不一致,也不建议使用缓存。
缓存可用性:缓存是为了提升数据读取性能,缓存数据丢失或者缓存不可用不会影响到应用程序的处理,由于能够从数据库直接获取数据。
但当缓存服务崩溃时,数据库的压力会骤然增长,严重会致使宕机。
(因此须要避免 缓存雪崩)
缓存预热:缓存中存放的是热点数据,热点数据又是缓存系统利用LRU对不断访问的数据筛选淘汰数来的,这个过程须要花费较长的时间。若是是新启动的缓存系统,若是没有任何数据,在重建缓存数据的过程当中
系统的性能和负载都不太好,那么最好在缓存系统启动时就把热点数据加载好。
缓存穿透:若是由于不恰当的业务或者恶意攻击持续高并发地请求某个不存在的数据,因为缓存没有保存该数据,全部的请求都会落在数据库上,会对数据库形成很大的压力,甚至崩溃。
(一个简单的对策是将不存在的数据也缓存起来)
三、分布式缓存架构
指缓存部署多个服务器组成的集群中,以集群方式提供缓存服务。
四、Memcached
(简单的通讯协议、丰富的客户端程序、高性能的网络通讯、高效的内存管理、互不通讯的服务器集群架构)
任何能够晚点作的事情都应该晚点再作。
使用消息队列将调用异步话,经过异步处理,将短期高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。 ----- 消息队列具备很好的削峰做用
在高并发访问的场景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢。
1、多线程 使用多线程的缘由主要有两个:IO阻塞与多CPU。 (理想的系统Load是既没有进程(线程)等待也没有CPU空闲)。 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)] * CPU内核数 解决线程安全的主要手段: ①: 将对象设计为无状态对象(指对象自己不存储状态信息),这样多线程并发访问的时候就不会出现状态不一致,java web 开发中经常使用的servlet对象就设计为无状态对象。 ②:使用局部对象 ③:并发访问资源时使用锁 2、资源复用 从编程角度,资源复用主要两张模式:单例(Singleton) 和对象池 (Object Pool) 好比:数据库链接、网络通讯链接、线程、复杂对象等。 3、数据结构 4、垃圾回收 合理设置堆大小,减小Full GC次数
①、机械硬盘 & 固态硬盘浏览器
②、B+树 & LSM树
③、RAID & HDFS