《大型网站技术架构-核心原理和案列分析》读书笔记

今天花了一天的时间看完《大型网站技术架构-核心原理和案列分析》,看到一些内容有点收获,就记录下来,

好的设计绝对不是模仿、不是生搬硬套某个模式,而是在对问题深刻理解之上的创造和创新,即使是“微创新”,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解和把握。

业务驱动技术,还是技术驱动业务?

分层:应用层(MVC)、服务层、数据层;

分割:分布式服务

分布式:分布式应用和服务;分布式静态资源;分布式数据和存储;分布式计算;分布式配置(百度的disconf);分布式文件系统;分布式锁;分布式缓存;

缓存应该在第一次查询时存储,在更新数据库时删除。

软件架构关注的点:性能、可用性。伸缩性、扩展性、安全性。

性能测试指标:

1、响应时间;

2、并发数;

3、吞吐量;

TPS:每秒事务数;

HPS:每秒HTTP请求数;

QPS:每秒查询数;

系统吞吐量和并发数借助于高速公路上的收费和车辆通行情况来理解。

4、性能计数器;Linux下的top命令(load average: 0.00, 0.07, 0.05:最近1分钟;5分钟;15分钟运行队列的平均进程数);

性能测试细分:性能测试;负载测试;压力测试;稳定性测试。

 

性能优化策略:

一、Web前端性能优化:

  1、浏览器访问优化:

  1、减少HTTP请求:HTTP协议是无状态的应用层协议,每次HTTP请求都需要简历通信链路、进行数据传输;在服务端,对于每个HTTP请求都需要启动独立的线程去处  理,增加了通信和服务的开销;减少HTTP请求的数目看可以有效提高访问性能。

  减少HTTP请求的手段:合并CSS、合并JavaScript、合并图片。将浏览器一次访问需要的JavaScript、CSS合并成一个文件,一次请求请求到所有的资源。

  合并图片可以采用精灵图的方式,利用CSS的偏移量:https://blog.csdn.net/wangwenkai76/article/details/82556642

  2、使用浏览器缓存;

  3、启用压缩;GZIP;

  4、CSS放在页面最上方、JavaScript放在页面最下方;

  5、减少Cookie传输:静态资源的请求不需要Cookie,可以使用独立域名的方式访问,避免请求静态资源时发送Cookie,减少Cookie的传递次数。

2、CDN加速

CDN:内容分发网络,本质上是一个缓存,将数据缓存在离用户最近的地方(网络访问第一跳),通常部署在网络运营商的机房。CDN能够缓存的一般是静态资源,如图片、文件、CSS、JavaScript脚本、静态网页等。这些文件的访问频度很高,缓存在CDN可极大 改善网页的打开速度。

3、反向代理

二、应用服务器性能优化:

1、分布式缓存:本质是内存hash表。LCU,LRU,FIFO

使用缓存的注意事项:1、修改频繁的数据(读写比>2:1);没有热点的访问;3、数据不一致与脏读;4、缓存可用性

缓存雪崩:缓存崩溃后,所有的请求全部达到数据库,数据库因此宕机,导致网站不可用,发生这种故障,重启服务器和数据库都不能简单地恢复网站的访问。

缓存热备:缓存中存放的热点数据,在缓存系统启动时就把这些数据加载好,这个缓存预加载的方式就是缓存热备。

缓存穿透:因为恶意攻击或者不恰当的业务,导致持续并发的访问某个 不存在的资源,因为对于不存在的数据,缓存系统未存储,导致所有的请求都落到数据库上,导致数据库负载过重甚至宕机。最简单的解决方案就是讲不存在的数据也缓存起来,value值设为null,利用缓存清除策略后续来清除这些无效的缓存。

分布式缓存架构:

  1、JBoss Cache:更新同步的分布式缓存;使用集群,数据一致,同步数据的代价会比较大,受限于单一服务器的内存。

  2、Memcached(基于TCP长连接)/Redis

Memcached采用固定空间分配(类似于JVM的新生代)来管理内存碎片化(slab_class-->slab-->chunk),缺点是浪费内存。

长连接和短连接的区别:https://www.cnblogs.com/gotodsp/p/6366163.html

远程通信需要考虑的两要素:

  1、通信协议:HTTP协议,TCP协议,UDP协议,IP协议;

  2、通信序列化协议:文本序列化协议:XML、JSON;二进制序列化协议:Google Protobuffer。

2、异步操作;使用消息队列来完成异步解耦消峰。

3、使用集群

4、代码优化:

  1、多线程:注意共享资源的编辑,避免灵异事件的出现。

  解决线程安全的手段:1、将对象设计成无状态对象;2、使用局部对象;3、并发访问资源时使用锁;

  2、资源复用:池化;数据库连接池;线程池;网络连接长连接;

  资源复用主要有两种模式:单例和对象池。

  3、数据结构和算法

  字符串HASH算法:Time33;尽量减少hash碰撞;

  4、垃圾回收:JVM方面的知识:JVM优化,垃圾收集算法;垃圾收集器选择等等

三、数据库服务器优化:

1、机械硬盘 VS 固态硬盘

2、B+树 VS LSM树

3、RAID VS HDFS

 图书馆关门我下楼时,看到了一位老爷爷,馒头稀疏的白发,带着老花镜,走路的节奏很慢,有一种年老体衰的感觉,但是当我看到他怀里还抱着几本书时,突然间感觉眼角有些湿润。这种感觉上一次来的这么仓促,还是2015年的9月3日。那天,我在杭州岳王庙,看到一位满头白发的老奶奶,带着鲜花和水果,在岳飞的雕塑前,虔诚的跪着,嘴里不停的念叨着什么。那一刻突然间感动的有些想流泪,有些欣慰,却又有些难过,青山有幸埋忠骨,白铁无辜铸佞臣。岳飞会在中华民族的历史上永远名垂千古。回来的公交上,等红绿灯时看到路边一位六七十岁的奶奶,抱着自己早已成年,却痴傻的儿子,坐在路边,前面一个破烂的小碗,里面清晰可见的硬币,像在疯狂地暗示着什么。我也不知道我老了后会怎样,我们都会有老去的一天,都会有不被这个社会需要的那天,都会有不被主流媒体关注的那天,希望那时,每个人都能有尊严的活着。希望这个社会能早点善待这个世界努力的那些年轻人,尤其是不用像我们这一代,被房价压得喘不过来气。南京,想说爱你,真的很难。

 

 

posted @ 2019-09-02 16:54  脸皮不厚  阅读(153)  评论(0编辑  收藏  举报