您的位置:首页 > 运维架构 > 网站架构

《大型网站技术架构》学习总结(3)

2018-03-07 11:41 225 查看
性能优化优化

1、Web性能前端
(1)减少Http 请求
每次Http请求都需要建立通信链路层进行数据传输,在服务端要对应一个线程处理,可以通过合并CSS、合并JS文件、合并图片等手段,讲一次访问所需的资源合成一个文件,多个请求合成一个,若有多张图片连接,可通过CSS偏移相应鼠标点击操作,构造不同的URL。
(2)使用浏览器缓存
CSS和图标等静态资源更新的频率比较低,使用次数比较大,还存在溜拉起中,可以改善性能,通过设置HTTP头的Cache-Control和Expires属性,设定浏览器缓存属性。在更新这些文件时,可以分批次更新,有时间间隔,避免短时间内大量缓存的更新,造成负载骤增。

(3) 启用压缩
Gzip压缩。

(4)CSS放在页面文件的最上面,JS文件放在最下面
浏览器在下载全部CSS文件后会对整个页面进行渲染,让浏览器尽快下载CSS,而JS加载后就会运行,所以放在最后,如果要页面解析要用到JS,就别放在底部了。

(5)减少Cookie传输
不要把静态资源的访问写入cookie。

(6)CDN加速
CDN能够缓存的一般是静态资源,如JS文件,CSS文件,JS文件,静态页面等等。




(7)反向代理
反向代理位于机房一侧,代理WEB服务接受HTTP请求并转发请求,可以保护网站安全,还可以配置缓存功能,当浏览器第一次访问静态资源时,资源被缓存在反向代理服务器上,当其他用户访问这些资源时,可以直接返回,加速响应速度。

2、应用服务器性能优化
(1)分布式缓存
缓存是一张Hash表,以键值对的形式存储,通过键Key对应的Hash表索引,可以快速找到数据,根据时间局部性和空间局部性原理,以及80%的访问落在20%的资源上,将这20%的数据缓存起来,可以提高访问效率。
但缓存如果存储频繁修改的数据,就会造成数据失效的情形,还要用缓存淘汰算法把历史数据清理出去,若数据不一致
可以通过缓存热备提高缓存可用性,当某台缓存服务器宕机时,将缓存访问切换到备用服务器。
要小心缓存穿透,如果不断请求一个不存在的数据,那么就会到数据库中查找数据,对数据库造成压力。
分布式缓存架构,以集群的方式提供缓存服务,有以JBoss Cache为代表的需要更新同步的分布式缓存,和以Memcached为代表的不互相通信的分布式缓存。
JBoss Cache的分布式缓存在集群中所有的服务器保存相同的缓存数据,当缓存数据改变时时,会通知其他机器更新或删除,将应用程序和缓存部署在同一台服务器上,可以从本地快速获取缓存数据,但缓存的数量有限,集群规模大时不实用。




Memcached采用集中式的缓存集群管理,缓存与应用程序分离部署,应用程序通过算法选择缓存服务器远程访问缓存数据,可伸缩性强。



3、使用异步操作
使用消息队列使得调用异步化,如activeMQ ActiveMQ、RabbitMQ等等,用户请求的数据发送给消息队列后返回,再由消息队列的进程获取数据,进行操作。
4、使用集群
使用负载均衡构建一个服务器集群,多个服务器处理访问请求。
5、代码优化
(1)使用多线程
线程数的估算公式可以参考这个:
线程数=任务启动时间/(任务执行时间 - IO等待时间)*CPU内核数
最佳启动线程数和CPU内核成正比,和IO阻塞时间成反比,如果是计算性任务,那线程数不超过内核数。要注意线程安全问题。
(2)资源复用
减少大开销的系统资源的创建和销毁,如数据库连接、线程。网络通信连接等等,可以使用单例和对象池等技术。
(3)数据结构
灵活组合数据结果改善数据读写和计算性能。
(4)垃圾回收


存储性能优化

1、硬盘

机械硬盘和固态硬盘,现在的固态死贵了。。。买不起啊。。。

2、B+树和LSM树

文件系统和数据库系统一般都会对数据进行排序然后存储,加快数据检索速度,保证数据在不断更新、插入和数据后依然有趣,传统关系型数据库使用的是B+树,以树节点为单位存储在磁盘中,从根开始查找所需数据所在的结点编号和磁盘位置,将其加载到内存中然后继续查找,使用两级索引的B+树,输的层次最多三层,可能需要五次磁盘访问才能更新一条记录。

NoSQL数据库使用LSM树,N阶合并数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: