缓存系列之二:CDN与其他层面缓存

一:内容分发网络(Content Delivery Network),通过将服务内容分发至全网加速节点,利用全球调度系统使用户能够就近获取,有效降低访问延迟,提升服务可用性,CDN 第一降低机房的使用带宽,因为很多资源通过CDN就直接返回用户了,第二解决不同运营商之间的互联,因为可以让联通的网络访问联通让电信的网络访问电信,起到加速用户访问的目的, 第三:解决用户访问的地域问题,就近返回用户资源。
百度CDN:https://cloud.baidu.com/product/cdn.html
阿里CDN:https://www.aliyun.com/product/cdn?spm=5176.8269123.416540.50.728y8n
腾讯CDN:https://www.qcloud.com/product/cdn

1.1:用户请求的具体流程:

1.2:关于302调度:
如用的是是联通的网络,但是设置了一个电信的DNS,或者电信的用户设置了一个联通的DNS,在刚建立连接的时候CDN法获取到用户的真实IP,而是只能获取到用户的local DNS而判定用户是联通还是电信的网络,假如设置了错误的运营商DNS会被调度到错误的CDN 边缘节点,当和边缘节点连接之后就可以获取到用户的真实IP从而判断用户是联通还是电信的网络,如果是电信的网络被调度到了联通的CDN边缘节点或者是电信的网络被调度到了联通的CND边缘节点,那么可以给用户再发送一个302重定向的回复,用户的浏览器再根据新的地址进行连接,即可访问到正确的CND 边缘节点。

1.3:内容分发与分层:
提前对静态内容进行预缓存,避免大量的请求回源,导致主站网络带宽被打满而导致数据无法更新,另外CDN可以将数据根据访问的热度不通而进行不通级别的缓存,例如访问量最高的资源访问CDN 边缘节点的内存,其次的放在SSD或者SATA,再其次的放在云存储,这样兼顾了速度与成本。

1.4:CND的主要优势:
缓存-缓存到最快的地方如内存,缓存的数据准确命中率高,访问速度就快
调度准确-将用户调度到最近的边缘节点
性能优化-CDN 性能相关
安全相关-抵御攻击等

1.5:自建CDN优缺点:
nginx+squid、nginx+varnish、nginx+ATS等方式可以自建
优点:
自建CDN 比较灵活,可以在访问用户较多的地方多部署服务器
成本比较容易控制
缺点:
费用高
团队技术要求高
问题不便排查,出问题不容易搞的定

二:应用层缓存:
2.1:应用程序级别的缓存:
指的是编译性语言需要编译成二进制可执行代码,比如c/c++/go等,其编译好之后就可以直接运行,另外还有解释性语言,比如php/python先编译成operate code即中间码也叫字节码,中间码不能直接运行需要解释器解释成机器码之后才能执行,因此中间码也算是缓存,php在5.5.0之后已经绑定了OPCache扩展,对于PHP 5.2,5.3,5.4等版本中可以使用PECL 扩展中的OPcache库,在5.5版本之前可以使用APC/Xcache等进行缓存也可以实现,但是5.5之后已经内置OPcache 就不需要APC和Xcache了,开启的话在编译PHP的时候使用–enable-opcache即可,因此使用PHP 推荐使用5.5之后的版本并打开OPcache以提升性能,另外如果在开启OPcache的情况下使用了软连接的方式部署代码会导致代码不更新,当代码更新之后需要重启php-fpm才可以识别并将新的代码进行编译成字节码并通过解释器解释给访问用户,apache 的mod_cache现在一般不使用,nginx的FastCGI缓存会导致代码代码更新后用户访问不生效,因此也不使用,所以动态语言就使用OPcache,FastCGI会导致不生效就直接关闭。

2.2:动态页面静态化:
将java的动态页面静态化,比如将每个具体产品的web页面静态化为html文件,然后通过nginx 的rewrite功能发布,即用户最终访问到的某个产品的web 页面是静态的页面,静态页面的访问速度是比较快的,生成的静态页面可以通过nfs、rsync、分布式存储等方式推送到各web服务器,如果静态页面生成的信息是错误的,可以将信息更改后通过推送平台重新生成新的web页面并同步到各web服务器,平时可以通过每间隔几个小时自动生成静态页面,比如每6小时生成一次动态页面并同步到各web服务器。

三:其他缓存:
3.1数据缓存
3.1.1:分布式缓存:redis、memcached
3.1.2:数据库:MySQL的Innodb缓存、MYISA缓存

3.2:系统层:
3.2.1:操作系统
CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
内存:buffer和cache、内存表缓存

3.3:物理层:
3.3.1:磁盘缓存:磁盘有自己的缓存,用RAID 卡的时候磁盘的缓存是关闭的。
3.3.2:RAID 卡缓存:服务器在使用raid 卡的时候磁盘的缓存默认是关闭的,避免因为突然断电而导致的缓存里面的数据丢失,看看到磁盘的换粗是关闭的,因为raid 卡可以带电池供电。
3.3.3:RAID 卡的基本操作命令:
查看当前RAID卡缓存策略
MegaCli64 -LDinfo -Lall -aAll
Default Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU

Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
第一部分:
WriteBack:写缓存策略
WriteThrough:直接写入磁盘,不使用RAID卡缓存。
第二部分:
ReadAheadNone:不开启预读
ReadAhead:开启预读,在读操作的时候,预先把后面顺序的数据载入raid卡缓存,在顺序读的环境中能提供很好的性能,但是在随机读的环境中反而降低读的性能(适合文件系统,不适合数据库系统)
ReadAdaptive:自适应预读,在缓存和I/O空闲时选择预读,默认策略。
第三部分:
Direct:读操作不缓存到RAID卡缓存。
Cached:读操作缓存到RAID卡缓存。
第四部分:如果BBU(电池)出现问题是否启用Write Cache
No Write Cache if Bad BBU:如果BBU出现问题不使用Write Cache,从WriteBack自动切换到WriteThrough,默认配置。
Write Cache OK if Bad BBU: 如果BBU出现问题仍启用Write Cache,这种配置是非常不安全的,除非是有UPS或者双电源的情况下。
RAID卡策略更改
修改WriteBack:
MegaCli64 -LDSetProp -WB -Lall -aAll
修改WriteThrough:
MegaCli64 -LDSetProp -WT -Lall -aAll
修改No Write Cache if Bad BBU:
MegaCli64 -LDSetProp -NoCachedBadBBU -Lall -aAll
修改Write Cache OK if Bad BBU:
MegaCli64 -LDSetProp -CachedBadBBU -Lall -aAll

4.其它相关命令
查看机器型号 # dmidecode | grep"Product"
查看厂商 # dmidecode| grep "Manufacturer"
查看序列号 # dmidecode | grep "Serial Number"
查看CPU信息 # dmidecode | grep "CPU"
查看CPU个数 # dmidecode | grep "Socket Designation: CPU" |wc –l
查看出厂日期 # dmidecode | grep"Date"
查看充电状态 # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Charger Status"
显示BBU状态信息 # MegaCli64 -AdpBbuCmd-GetBbuStatus –aALL
显示BBU容量信息 # MegaCli64 -AdpBbuCmd-GetBbuCapacityInfo –aALL
显示BBU设计参数 # MegaCli64 -AdpBbuCmd-GetBbuDesignInfo –aALL
显示当前BBU属性 # MegaCli64 -AdpBbuCmd-GetBbuProperties –aALL
查看充电进度百分比 # MegaCli64 -AdpBbuCmd-GetBbuStatus -aALL |grep "Relative State of Charge"
查询Raid阵列数 # MegaCli64 -cfgdsply -aALL|grep "Number of DISK GROUPS:"
显示Raid卡型号,Raid设置,Disk相关信息 # MegaCli64-cfgdsply –aALL
显示所有物理信息 # MegaCli64 -PDList-aALL
显示所有逻辑磁盘组信息 # MegaCli64 -LDInfo -LALL–aAll
查看物理磁盘重建进度(重要) # MegaCli64 -PDRbld-ShowProg -PhysDrv [1:5] -a0
查看适配器个数 #MegaCli64 –adpCount
查看适配器时间 #MegaCli64 -AdpGetTime–aALL
显示所有适配器信息 #MegaCli64 -AdpAllInfo–aAll
查看Cache 策略设置 # MegaCli64 -cfgdsply -aALL|grep Polic

缓存系列之二:CDN与其他层面缓存的更多相关文章

  1. Redis缓存篇(二)淘汰机制:缓存满了怎么办?

    上一讲提到,缓存的容量总是小于后端数据库的.随着业务系统的使用,缓存数据会撑满内存空间,该怎么处理呢? 本节我们来学习内存淘汰机制.在Redis 4.0之前有6种内存淘汰策略,之后又增加2种,一共8种 ...

  2. Java的多线程机制系列:(二)缓存一致性和CAS

    一.总线锁定和缓存一致性 这是两个操作系统层面的概念.随着多核时代的到来,并发操作已经成了很正常的现象,操作系统必须要有一些机制和原语,以保证某些基本操作的原子性.首先处理器需要保证读一个字节或写一个 ...

  3. Windows系统下Memcached缓存系列二:CouchbaseClient(c#客户端)的详细试用,单例模式

    在上一篇文章里面 ( Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程 ),我们介绍了服务器端的安装和客户端的安 ...

  4. 当我们说线程安全时,到底在说什么——Java进阶系列(二)

    原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...

  5. 缓存系列之一:buffer、cache与浏览器缓存

    缓存系列之一:buffer.cache与浏览器缓存 一:缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如CPU的一级.二级缓存是保 ...

  6. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. Sql Server来龙去脉系列之二 框架和配置

    本节主要讲维持数据的元数据,以及数据库框架结构.内存管理.系统配置等.这些技术点在我们使用数据库时很少接触到,但如果要深入学习Sql Server这一章节也是不得不看.本人能力有限不能把所有核心的知识 ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方 ...

随机推荐

  1. [Android] Sqlite 数据库操作 工具封装类

    sqlite 数据库封装类 DatabaseUtil.java(封装的类) package com.jack.androidbase.tools; import android.content.Con ...

  2. Java入门系列Java NIO

    jdk1.4中新加入的NIO,引入了通道与缓冲区的IO方式,它可以调用Native方法直接分配堆外内存,这个堆外内存就是本机内存,不会影响到堆内存的大小.

  3. 判断质数(Java)

    package day01; //输出1-100中质数,并且每十个换行 public class PrimeNum { public static void main(String[] args) { ...

  4. Windows代替touch命令

    Windows 代替Linux中的touch命令: echo >

  5. 实时监听 input值的变化

    重点:$('#xx').bind('input propertychange', function() {} 举例子: html: <div ><span id="numb ...

  6. 迅为开发板4412开发板-ANROID系统的烧写方法分享

    详情了解: http://topeetboard.com   更多了解:https://arm-board.taobao.com 一.OTG接口烧写方式 通过该方式可以烧写 Android4.0.3 ...

  7. linux 截图工具 shutter

    ubuntu 安装shutter sudo apt install shutter libgoo-canvas-perl libgoo-canvas-perl是提供对截图编辑功能,例如,添加画框,文字 ...

  8. Linux性能查询常用指令

    类别 监控指令 描述 备注 内存 瓶颈 free 查看内存使用   cpu 瓶颈 top  -Hp 查看cpu使用最高的进程     vmstat 3(间隔时间) 100(监控次数) 查看swap i ...

  9. jq的遍历关系元素方法集合

    children .children(selector) 返回被选元素的所有直接子元素,不返回文本节点: 下面例子:给level-2的子元素设置border.比较使用children和find htm ...

  10. vue组件导航栏动态添加class