源站切换方法、装置、电子设备及存储介质转让专利

申请号 : CN202010225023.8

文献号 : CN113452539B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 辛波

申请人 : 北京金山云网络技术有限公司

摘要 :

本公开实施例公开了一种源站切换方法、装置、电子设备及计算机可读存储介质。该方法执行在上层节点,包括:接收第一节点请求目标资源的第一回源请求;在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求;接收所述主源站响应所述第二回源请求发送的响应状态码,并在根据所述响应状态码确定所述第二回源请求失败的情况下,根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站;以及将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。

权利要求 :

1.一种源站切换方法,执行在上层节点,其特征在于,所述方法包括:接收第一节点请求目标资源的第一回源请求;

在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求;

接收所述主源站响应所述第二回源请求发送的响应状态码,并在根据所述响应状态码确定所述第二回源请求失败的情况下,根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站;以及将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。

2.根据权利要求1所述的方法,其中,所述方法还包括:在根据所述预设的状态码与备份源站之间的对应关系和所述响应状态码未确定出与所述响应状态码对应的备份源站的情况下,将所述响应状态码发送给所述第一节点。

3.根据权利要求1所述的方法,其中,在将所述第二回源请求切换到与所述响应状态码对应的备份源站之后,所述方法还包括:接收所述备份源站响应所述第二回源请求发送的响应状态码,并在根据所述备份源站发送的响应状态码确定所述第二回源请求失败的情况下,将所述响应状态码发送给所述第一节点。

4.根据权利要求1所述的方法,其中,所述方法还包括:在本地缓存中存在所述目标资源的情况下,响应所述第一回源请求并发送所述目标资源给所述第一节点。

5.根据权利要求1所述的方法,其中,所述方法还包括:在根据所述响应状态码确定所述第二回源请求成功的情况下,响应所述第一回源请求并发送所述目标资源给所述第一节点。

6.根据权利要求1所述的方法,其中,所述预设的状态码与备份源站之间的对应关系包括:单个状态码对应单个备份源站、多个不同的状态码对应同一个备份源站、预定范围的状态码对应同一个备份源站、以及同一个状态码对应多个不同的备份源站中的至少一个。

7.根据权利要求6所述的方法,其中,在所述响应状态码符合同一个状态码对应多个不同的备份源站的情况下,所述根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站包括:从所述多个不同的备份源站中选择一个备份源站;

将选择的所述备份源站确定为与所述响应状态码对应的备份源站。

8.根据权利要求6或7所述的方法,其中,在所述多个不同的备份源站具有端口时,所述多个不同的备份源站对应的端口相同。

9.根据权利要求6所述的方法,其中,在所述响应状态码同时符合单个状态码对应单个备份源站、以及预定范围的状态码对应同一个备份源站的情况下,所述根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站包括:根据所述单个状态码对应单个备份源站的对应关系,确定与所述响应状态码对应的备份源站。

10.一种源站切换装置,执行在上层节点,其特征在于,所述装置包括:第一接收模块,用于接收第一节点请求目标资源的第一回源请求;

发送模块,用于在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求;

第二接收模块,用于接收所述主源站响应所述第二回源请求发送的响应状态码;

确定模块,用于在根据所述响应状态码确定所述第二回源请求失败的情况下,根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站;以及切换模块,用于将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。

11.一种电子设备,其特征在于,包括:

根据权利要求10所述的装置;或者,

处理器和存储器,所述存储器用于存储可执行的指令,所述指令用于控制所述处理器执行根据权利要求1至9中任一项所述的方法。

12.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1至9中任一项所述的方法。

说明书 :

源站切换方法、装置、电子设备及存储介质

技术领域

[0001] 本公开实施例涉及CDN技术领域,尤其涉及一种源站切换方法、装置、电子设备及存储介质。

背景技术

[0002] CDN(Content Delivery Network,内容分发网络)通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载,解决互联网网络拥挤的状况,提高用户访问网站的响应速度。
[0003] 在发生例如网络不通导致主源站不可用故障时,通常做法是上层节点将请求切换到备份源站进行处理。当上层节点根据下层节点的请求向主源站请求回源时,存在多个请求会失败,则将主源站标记为不可用。后续上层节点接收的请求都会切换到备份源站。如此,但这样会造成已经发送到主源站的回源请求失败,只能在下一次接收这些请求时将其切换到备份源站。

发明内容

[0004] 本公开实施例的目的在于提供一种源站切换方法、装置、电子设备及计算机可读存储介质,以及时切换主源站失败的回源请求到备份源站,减少回源错误。
[0005] 根据本公开实施例的第一方面,提供了一种源站切换方法,执行在上层节点,所述方法包括:
[0006] 接收第一节点请求目标资源的第一回源请求;
[0007] 在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求;
[0008] 接收所述主源站响应所述第二回源请求发送的响应状态码,并在根据所述响应状态码确定所述第二回源请求失败的情况下,
[0009] 根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站;以及
[0010] 将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。
[0011] 可选的,所述方法还包括:
[0012] 在根据所述预设的状态码与备份源站之间的对应关系和所述响应状态码未确定出与所述响应状态码对应的备份源站的情况下,将所述响应状态码发送给所述第一节点。
[0013] 可选的,所述方法还包括:
[0014] 接收所述备份源站响应所述第二回源请求发送的响应状态码,并在根据所述备份源站发送的响应状态码确定所述第二回源请求失败的情况下,将所述响应状态码发送给所述第一节点。
[0015] 可选的,所述方法还包括:
[0016] 在本地缓存中存在所述目标资源的情况下,响应所述第一回源请求发送所述目标资源给所述第一节点。
[0017] 可选的,所述方法还包括:
[0018] 在根据所述响应状态码确定所述第二回源请求成功的情况下,响应所述第一回源请求发送所述目标资源给所述第一节点。
[0019] 可选的,所述预设的状态码与备份源站之间的对应关系包括:单个状态码对应单个备份源站、多个不同的状态码对应同一个备份源站、预定范围的状态码对应同一个备份源站、以及同一个状态码对应多个不同的备份源站中的至少一个。
[0020] 可选的,在所述响应状态码符合同一个状态码对应多个不同的备份源站的情况下,所述根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站包括:
[0021] 从所述多个不同的备份源站中选择一个备份源站;
[0022] 将选择的所述备份源站确定为与所述响应状态码对应的备份源站。
[0023] 可选的,在所述多个不同的备份源站具有端口时,所述多个不同的备份源站对应的端口相同。
[0024] 可选的,在所述响应状态码同时符合单个状态码对应单个备份源站、以及预定范围的状态码对应同一个备份源站的情况下,所述根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站包括:
[0025] 根据所述单个状态码对应单个备份源站的对应关系,确定与所述响应状态码对应的备份源站。
[0026] 根据本公开实施例的第二方面,提供了一种源站切换装置,执行在上层节点,所述装置包括:
[0027] 第一接收模块,用于接收下层节点请求目标资源的第一回源请求;
[0028] 发送模块,用于在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求;
[0029] 第二接收模块,用于接收所述主源站响应所述第二回源请求发送的响应状态码;
[0030] 确定模块,用于在根据所述响应状态码确定所述第二回源请求失败的情况下,根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站;以及
[0031] 切换模块,用于将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。
[0032] 根据本公开实施例的第三方面,提供了一种电子设备,包括:
[0033] 根据本公开实施例第二方面所述的装置;或者,
[0034] 处理器和存储器,存储器用于存储可执行的指令,所述指令用于控制处理器执行根据本公开实施例第一方面所述的方法。
[0035] 根据本公开实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器执行时实现根据第一方面所述的方法。
[0036] 根据本公开实施例,可以支持根据预设的状态码与备份源站之间的对应关系切换备份源站,通过用户预设的状态码与备份源站之间的对应关系和请求失败时主源站返回的响应状态码,将当前请求切换到响应状态码对应的备份源站,这样可及时切换本次请求到对应的备份源站再次发起回源请求。使得本次请求仍然生效,而不用等待下一次接收到该回源请求之后再切换到备份源站。如此,可以实现请求级别的切换,减少回源错误,降低因主源站故障造成请求失败的影响。
[0037] 通过以下参照附图对本公开实施例的示例性实施例的详细描述,本公开实施例的其它特征及其优点将会变得清楚。

附图说明

[0038] 被结合在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且连同其说明一起用于解释本公开实施例的原理。
[0039] 图1为可用于实现本公开实施例的电子设备的硬件配置结构方框图。
[0040] 图2为本公开实施例的源站切换方法步骤流程图。
[0041] 图3为本公开实施例的CDN回源请求流程图。
[0042] 图4为本公开实施例的CDN上层节点结构图。
[0043] 图5为本公开实施例的源站切换装置的结构方框图。
[0044] 图6为本公开实施例的电子设备的结构方框图。

具体实施方式

[0045] 现在将参照附图来详细描述本公开实施例的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开实施例的范围。
[0046] 以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开实施例及其应用或使用的任何限制。
[0047] 对于相关领域普通技术人物已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
[0048] 在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。
[0049] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
[0050] <硬件配置>
[0051] 图1是示出可以实现本公开的实施例的电子设备1000的硬件配置的结构方框图。
[0052] 电子设备1000可以是便携式电脑、台式计算机、笔记本电脑、服务器设备等。
[0053] 服务器设备可以是整体式服务器或是跨多计算机或计算机数据中心的分散式服务器。服务器可以是各种类型的,例如但不限于,内容分发网络的节点设备、分布式存储系统的存储服务器、云数据库服务器、云计算服务器、云管理服务器、网络服务器、新闻服务器、邮件服务器、消息服务器、广告服务器、文件服务器、应用服务器、交互服务器、存储服务器、数据库服务器或代理服务器等。在一些实施例中,每个服务器可以包括硬件,软件,或用于执行服务器所支持或实现的合适功能的内嵌逻辑组件或两个或多个此类组件的组合。例如,服务器例如刀片服务器、云端服务器等,或者可以是由多台服务器组成的服务器群组,可以包括上述类型的服务器中的一种或多种等等。
[0054] 如图1所示,电子设备1000可以包括处理器1100、存储器1200、接口装置1300、通信装置1400,或者还可以包括显示装置1500、输入装置1600、扬声器1700、麦克风1800等等。其中,处理器1100可以是中央处理器CPU、微处理器MCU等,用于执行计算机程序。该计算机程序可以采用比如x86、Arm、RISC、MIPS、SSE等架构的指令集编写。存储器1200例如包括ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置1300例如包括USB接口、耳机接口等。通信装置1400例如能够利用光纤或电缆进行有线通信,或者进行无线通信,具体地可以包括WiFi通信、蓝牙通信、2G/3G/4G/5G通信等。显示装置1500例如是液晶显示屏、触摸显示屏等。输入装置1600例如可以包括触摸屏、键盘、体感输入等。用户可以通过扬声器1700和麦克风1800输入/输出语音信息。
[0055] 图1所示的电子设备仅仅是说明性的并且决不意味着对本公开实施例、其应用或使用的任何限制。应用于本公开的实施例中,电子设备1000的所述存储器1200用于存储指令,所述指令用于控制所述处理器1100进行操作以执行本公开实施例提供的任意一项的源站切换方法。本领域技术人员应当理解,尽管在图1中对电子设备1000示出了多个装置,但是,本公开实施例可以仅涉及其中的部分装置,例如电子设备1000可以只涉及处理器1100和存储装置1200。技术人员可以根据本公开实施例所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。
[0056] <方法实施例>
[0057] 在本公开一个实施例中,提供一种源站切换方法,该方法可以执行在上层节点,例如CDN网络的上层节点。
[0058] 请参考图2,该图为本公开实施例的源站切换方法的步骤流程图,该方法可以是由电子设备实施,该电子设备例如可以是如图1所示的电子设备1000。
[0059] 如图2所示,本公开实施例的源站切换方法包括以下步骤:
[0060] 步骤102,接收第一节点请求目标资源的第一回源请求。
[0061] 这里,第一节点可以是CDN网络的边缘节点或中层节点,第一节点收到用户的目标资源获取请求且边缘节点或中层节点没有对应目标资源后,向上层节点发送第一回源请求,以通过上层节点向源站拉取对应的目标资源。目标资源可以是用户请求的视频文件、音频文件,图片等等。
[0062] 步骤104,在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求。
[0063] 上层节点的本地缓存(上层节点的Cache)中可能保存有目标资源,也可能没有保存。在步骤104中,若本地缓存没有目标资源,则需要上层节点向对应的主源站请求获取。
[0064] 在一个实施例中,上层节点可以包括反向代理服务器(Nginx)和缓存设备(Cache),Nginx属于上层节点的前端模块,用于接收和处理请求,Cache属于上层节点的后端模块,可用于根据请求向源站获取请求的目标资源,用于缓存目标资源,以及用于将目标资源或源站发送的状态码提供给前端的Nginx,通过Nginx响应请求向下层节点进行返回。
[0065] 步骤106,接收主源站响应所述第二回源请求发送的响应状态码,并在根据所述响应状态码确定所述第二回源请求失败的情况下,根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站。
[0066] 主源站响应上层节点发送的回源请求,可以在主源站可用的状态下,返回给上层节点表示第二回源请求目标资源成功的响应状态码(例如状态码200)以及对应请求的目标资源。也可以在主源站不可用的状态下,例如当请求的主源站存在4xx或5xx故障时,返回给上层节点表示第二回源请求目标资源失败的响应状态码。根据主源站不可用的情况不同,所返回的请求失败的响应状态码也不同,例如响应状态码为404,表示请求的页面不存在;响应状态码为403,表示非法访问;响应状态码为504,表示请求源站超时等等。
[0067] 预设的状态码与备份源站之间的对应关系可以是在客户(例如目标资源提供商,抖音、快手等等平台)配置中心的服务器上配置的,下文中可以称作源站切换配置,配置可以根据客户需求而设定,并下发到上层节点对应设备上。通常源站切换配置是以配置文件的形式一次下发,若客户对配置存在修改等变动,则会重新下发到上层节点。上层节点将收到的源站切换配置的文件保存在磁盘中。
[0068] 在步骤106中,在一个实施例中,上层节点区分Nginx和Cache的情况下,获取的源站切换配置可以由上层节点Nginx和Cache共同执行。具体地,当上层节点Nginx接收到下层节点发送的第一回源请求时,将上层节点磁盘中保存的源站切换配置文件读到内存中,从内存中将对应该第一回源请求的源站切换配置打包到该请求指定的请求头中,例如“miss‑page:404:1.1.1.1,500‑599:2.2.2.2,3.3.3.3”,“miss‑page”表示请求头名称,状态码404对应的切换配置为IP地址为1.1.1.1的备份源站;位于500‑599范围的状态码对应IP地址为2.2.2.2的备份源站和IP地址为3.3.3.3的备份源站,即对应两个备份源站。
[0069] 上层节点Nginx将包含所述源站切换配置对应请求头的回源请求发送给上层节点的Cache,Cache接收Nginx的请求,并对接收的请求进行解析以得到对应的源站切换配置。上层节点Cache可以将解析得到的状态码与对应的备份源站形成映射表,可以保存到内存中,方便用的时候直接从内存读取,并在用完后释放以节省存储空间。也可以保存在磁盘中,永久保存。
[0070] 上层节点Cache向主源站发送请求所述目标资源的第二回源请求,主源站会返回对应的响应状态码。上层节点Cache可以根据主源站返回的响应状态码确定第二回源请求成功或失败。例如上文所述的成功的响应状态码200或失败的响应状态码4xx或5xx等。
[0071] 如果本次请求不命中,即主源站中不存在对应请求的目标资源,第二回源请求失败的情况下,上层节点Cache从磁盘或内存中读取对应的源站切换配置映射表,以确定该失败情况下主源站返回的状态码是否存在对应的切换备份源站。
[0072] 源站切换配置中记录有状态码与备份源站的对应关系,状态码可以是上述的4xx,5xx。
[0073] 在一个实施例中,预设的状态码与备份源站之间的对应关系包括:单个状态码对应单个备份源站、多个不同的状态码对应同一个备份源站、预定范围的状态码对应同一个备份源站、以及同一个状态码对应多个不同的备份源站中的至少一个。
[0074] 在预设的状态码与备份源站之间的对应关系配置为单个状态码对应单个备份源站时,包括不同的状态码对应不同的备份源站,即可以配置中可以包括多项单个备份源站与对应的单个状态码的对应关系。
[0075] 具体地,源站切换配置的格式包括以下一种或任意组合:
[0076] a)状态码1:源站1,状态码2:源站2
[0077] b)状态码1,状态码2:源站1
[0078] c)状态码1~状态码2:源站1
[0079] d)状态码1:源站1,源站2
[0080] 其中,格式a即表示单个状态码对应单个备份源站的配置,格式b表示多个不同的状态码对应同一个备份源站的配置,格式c表示预定范围的状态码对应同一个备份源站的配置,格式d表示同一个状态码对应多个不同的备份源站的配置。
[0081] 在一个实施例中,在多个不同的备份源站具有端口时,所述多个不同的备份源站对应的端口相同。
[0082] 上述备份源站可以是IP(Internet Protocol,网际互连协议),也可以是域名。备份源站可以带端口,也可以不带端口。如果携带端口,对于同一个状态码对应多个不同的备份源站的配置,则多个备份源站的端口必须一致,即多个备份源站的端口相同。例如多个备份源站的端口都是80端口、43端口或8080端口等等。源站由IP和端口组成,如果端口不同,则无法根据源站切换配置进行切换到多个备份源站。如果备份源站不带端口,则根据回源协议选择默认端口。
[0083] 在步骤106中,根据源站切换配置中预设的状态码与备份源站之间的对应关系和源站返回的响应状态码,可以确定与所述响应状态码对应的备份源站。
[0084] 即,上层节点在确定第二回源请求失败的情况下,根据主源站返回的响应状态码和源站切换配置,确定对应的切换备份源站。
[0085] 在上层节点包括Nginx和Cache的实施例中,如上述步骤106所述,可以由上层节点cache从磁盘或内存中读取对应的源站切换配置映射表,在步骤108中,Cache可以根据读取的源站切换配置映射表,确定与该失败情况下主源站返回的状态码符合的备份源站。
[0086] 上层节点Cache可以通过判断主源站返回的响应状态码是否符合(或满足)上述步骤106中解析的状态码与备份源站的切换配置条件,来判断主源站返回的响应状态码是否存在对应的切换备份源站。在主源站返回的响应状态码符合解析的切换配置条件下,确定对应的备份源站。
[0087] 在一个实施例中,在所述响应状态码符合同一个状态码对应多个不同的备份源站的情况下,所述根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站包括:
[0088] 从所述多个不同的备份源站中选择一个备份源站;
[0089] 将选择的所述备份源站确定为与所述响应状态码对应的备份源站。
[0090] 也就是说,在步骤106中,若主源站返回的状态码满足同一个状态码对应多个备份源站时,上层节点Cache将随机选择多个备份源站中的一个备份源站进行切换。
[0091] 在一个实施例中,在所述响应状态码同时符合单个状态码对应单个备份源站、以及预定范围的状态码对应同一个备份源站的情况下,所述根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站包括:
[0092] 根据所述单个状态码对应单个备份源站的对应关系,确定与所述响应状态码对应的备份源站。
[0093] 也就是说,在步骤106中,若主源站在请求失败时响应的状态码同时满足状态码的精准匹配(单个状态码对应单个备份源站)和范围匹配(预定范围的状态码对应同一个备份源站)时,则精准匹配生效。精确匹配为单个状态码对应单个备份源站,配置单个不同错误状态码对应单个不同的切换备份源站,例如5xx切换到备份源站1,4xx切换到备份源站2。
[0094] 范围匹配为预定范围的状态码对应同一个备份源站,例如若主源站响应的状态码为504时,对应匹配的配置为(504:备份源站1);(500~599:备份源站2),则在主源站发送响应状态码504后,上层节点将本次回源请求确定切换到精确匹配对应的到备份源站1,而非范围配置的备份源站2。
[0095] 步骤108,将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。
[0096] 在一个实施例中,所述方法还包括:在根据所述预设的状态码与备份源站之间的对应关系和所述响应状态码未确定出与所述响应状态码对应的备份源站的情况下,将所述响应状态码发送给所述第一节点。
[0097] 即,在上层节点发送到主源站的第二回源请求失败的情况下,主源站发送的响应状态码在所述源站切换配置中并没有出现,换言之,主源站返回的响应状态码不符合解析的切换配置条件,无法将第二回源请求进行切换到备份源站。则上层节点结束第一节点的当前第一回源请求,并响应当前第一回源请求,将主源站发送的响应状态码发送给第一节点,由第一节点反馈给客户端的用户,以告知用户当前请求失败的原因。
[0098] 在一个实施例中,在将所述第二回源请求切换到与所述响应状态码对应的备份源站之后,所述方法还包括:接收所述备份源站响应所述第二回源请求发送的响应状态码,并在根据所述备份源站发送的响应状态码确定所述第二回源请求失败的情况下,将所述响应状态码发送给所述第一节点。
[0099] 如上述步骤108所述,在主源站请求失败的情况下,根据响应状态码和源站切换配置,将回源请求切换到备份源站再次请求目标资源。若备份源站仍然存在请求错误的情况,则上层节点直接将备份源站发送的响应状态码发送给第一节点,由第一节点反馈给客户端的用户,告知用户当前请求失败的原因。即,向备份源站的切换只有1次,这是因为不能每次切换的时间很长,再切换会导致连接时长增加,造成连接堆积和拥堵而带来严重后果。
[0100] 在一个实施例中,所述方法还包括:在本地缓存中存在所述目标资源的情况下,响应所述第一回源请求发送所述目标资源给所述第一节点。
[0101] 也就是说,如果上层节点对当前的第一回源请求命中,则直接从磁盘中读取对应的目标资源内容并发送给第一节点,例如CDN网络的中层节点或边缘节点。
[0102] 在一个实施例中,所述方法还包括:在根据所述响应状态码确定所述第二回源请求成功的情况下,响应所述第一回源请求发送所述目标资源给所述第一节点。
[0103] 也就是说,如果主源站对上层节点发送的第二回源请求命中,则将从主源站获取的对应的目标资源发送给第一节点。
[0104] 在一个实施例中,同一域名对应的源站切换配置只在上层节点生效,不会透传到其他层的节点,这样可以提高配置的灵活性。
[0105] 根据本公开实施例,可以在主源站发生故障时,根据主源站返回的响应状态码与预设的状态码与备份源站之间的对应关系,将对主源站请求失败的当前回源请求及时切换到对应的备份源站,使得本次请求仍然生效,而不用等待下一次接收到该回源请求之后再切换到备份源站。如此,可以实现请求级别的切换,减少回源错误,降低因主源站故障造成请求失败的影响。
[0106] 此外,本公开实施例用于源站切换的预设状态码可以支持单个备份源站、多个备份源站和范围备份源站等多种匹配方式,并支持同时配置多个切换条件的个性化配置,使得各源站之间具有一致的判断标准。还可以针对源站不同的错误切换不同的备份源站,控制更加灵活。相比目前源站切换仅为主源站配置一个对应的备份源站,避免了现有备份源站切换的局限性。
[0107] <例子>
[0108] 下面,将结合图3‑4的流程图对本公开实施例的源站切换方法作出示例说明。其中,图3为本公开实施例的CDN回源请求流程图,图4为本公开实施例的CDN上层节点结构图。
[0109] 如图3所示,在用户20访问DNS(Domain Name System,域名系统)10时,DNS 10会将用户访问的www(World Wide Web,万维网)转换为就近的IP提供给用户。用户20向CDN网络30的边缘节点302发起目标资源的请求,若请求命中,则边缘节点302直接响应用户请求返回对应的目标资源,完成Http(超文本传输协议)请求。如果请求不命中时,即边缘节点302的缓存中没有请求对应的目标资源,则边缘节点302需要向上一层节点,例如CDN网络30的中层节点304发出回源请求,在中层节点304请求仍然不命中时,则中层节点304需要向CDN网络30的上层节点306发送回源请求,并由上层节点306向源站,这里可以看作是主源站40发出回源请求。其中,流程图3所示的实线部分为回源请求必经流程(通常用户请求的目标资源在边缘节点302即可获取到),虚线部分为可选流程。如果在当前节点的本层请求命中,则当前节点不会进行虚线流程的向上一层的节点发出回源请求。
[0110] 在图4中,将上层节点306区分为Nginx 3062和Cache 3064。LVS(均衡负载系统)50将下层节点发出的回源请求选择发送到其中一组的上层节点306的Nginx 3062和Cache 3064。
[0111] 当上层节点306的Nginx3062接收到中层节点304的回源请求时,将用于记录不同状态码与切换备份源站对应关系的源站切换配置打包成指定的请求头,并发送给上层节点Cache 3064。
[0112] 上层节点Cache 3064接收Nginx 3062的本次请求,并解析请求头得到对应的源站切换配置。上层节点Cache 3064将解析得到的状态码与对应的切换备份源站形成对应关系映射表,并保存到内存中。
[0113] 如果本次请求命中,上层节点Cache 3064直接从磁盘中读取请求的目标资源内容并发送给本层的Nginx3062。Nginx 3062将Cache 3064发送的目标资源通过中层节点304、边缘节点302返回给用户20。
[0114] 如果本次请求没有命中,即上层节点的磁盘中没有请求的目标资源,则上层节点Cache 3064向主源站40发送请求目标资源的回源请求。
[0115] 主源站40响应所述回源请求向上层节点30的Cache 3064发送响应状态码,Cache 3064根据响应状态码可以判断回源请求是否命中,或者主源站是否成功返回目标资源。
[0116] 如果发往主源站40的本次请求命中,即回源请求成功,Cache 3064会接收到主源站40发送的目标资源,并将收到的目标资源发送给本层的Nginx 3062。Nginx 3062将从主源站40获取的目标资源通过中层节点304、边缘节点302返回给用户20。
[0117] 如果发往主源站40的本次请求没有命中,即回源请求失败,主源站40存在4xx或5xx故障,Cache 3064接收到主源站40返回的响应状态码后,判断响应状态码与解析的源站切换配置中的状态码是否匹配,即是否能够根据主源站40返回的响应状态码从切换配置中找到相同的状态码以确定对应的请求切换备份源站。
[0118] 如果不满足切换配置条件,即响应状态码与源站切换配置的状态码不匹配时则结束回源请求,Cache 3064将最后一次从主源站40收到的响应状态码发送给本层的Nginx 3062。Nginx 3062将主源站40返回的响应状态码通过中层节点304、边缘节点302返回给用户20。
[0119] 如果满足切换配置条件,即在响应状态码与源站切换配置的状态码匹配时,上层节点Cache 3064将本次请求切换到源站切换配置中该状态码对应的备份源站(例如备份源站1、备份源站或备份源站n,具体根据配置来确定具体的切换备份源站是哪个)并再次发起回源,从切换的备份源站请求目标资源。
[0120] 同样地,如果将本次请求切换到状态码对应的备份源站时仍然出错,Cache 3064则直接将对应的备份源站返回响应状态码发送给上层节点Nginx 3062并结束请求,Nginx 3062将备份源站返回的响应状态码通过中层节点304、边缘节点302返回给用户20。
[0121] <装置实施例>
[0122] 在本公开另一个实施例中,提供了一种源站切换装置2000,如图5所示,该图为本公开实施例的源站切换装置的结构方框图。
[0123] 源站切换装置2000包括:第一接收模块2200、发送模块2300、第二接收模块2400、确定模块2600以及切换模块2700。
[0124] 第一接收模块2200用于接收第一节点请求目标资源的第一回源请求,发送模块2300用于在本地缓存中未存在所述目标资源的情况下,向主源站发送请求所述目标资源的第二回源请求。第二接收模块2400用于接收所述主源站响应所述第二回源请求发送的响应状态码,确定模块2600用于在所述响应状态码确定所述第二回源请求失败的情况下,根据预设的状态码与备份源站之间的对应关系和所述响应状态码确定与所述响应状态码对应的备份源站,以及切换模块2700用于将所述第二回源请求切换到与所述响应状态码对应的备份源站,以再次请求所述目标资源。
[0125] 在一个实施例中,所述装置2000还包括:第一响应模块(图中未示出),用于在根据所述预设的状态码与备份源站之间的对应关系和所述响应状态码未确定出与所述响应状态码对应的备份源站的情况下,将所述响应状态码发送给所述第一节点。
[0126] 在一个实施例中,所述装置2000还包括:第二响应模块(图中未示出),用于在将所述第二回源请求切换到与所述响应状态码对应的备份源站之后,接收所述备份源站响应所述第二回源请求发送的响应状态码,并在根据所述备份源站发送的响应状态码确定所述第二回源请求失败的情况下,将所述响应状态码发送给所述第一节点。
[0127] 在一个实施例中,所述装置2000还包括:第一资源发送模块(图中未示出),用于在本地缓存中存在所述目标资源的情况下,响应所述第一回源请求发送所述目标资源给所述第一节点。
[0128] 在一个实施例中,所述装置2000还包括:第二资源发送模块(图中未示出),用于在根据所述响应状态码确定所述第二回源请求成功的情况下,响应所述第一回源请求发送所述目标资源给所述第一节点。
[0129] 在一个实施例中,所述预设的状态码与备份源站之间的对应关系包括:单个状态码对应单个备份源站、多个不同的状态码对应同一个备份源站、预定范围的状态码对应同一个备份源站、以及同一个状态码对应多个不同的备份源站中的至少一个。
[0130] 在一个实施例中,在所述响应状态码符合同一个状态码对应多个不同的备份源站的情况下,所述确定模块2600用于:
[0131] 从所述多个不同的备份源站中选择一个备份源站;
[0132] 将选择的所述备份源站确定为与所述响应状态码对应的备份源站。
[0133] 在一个实施例中,在所述多个不同的备份源站具有端口时,所述多个不同的备份源站对应的端口相同。
[0134] 在一个实施例中,在所述响应状态码同时符合单个状态码对应单个备份源站、以及预定范围的状态码对应同一个备份源站的情况下,所述确定模块2600用于:
[0135] 根据所述单个状态码对应单个备份源站的对应关系,确定与所述响应状态码对应的备份源站。
[0136] <电子设备>
[0137] 根据本公开的再一个实施例,还提供了一种电子设备,该电子设备3000可以是图1所示的电子设备1000。图6为本公开实施例的电子设备的结构方框图。
[0138] 一方面,该电子设备3000可以包括前述源站切换装置2000,用于对应实施本公开任意实施例的源站切换方法。
[0139] 另一方面,如图6所示,电子设备3000可以包括存储器3200和处理器3400,存储器3200用于存储可执行的指令;该指令用于控制处理器3400执行前述的源站切换方法。
[0140] 在本实施例中,电子设备3000可以是服务器、平板电脑、掌上电脑、台式机、笔记本电脑、工作站等任意具有存储器3200以及处理器3400的电子产品或其他终端设备。
[0141] <计算机可读存储介质实施例>
[0142] 最后,根据本公开的又一个实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序在被处理器执行时实现根据本公开任意实施例所述的源站切换方法。
[0143] 本公开实施例可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开实施例的各个方面的计算机可读程序指令。
[0144] 计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD‑ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0145] 这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0146] 用于执行本公开实施例操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开实施例的各个方面。
[0147] 这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0148] 这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0149] 也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0150] 附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人物来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。
[0151] 以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人物来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人物能理解本文披露的各实施例。本公开实施例的范围由所附权利要求来限定。