由某CDN故障引发的思考:不容忽视的CDN服务容灾与快速切换 推荐 原创 双鱼座小龙 2014-06-04 17:26:04 博主文章分类:Linux ©著作权 文章标签 CDN 容灾 高可用 文章分类 数字化转型 ©著作权归作者所有:来自51CTO博客作者双鱼座小龙的原创作品,请联系作者获取转载授权,否则将追究法律责任 一般情况下,跟业务架构打交道的没少听过CDN服务销售人员吹嘘他们的CDN多么好(是很好,就是用户经常访问异常),技术多么先进(真心没看出来,计费的技术貌似很先进),系统多么完善(相当烂,很多业务场景都无法满足),客服多么热情(事实上只会打太极),如果你真头脑发热听信了销售人员的各种忽悠,把宝压在某家第三方CDN服务商身上,那后面的苦恼肯定是源源不断的。 不知道其他公司在使用第三方CDN服务方面有没有痛点,在近三年的业务运维工作中,个人经历了多次由CDN故障引起的业务不可用事件,这也促使我们不断改进自己的系统架构以及使用多家的CDN服务做容灾,但是至今第三方CDN服务的异常还是或多或少会对我们自身的业务造成影响。 目前,我们使用了两个第三方的CDN服务做静态文件(页面样式文件以及图片)的加速,计划即将引入第三家CDN服务商,等业务发展到一定阶段后也会考虑自建CDN服务。 最初使用的是一家CDN的服务,由于第一家CDN服务出现过异常导致我们的业务受到影响所以就又上了一家第三方CDN的服务。很多知名的CDN服务商都会强调自己的数据是如何容灾的,但是很少有哪家CDN服务商提说过服务容灾的概念。大部分业务场景下,很有可能CDN服务的节点上是有数据的,但是由于CDN服务的其他资源异常或被攻击导致其无法正常提供服务。目前我们能做的就是再找一家CDN服务商来做服务的容灾。 当第一家CDN服务有问题的时候我们就会通过切换域名解析的方式将静态资源的请求切换到第二家CDN服务商,用户访问页面上的静态文件元素会回源一次,业务受影响的时间完全取决于域名切换时生效的时间。当静态文件内容没有热点,回源带宽占用比较小的时候,还可以通过切换域名的方式切换CDN服务,等流量增长到一定程度,切换CDN服务商域名还是有很大风险的,同时域名切换后DNS解析时间也会让业务不可用时间无端增加从而影响到用户访问业务的体验。 实线表示平时用户访问时静态资源域名是解析到第一家cdn服务的,当用户请求的文件没在CDN缓存时就会回源取一次文件返回给用户,同时保存下来。虚线表示平时用户的请求不会到第二家CDN服务,只有第一家CDN出现异常或者被攻击的时候,才会将用户的请求切换到第二家CDN服务商。当然,切换后用户的请求第一次落到这家CDN服务商的时候,CDN是要回源的。 这种方式在后期的运维过程中发现有不少问题,其实现在看来整个系统架构本身就存在着不小的问题,比如无法实时验证第二家CDN服务商的可用性,当第一家CDN服务商出现异常准备切换的时候有可能很不巧第二家CDN服务商也有问题,这就达不到备份容灾的要求。后期对于之前的方案做了改进,由于经济和系统改进成本的考虑,我们会将用户对于静态文件的请求分发到多家CDN服务商做预热,当其中某家服务商出现异常的时候就会将静态资源的域名切换到正常提供服务的CDN服务商上,由于之前用户访问过相关静态资源做过预热也就不存在所有静态资源需要回源的问题。由于经常会有后台编辑人员推送一些运营信息,其中会包含一些图片信息,最好是在这里只允许运营人员推送url部分,域名部分由配置中心来处理,这样也可以避免运营编辑导致的单点问题。一般CDN出现异常的时候,CDN服务商基本上很少有负责任地主动通知相关问题,真正等到我们自身监控发现CDN异常的时候,业务可能已经收到影响了。主动监控CDN的可用性也就是不得不提上议程的事情了,当我们可以很好的监控CDN服务的可用性,第一时间发现异常的时候,可以通过配置中心来将有异常的线路的资源域名下线,或者完全可以自动来处理,这样对业务可用性的影响就可以降到最低了。如果有能力自建CDN服务的时候,完全可以使用一个静态资源域名,对后端CDN服务进行可用性检测,发现异常可以自动将后端CDN服务从服务结点下线,整个过程对业务的影响完全为0.目前我们实现了部分的CDN服务容灾,不过很多工作目前也只是计划中。很多上了规模的互联网公司,尤其是有自建CDN服务的公司,对于CDN服务容灾已经有了自己比较成熟的架构了。希望能有机会与更多公司的小伙伴们进行交流。 赞 收藏 评论 分享 举报 上一篇:不做工具人,学会锻炼感悟爱与幸福的能力 下一篇:由某CDN故障引发的思考2:业务方如何应对那些坑爹的第三方故障 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 mybatisplus会自动分批执行插入吗 是的,MyBatis-Plus(简称MP)在执行批量插入时会自动进行分批操作。当插入的数据量较大时,MP会将插入操作拆分成多个小批次执行,以避免一次性插入过多数据导致性能问题或内存溢出。MP提供了一个名为 insertBatch 的方法来执行批量插入操作。你可以将要插入的数据集合传递给该方法,并且通过设置合适的批次大小,让MP自动进行分批插入。下面是一个示例代码片段,展示了如何使用MP进行分批插入 List 数据集 批量插入 Mac地址会重复吗?Mac地址也会耗尽吗? IP地址和Mac地址产生的目的是方便别人找到自己Mac地址有点像身份证号码,而IP地址就像门牌号码。在茫茫大海中仅凭一个身份证号码找到一颗别样的沙粒很难,但如果先找到具体的沙滩,沙滩划分很小的网格片区,就很容易通过身份证找到这颗别样的沙粒了。MAC地址(物理地址、硬件地址)是实实在在的网络设备出身地址,它是由厂商写入网络设备的bios中。网络设备厂商也并不能随意的使用Mac地址,需要向IEEE申请 Mac IP 网络设备 AI真的会彻底取代程序员吗? 一个Java程序员从接到需求到最终开发完功能的流程大致如下首先是理解原型图,设计表结构根据表结构编写增删改查代码与前端联调,完成功能开发那么以上步骤AI能不能完成呢?让我们试一下:第一步,使用 AI助手 解析流程图,并帮我们设计出表结构这是我找的一张原型图:AI解析并返回的内容如下:根据您提供的信息,我们可以设计以下表结构:用户表 (users)user_id (主键)usernamepas Vue chatgpt AI大模型 自动切换节点 k8s 自动切换节点是Kubernetes(简称K8S)中一个非常重要且常用的功能。在K8S集群中,当某个节点发生故障或处于维护状态时,自动切换节点可以将该节点上的容器自动迁移到其他可用的节点上,以保证应用的高可用性和稳定性。本文将详细介绍如何实现自动切换节点的步骤和相应的代码示例。首先,我们来看一下实现自动切换节点的步骤。可以用下面的表格展示整个流程:| 步骤 | 操作 || ------ | Pod API 代码示例 hadoop手动切换节点 # Hadoop手动切换节点在使用Hadoop进行数据处理时,经常会遇到需要手动切换节点的情况。手动切换节点是指将某个节点从集群中移除,或者将一个节点添加到集群中。本文将介绍如何在Hadoop中进行手动切换节点,并提供相应的代码示例。## 什么是Hadoop?Hadoop是一个开源的分布式计算框架,用于处理大规模数据集。它能够将大量的数据分成多个块,并在集群中的多个计算节点上并行处理这 Hadoop 添加节点 bash redis切换节点命令 ## Redis切换节点命令的实现流程为了帮助刚入行的小白学会实现Redis切换节点命令,我将为他提供以下指导:### 1. 确定需要切换的Redis节点在进行Redis切换节点操作之前,首先需要确定目标节点的信息,包括IP地址和端口号。可以通过`redis-cli`命令行工具连接到目标Redis节点,然后使用`info`命令查看节点的信息,找到目标节点的IP地址和端口号。### Redis redis 持久化 Redis集群切换节点命令 # Redis集群切换节点命令在使用Redis集群时,有时候我们需要对集群进行节点的切换操作。节点切换是指将一个Redis节点从集群中移除或者添加到集群中,以实现负载均衡或者故障恢复等功能。本文将介绍Redis集群切换节点的命令和使用示例。## Redis集群简介Redis是一个开源的内存数据库,它提供了高性能的键值存储和数据结构处理能力。Redis集群是Redis的一个分布式解决方案 Redis bc 删除节点 redis集群手动切换节点 ## Redis集群手动切换节点操作指南### 1. 简介在使用Redis集群时,有时候需要手动切换节点,比如当某个节点出现故障或需要进行维护时。本文将介绍如何通过执行一系列命令来手动切换Redis集群节点。### 2. 准备工作在开始进行手动切换节点之前,需要确保以下条件已满足:- 安装了Redis集群,并且集群中至少有两个节点- 已经连接到Redis集群,并且拥有管理员权限 Redis redis 数据 redis切换节点命令 linux # Redis切换节点命令及使用方法## 前言Redis是一种开源的内存数据库,常用于缓存、队列和发布/订阅系统。在Redis集群中,有时需要切换节点来满足不同的需求。本文将介绍Redis切换节点的命令及使用方法,并提供相应的代码示例。## 什么是Redis切换节点?在Redis集群中,节点是指安装Redis的主机。切换节点是指将Redis连接从当前节点切换到另一个节点。这种切换可 Redis redis 服务器 rediscli切换节点 redis集群切换节点 文章目录哨兵消息丢失 哨兵Redis 哨兵可以在故障发生时自动进行主从切换。 我们可以将 Redis Sentinel 集群看成是一个 ZooKeeper 集群,它是集群高可用的心脏,它一般是由 3~5 个节点组成,这样挂了个别节点集群还可以正常运转。 它负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接集群时,会首先连接 sentinel,通过 se rediscli切换节点 redis 缓存 数据库 客户端 redis 切换节点 redis 集群切换 redis主从只是数据的备份,当主宕机后不会自动切换从为主,需要手动切换从为主。哨兵就可以自动切换从为主, 当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入,难以实现自动化。 为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。哨兵的作用就是监控redis主、从数据库 redis 切换节点 数据库 ruby 运维 redis 宝塔切换python 宝塔切换节点 大鸟玩了一个月的了BT(宝塔面板)的专业版,额,发现还不错,但是说实话专业版的价格很贵啊,当然,如果你的网站数据很重要,还是可以用用专业版的。不过如果你用免费版的,切记要做好数据备份。但是呢,如果用专业版到期了或者是我换了vps,所以想重新绑定到新的ip,那么原来的专业版就需要取消。但是旧的ip因为开通过了专业版,或者说专业版到期了,大鸟已经无法打开宝塔的管理面板了,总是提示我专业版到期,需要购买 宝塔切换python 切换linux宝塔版本 免费版 bash 解决方案 redis database 切换 rediscli切换节点 前言最近在将redis作为数据库使用(redis中存放大量数据)的项目中,偶然发现redis的主从节点发生了变化,但是没有任务报错,redis集群的各节点也没有fail状态,因此记录学习一下,redis的深层机制。为什么首先redis是单线程的,所有的命令发送的redis会进入一个队列,依次执行。当数据量很大时,执行flushall、keys、scan等耗时较长的命令时,就会照成redis节点阻塞 redis redis集群 单线程 redis切换database 指令 rediscli切换节点 连接操作相关的命令默认直接连接 远程连接-h 192.168.1.20 -p 6379ping:测试连接是否存活如果正常会返回pongecho:打印select:切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值quit:关闭连接(connection)auth:简单密码认证服务端相关命令time:返回当前服务器时间client redis切换database 指令 redis 数据库 客户端 db 动态切换redis rediscli切换节点 集群创建我们常用以下命令创建集群:redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1这样就创建了一个具有3个主节点和3个从节点的集群。其中,我们虽然指定了每个主节点都有一个从节 db 动态切换redis redis 指定主从 动态增删 3c Redis 切换端口 redis集群切换节点 1、单机节点弊端单点故障容量有限连接压力2、集群模型说明:AKFX:全量,镜像,横向扩容Y:业务,功能,根据业务纵向扩容Z:优先级,逻辑再拆分,纵向的集群根据一定规则再次划分3、集群演变4、集群搭建使用install_server命令新建两个Redis实例,端口分别为6380、6381为了方便看日志,设置Redis实例日志直接打印在控制台做如下配置将配置文件全部复制到一个临时目录中:2、分别修改各 Redis 切换端口 redis linux Redis 配置文件 redis cluster 切换主节点 redis集群切换节点 虽然redis提供了rdb(全量备份)和aof(增量备份),但单机节点有可能出现服务器宕机等情况导致数据丢失,无法实现一个高可用的目的;主从同步(复制): 通过主节点向所有的从节点复制数据,当主节点出现数据变更时将自动将数据同步到从节点;劣势点:当主节点宕机情况下,无法自动完成主备切换,需要使用手动完成切换由于需要在主从节点上同时保存相同的数据,造成一定的数据浪费优势点:避免了可能出现的数据丢失的 redis cluster 切换主节点 数据 主从同步 高可用性 RedisDesktopManager 命令切换库 rediscli切换节点 目标:测试master down , 是否会有slave节点 替换master步骤:对于原本的环境只有2个master节点,暂不支持主从切换(原因后面描述),第一步要做的就是添加节点,添加节点过程异常曲折,最后不得不重新搭建了集群。(参照上一篇blog) 收获:1 Linux vi dd 删除当前行u 表示撤销之前操作(和Windows 下 Ctrl+Z 效果一样) 数据库 操作系统 redis 主从切换 添加节点 redis 切换db命令 rediscli切换节点 redis cluster集群会在主节点不可达超时之后自动将从节点切换为主节点。连接到故障节点连接对象将无法使用,必须对连接对象进行检查并重新建立到新节点的连接, 连接池的poolConfig.setTestOnBorrow(true);可以在使用前做这种检查,在集群的主从切换完成后,会自动建立新连接到新的主节点。import java.util.LinkedHashSet;import jav redis 切换db命令 redis 数据库 连接池 参数设置 keepalived节点切换为从节点不漂移 如何切换节点 DOM的节点操作一、获取DOM子节点二、获取DOM第一个子节点三、获取DOM最后一个子节点四、获取兄弟节点五、获取父级节点六、节点分类1、节点分类2、nodeType节点类型3、nodeName节点名称4、nodeValue节点的值 一、获取DOM子节点子节点:元素.children子元素节点:元素.childNodes<div class="box"> 学习 Javascript 前端 元素节点 子节点