减少服务器流量 https://kdocs.cn/l/sI6ZufiJ2?f=131
减少服务器流量
1)客户端发出请求层面,常见的手段有:
尽量利用浏览器的缓存功能,减少访问服务端,比如:js、css、图片等
可以考虑使用压缩传输的功能,减少网络流量,也会提高传输速度
考虑使用异步请求,分批获取数据
2)前端接收客户端请求层面,常见的手段有:
动静分离,部分静态资源可以直接从Nginx返回
按请求的不同,分发到不同的后端进行处理,比如:负载均衡、业务拆分访问等
前面再加上一层来做多个Nginx的负载均衡,比如:LVS、F5等
还可以在更前面使用CDN服务
还可以对动态内容进行缓存,尽量减少访问后端服务
3)Web服务器层面,常见的手段有:
使用最新的JVM,并进行配置优化
对Web服务器进行配置优化,比如:调整内存数量、线程数量等
提供多个能提供相同服务的Web服务器,以实现负载均衡
仔细规划Web服务器上部署的应用规模
对Web服务器进行集群
4)Web应用层面,常见的手段有:
动态内容静态化
Java开发优化
优化处理业务逻辑的算法
合理高效的利用缓存
优化访问数据库的Sql,可以考虑利用存储过程等数据库的能力
合理使用多线程,加快业务处理
部分业务可以考虑内存数据库,或者是进行纯内存处理
尽量避免远程调用、大量I/O等耗时的操作
合理规划事务等较为耗资源的操作
合理使用异步处理
对部分业务考虑采用预处理或者预计算的方式,减少实时计算量
内部系统间的业务尽量直接调用、直接处理,减少WebService、工作流等
5)数据库层面,常见的手段有:
合理选择数据库的引擎,比如Mysql的InnoDB与MyISAM引擎
进行配置优化
可以考虑使用存储过程来处理复杂的数据逻辑
数据库集群,进行读写分离
合理设计数据库的表结构、索引等
分库、分表,降低单库、单表的数据量
浏览器缓存+压缩传输+CDN
1. 浏览器缓存css,js,图片,录音等
2. 使用webpack(压缩,静态)
3. CDN分布存储,负载均衡,网络请求重定向,内容管理(共享缓存缓存)
一. CDN概念
CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
二.CDN原理
CDN服务商在全国各地部署一些节点服务器,如果你的网站要使用他们CDN的话,他们就会把你网站里能够缓存的内容都缓存到各地的节点服务器上。这样不同地区、不同运营商的访问者访问你网站的时候,就可以就近在一个节点上访问,不需要去你源站。从而起到加速的效果
动态页面的大部分内容都是由脚本代码产生,那么这个页面使用CDN加速是没有多大效果的,毕竟这个页面的主要内容没办法被存入镜像;但是对于图片较多的动态页面,例如图片论坛,我想这种加速还是有意义的
高速VPN通道、高效压缩传输、优质BGP线路(技术涵盖)
CDN那边配置的遵循源站的策略,默认的话,我们没有设置PHP文件不缓存,就帮我们缓存了24小时 (貌似是根据供应商而定)
三.webpack概念(模块化)
webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle
Webpack的工作方式是:
把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件
四. 浏览器缓存
缓存头:
1. 关于http缓存头,新版最常见的就是 ETag 和 Cache-Control 这两个标签
Cache-Control
- private:表示它只应该存在本地缓存
- public:表示它既可以存在共享缓存,也可以被存在本地缓存
- no-cache:表示不论是本地缓存还是共享缓存,在使用它以前必须用缓存里的值来重新验证
- no-store:表示不允许被缓存。
- max-age=:设置缓存时间,设置单位为秒。本地缓存和共享缓存都可以
- s-maxage=:覆盖 max-age 属性。只在共享缓存中起作用。
- immutable:表示文档是不能更改的。
- must-revalidate:表示客户端(浏览器)必须检查代理服务器上是否存在,即使它已经本地缓存了也要检查。
- proxy-revalidata:表示共享缓存(CDN)必须要检查源是否存在,即使已经有缓存。
Last-Modified
服务器告知客户端,资源最后一次被修改的时间,例如
Last-Modified: Thu, 10 Nov 2015 08:45:11 GMT
Etag存储的是文件的特殊标识(一般都是hash生成的),服务器存储着文件的Etag字段,可以在与每次客户端传送If-no-match的字段进行比较,如果相等,则表示未修改,响应304;反之,则表示已修改,响应200状态码,返回数据。
浏览器的行为会产生怎样的请求:
1. 刷新网页 => 如果缓存没有失效,浏览器会直接使用缓存;反之,则向服务器请求数据
2. 手动刷新(F5) => 浏览器会认为缓存失效,在请求服务器时加上Cache-Control: max-age=0字段,然后询问服务器数据是否更新。
3. 强制刷新(Ctrl + F5) => 浏览器会直接忽略缓存,在请求服务器时加上Cache-Control: no-cache字段,然后重新向服务器拉取文件。
归类:
一.强制缓存
1. Expires字段
2. Cache-Control字段
二.对比缓存
1. Last-Modefied字段
2. Etag标识
1. 浏览器行为引起的缓存变化
2. 移动端的缓存策略
五. 阿里云,腾讯 CDN 计费
阿里 1500+ 节点
腾讯 1300+节点
六. 开通阿里CDN步骤:
步骤一:开通CDN服务
1.在阿里云官网 CDN产品详情页快速了解产品,之后单击 立即开通。
2.在购买页面选择适合计费方式,确认订单,CDN服务即开通。接下来就能开始接入您要加速的域名了。
步骤二:添加加速域名
A. 添加域名。
登录CDN控制台,选择域名管理。查看您添加的所有加速域名和状态。点击 添加域名。
B.填写基本信息。
输入加速域名(一般使用 子域名或泛域名,例如 cdntest.example.com)、选择合适的业务类型、源站。点击 下一步,等待审核。
步骤三:配置CNAME
A.在控制台域名管理的域名列表中复制加速域名对应的CNAME地址。
B.前往你的域名解析(DNS)服务商(如万网、阿里云解析、DNSPod、新网、腾讯云解析、route 53、godaddy等),添加该CNAME记录
步骤四:验证CDN服务是否生效
配置CNAME后,不同的服务商CNAME生效的时间也不同,一般新增的CNAME记录会立即生效,修改的CNAME记录会需要较长时间生效。
您可以 ping 或 dig 您所添加的加速域名,如果被解析至 *.*kunlun*.com的域名,即表示CNAME配置已经生效,CDN功能也已生效: