架构 高性能

前端优化:

减少http请求:合并cssjsimg

keep-alive复用tcp连接

浏览器缓存:cssjsimg,设置httpCache-ControlExpires

如果要更新缓存的文件,可以改变文件名。

更新文件时,应当一个一个更新,避免浏览器缓存同时大量失效。

压缩:减少传输量,但会对服务器和浏览器产生压力

htmlcss放在上面,浏览器会下载全部的css,然后才渲染页面

解析页面时用不到js的话,可将js放在最后

减少cookie:减少cookie的内容。可考虑用独立的域名访问静态文件

CDN:在离用户近的地方获取文件,部署在运营商的机房,第一跳就能到达。

后端优化:

负载均衡:Http重定向  dns  反向代理nginx  ip  lvs

使用好的服务器,例如nginx,基于事件,epoll,新连接不需要创建进程/线程

应用服务器集群,垂直拆分应用,微服务

优化代码:多线程:好处:避免阻塞,合理利用多cpu。坏处:线程安全、调度开销。

资源复用:数据库连接、网络连接、线程、复杂对象

方式:单例、对象池

减少系统调用:例如内存分配 I/O

OPcache

页面静态化

缓存:将数据放在访问速度快的存储介质里,减少访问时间

如果数据是计算得到的,还可以避免重复计算

经常修改的数据,或没有热点的数据,不适合做缓存

数据更新后,如果立即更新缓存,会加大系统开销,并产生事务一致性问题

如果等缓存失效再更新,在失效前会产生数据不一致

雪崩:缓存崩溃或集中失效,大量请求落在数据库上,

可将过期时间加个随机值,或者用锁限制数据库的并发数量

宕机引起的,则做主备、持久化

缓存服务器集群,将数据分散到不同的服务器上,一台宕机不会对DB造成太大影响

缓存预热:启动时预先加载热点数据

缓存穿透:请求不存在的数据,会请求DB。可将不存在的数据也缓存起来。或者布隆过滤器

缓存击穿:大量请求查询一个key,而这个key失效了。分布式锁

分布式缓存:同步方式,所有服务器保存相同的数据,相互同步。数据量小,同步代价大。

不同步方式,服务器保存的数据不同,通过一致性哈希等进行路由,伸缩性好。

异步:消息队列,削峰

数据库:读写分离,同步有延迟会导致数据不一致,事务里的读要读主库。

垂直拆分,将不同业务的数据拆分到不同的库中。

跨业务的事务要使用分布式事务,效率低,或不使用事务

不支持表关联查询

水平拆分,将一个表中的数据拆分到两个库中。

问题:sql路由,主键不能重复,表关联查询以及分页难处理

事务被打破,影响外键约束

性能指标:(可比作高速公路)

响应时间,如果操作本身很快,可以重复请求一万次,用总的响应时间除以一万。

并发数,同时处理请求的数目,测试时可在两次请求间加入随机等待时间。

吞吐量,单位时间处理的请求数,如请求数/秒,页面数/秒,人数/天,TPS每秒事务数,HPS每秒

http请求数,QPS每秒查询数

性能测试:在正常请求速度下,测试系统表现是否符合预期

负载测试:增加并发数,使系统达到临界值

压力测试:超过安全负载,直到系统崩溃,获取最大承受能力

稳定性测试:运行较长时间,看系统是否稳定

猜你喜欢

转载自www.cnblogs.com/ts65214/p/12968347.html