对CDN建设一些总结与思考
新冠病毒疫情反反复复,对于日常生活和工作造成了不小影响,对于我最近半年发生了太多事情,家中亲人病重,奶奶去世,有很多事儿要忙,所以博客也停更了半年;
面对经济不景气,各行各业开始了裁员,很多公司业务开始收缩,趁着最近闲暇,把以前CDN工作经历做一个简单总结。
一、大型网站架构剖析:
移动互联网时代,对于一个高并发的大型网站,架构的设计都不会太简单,我简单从如下几个方面概括一下:
1、客户端:
设备端主要电脑PC、移动手机、智能设备等
浏览器层主要有Chrome、微软IE/Edge、Safari、火狐Firefox、欧鹏Opera等,这里主要以浏览器内核为准统计。
协议层:
- (1)普通网页:Http1.1/Http2/Quic
- (2)流媒体:Rtmp/Http-FLV/HLS(m3u8)
2、CDN层:
对于中小型网站一般采用商用CDN即可
对于大型和特大型网站,建议采用自建和商用CDN,这个后边我会详细介绍。
在CDN领域,主要有两大部分组成,缓存层+调度层。
对于不同业务形态,一般分为静态加速、动态加速、下载加速、音频加速、视频加速、直播加速、P2P加速、安全加速。
3、静态服务:
前端业务形态一般分为H5、小程序、安卓、IOS,主要元素有HTML/CSS/JS
前端主流框架,VUE/React/Angular
一般服务器端使用Nginx或Openrestry搭建,设置SSL证书、过期时间、跨域配置等即可。
4、动态服务:
一般根据公司主力编程语言,一般为php/java/golang/python等
目前大部分公司都会把动态服务跑在docker或者k8s集群
对于动态层面,如果无法做到动静分离,必须要走CDN,建议配置策略回源,减少路由损失。
5、数据缓存层:
这部分主要采用Redis或Memcached 云原生生态链也有采用etcd或tikv做缓存的。
6、数据库服务器:
传统数据库主要有Mysql、MariaDB、PostgreSQL、SqlServer、Oracle、DB2关系型数据库。
对非关系型数据库(NoSQL),主要代表有Mongodb、Hbase、Cassandra(facebook)等。
随着对性能和海量数据要求越来越高,新型分布式数据库发展越来越好,比如Tidb(PingCAP开源)、Greenplum、DorisDB(百度开源)、Clickhouse等
7、分布式数据存储:
一般采用Ceph/HDFS/GlusterFS/GFS根据不同类型场景选择不同存储软件。
目前主流以Ceph和HDFS两大阵营为主,很多云厂商底层采用Ceph,主要是它支持块存储、对象存储、文件系统,同时openstack默认就走的这货,对k8s支持也比较完善;而HDFS主要满足海量数据存储,一般配合hadoop和Spark使用,对云原生支持不是很好。
二、自建CDN还是商用CDN?
1、选择CDN
是考虑自建CDN还是采用商用CDN,我觉得需要根据公司业务规模以及成本、场景来考量。
对于普通静态文件CDN加速,规模在1000万PV以下,不要考虑自建CDN,商用CDN即可满足,调度策略优先选择价格低廉、服务效果好的CDN;
对于大文件下载CDN加速,这类如果公司带宽不富裕,不建议自建CDN,商用CDN即可;
对于音频和点播加速,这类如果研发团队实力不够强,建议采用商用CDN,建议采用价格低、节点多、效果好的CDN;
对于直播加速,这类对体验效果要求较高,主要考量CDN节点网络质量,建议采用大型云CDN厂商。
对于动态加速、安全加速,优先考虑回源链路优秀、安全策略完善CDN厂商。
2、如何自建CDN?
对于服务器硬件,从硬盘、内存、CPU考虑采用性价比更高服务器;
对于机房带宽,首选运营商代理商,优选条件:机房出口大,链路优秀,有硬防护等;
对于缓存节点,选型一般为Nginx或Apache traffic server或者varnish、squid;
对于调度系统,首选第三方智能CDN,有一定研发实力可以考虑Bind View或Bind DLZ;
对于CDN高可用负载均衡,选型考虑LVS、Nginx、Keepalived、Haproxy
3、如何选择商用CDN?
对于国内提供CDN厂商,主要有阿里云、腾讯云、网宿、华为云、百度云、金山云、白山云、七牛云、蓝汛、又拍云、帝联、ucloud、青云等
对于海外提供CDN厂商,主要有AWS的cloudfront、Akamai、Google、Fastly、Limelight、Cloudflare、StackPath、CDNetworks等
无论国内还是海外,在选择CDN的时候可以参考如下指标进行选择:
- (1)节点分布,如果CDN分布节点越多,越靠近用户,一般加速效果越好;
- (2)首屏时间,用户第一次打开时间,这个指标越短,用户体验越好;
- (3)节点延迟,用户侧到CDN节点延迟越短,说明网路链路效果越好;
- (4)下载速度,用户下载文件速度很快,说明服务器性能和网络都很好;
- (5)丢包率,用户侧丢包率很高,说明用户到CDN节点整体网络效果不好;
- (6)回源率,从回源请求数比例和回源流量比例入手,越低越好,说明CDN帮你抗下了流量;
- (7)命中率,命中率越高,说明CDN缓存资源越多,加速效果越好;
- (8)平台功能是否丰富,基本功能是否完善,界面体验效果如何;
- (9)运营团队响应速度,反馈后多久能给响应、处理;
- (10)调度策略,观察服务商调度策略是否合理。
三、总结
对于最近几年,云计算时代来临,国内CDN行业也算来了一次大洗牌,原先CDN巨头网宿、蓝汛,目前已经被阿里云、腾讯云替代;曾经的帝联业务也越来越不行,快网被世纪互联收购,白山云转型边缘云计算,其他中型云厂商如金山云、ucloud、七牛云、又拍云正在逐步瓜分这个市场。
写在最后,未来CDN行业发展方向该如何,这个谁也不知道,根据目前这势头,各家厂商都在大搞边缘计算,随着5G、人工智能、容器技术迭代升级,CDN不仅仅只是一门技术那么简单了,它需要不断的和其他技术整合,最终应用到我们生活中。