zoukankan      html  css  js  c++  java
  • 缓存系列之二:CDN与其他层面缓存

    缓存系列之二: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

  • 相关阅读:
    NHibernate初学二之简单执行SQL及HQL、Linq
    NHibernate初学一之简单增删改查
    System.Func<>与System.Action<>
    C# Lambda表达式
    Lambda表达式详解
    发布订阅者模式之C#委托实现
    在WCF中实现双工通信
    设计模式---订阅发布模式(Subscribe/Publish)
    flex基础示例
    活动倒计时-兼容ios
  • 原文地址:https://www.cnblogs.com/reblue520/p/7327299.html
Copyright © 2011-2022 走看看