本文主要是介绍大型网站技术架构——读后摘要4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网站优化第一定律:优先使用缓存。
1.性能测试
测试的方面:
- 响应时间(注意瞬时响应)
- 并发数
- 吞吐量
- 性能计数器:指的是服务器和操作系统性能的一些数据指标。【System Load(系统负载)、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等指标】
2.Web前端性能优化
- 浏览器访问优化:
- 减少Http请求
- 使用浏览器缓存
- 启用压缩
- CSS放在页面最上端,js放在页面最下端。【CSS对页面进行调整渲染一定要先加载,而js在页面加载的时候调用的话会导致页面卡顿等待js响应完】
- 减少Cookie的传输
- CDN加速
CDN的本质就是缓存,将数据更新机房中访问量高的数据缓存到CDN服务器,如果客户发送请求,请求先去就近的CDN服务器,如果CDN服务器有请求响应直接发送,降低了请求的时间。
- 反向代理
首先提高了网络的安全性能;代理服务器可以通过缓存技术,当请求数据存在代理服务器上,代理服务器直接响应。
3.应用服务器性能优化
应用服务器是用来处理网站业务的服务器。网站业务都部署在这里,这里是网站开发最复杂、多变的地方。优化的手段主要有缓存、集群、异步。
3.1分布式缓存
缓存的基本原理:
缓存是指将数据存储在访问数据较高的存储介质中。一方面缓存访问速度快,keyi减少数据访问的时间;另一方面缓存的数据是经过处理得到的,那么数据可是可以直接使用不需要在进行计算,因此缓存还起到减少计算时间的作用。
缓存的本质是一个内存Hash表,数据以key、value对的形式存在Hash表中。key的hashcode对应Hash表索引。
缓存常用应用场景:缓存常用来存储哪些对读写速度要求高、很少发生变化的数据。如商品类目、热门词汇收索
合理使用缓存:
1.频繁修改的数据
2.没有热点的数据(缓存数据时会设置失效时间,如果在缓存中的数据没有访问的热点,到失效时间就会被清除,存在缓存中没什么意义)
3.数据不一致与脏读(如果缓存中的数据失效,会从数据库中加载,如果此时用户访问时就会产生脏读的可能);
4.缓存的可用性(指的是稳定性,会不会崩溃,因为缓存崩溃可能导致数据库崩溃)
5.缓存预热(在缓存系统启动时预先加载用的数据)
6.缓存穿透(对于一些不恰当的业务,【指持续、并发请求缓存没有的数据】,这些请求会向数据库发送请求可能导致数据库崩溃,所以缓存将这些不存在的数据存下来,其值为null)。
3.1.1分布式缓存架构
常用的有两种:1.JBoss Cache 2.Memcached
JBoss Cache:所有缓存服务器存相同的数据,当一台缓存服务器更新时,会通知 其他缓存服务器更新。【大型网站不会用,太占内存使用空间,冗余度太高!!!】
Memcached:互不通信的分布式缓存。
Memcached优点:
1.简单的通信协议
2.丰富的客户端程序
3.高性能的网络通信
4.高效的内存管理
5.互不通信的服务器架构
3.2异步
消息队列具有很好的削峰作用——即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。【比如在限时促销时使用,可以防止开始时大量用户涌入导致系统崩溃】,用户登录后如果提交订单可能会失败,因为登录信息可能还在消息队列,所以提交订单的流程也需要修改,不能直接返回给用户订单提交成功,要等消息队列里订单真的完成再以邮件或短信的形式提示用户成功。
3.3使用集群
网站高并发访问的情景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上,避免了一台服务器因为负载压力过大导致响应缓慢。
3.4代码优化
1.多线程
从资源利用上来看,使用多线程的原因主要有两个:IO阻塞和多CPU。
操作IO通常都会使用较长的时间,当此线程阻塞时,cpu可以调度其他线程处理,这样在IO阻塞的时候就不会出现CPU空闲,因为现在CPU都是多核,我们要最大限度的使用cpu完成操作。
多线程的使用也会伴随线程安全问题:
解决线程安全问题的方法:
1.将对象设计为无状态对象:(所谓无状态是指对象本身不存储状态信息【对象最好无成员变量 ,即使有也要是定值,不可以被操作改变,因为你要是改变,其他线程不知道值不会改变就会乱】)
2.多使用局部变量、对象(这样线程运行完就会被释放与其他线程毫无关联)
3.并发访问时使用锁,让线程同步操作的数据。
2.资源复用
所谓资源复用,是指在做连接数据库操作、网络连接操作、复杂对象等:可以使用单利设计模式,对象池,连接池
3.数据结构
4.垃圾回收
垃圾回收机制:
5.存储性能优化
1.机械硬盘与固态硬盘的应用
2.B+树[多路查找树],LSM树
3.RAID和HDFS
RAID(廉价磁盘冗余阵列)技术,主要是为了改善磁盘访问延迟,增强磁盘的可用性和容错能力。
HDFS中两种重要的服务器角色:NameNode(服务节点),DataNode(数据存储节点)
这篇关于大型网站技术架构——读后摘要4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!