前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于CDN加速后端服务

基于CDN加速后端服务

作者头像
叔牙
发布2023-08-09 15:05:24
1.1K0
发布2023-08-09 15:05:24
举报
文章被收录于专栏:一个执拗的后端搬砖工

一、CDN加速原理二、为什么使用CDN加速后端服务三、CDN加速后端服务具体实现四、存在的问题和风险

一、CDN加速原理

CDN(内容分发网络)的加速原理基于以下几个核心概念和技术:

  • 静态资源缓存:CDN网络通过在离用户更近的边缘节点上缓存静态资源(如图片、CSS、JavaScript文件等),将内容存储在距离用户更近的位置,以便更快地提供响应。当用户请求这些静态资源时,CDN会根据就近原则从边缘节点直接返回,减少了网络延迟和带宽消耗。
  • 就近访问:CDN的网络节点通常分布在全球各个地理位置,这使得用户可以就近访问资源。CDN系统会根据用户的IP地址,将用户请求路由到距离用户最近的节点,从而减少数据传输的跳数和减小延迟。
  • 负载均衡:CDN中的边缘节点是分布式的,通过负载均衡技术来平衡用户请求的流量,避免单个节点过载。负载均衡可以确保每个用户从一个可靠且低负载的节点获取所需内容,提高整体性能和可用性。
  • 动态内容缓存:除了静态资源,CDN还可以缓存动态内容。对于短时间内不经常变化的动态内容,CDN可以在边缘节点进行缓存,减轻源服务器的负载并提供更快的响应。当用户请求这些动态内容时,CDN会根据缓存策略判断是否返回缓存的结果或者向源服务器发起请求。
  • 响应优化:CDN会应用一系列的技术来优化响应速度,如压缩传输、TCP优化、HTTP/2协议等。这些技术可以减少网络带宽的使用量、优化数据传输、减小延迟,从而提高用户的访问体验。

总的来说,CDN的加速原理是通过在全球各个位置部署节点,缓存静态和部分动态内容,就近访问以及使用负载均衡和响应优化等技术,提供更快、更可靠的资源响应,从而加速互联网内容的传输和访问。

对于各大云服务厂商也都有各自的CDN产品,我们以亚马逊为例,其CDN的产品实现是CloudFront,工作原理如下:

  • 用户访问您的网站或应用程序,并发送对于某个对象的请求,例如图像文件、HTML文件或者http接口。
  • DNS将该请求传送到能以最佳方式满足该请求的CloudFront POP(边缘站点),通常是以延迟来衡量最近的CloudFront POP边缘站点,然后将请求路由到该边缘站点。
  • CloudFront检查其缓存中是否有所请求的对象。如果对象在缓存中,CloudFront 会将它返回给用户。如果对象不 在缓存中,CloudFront 将执行回源操作。
  • CloudFront将该请求和分配中的规则进行比较,然后针对相应的对象将此请求转发到源服务器,例如,转发到 Amazon S3 存储桶或 HTTP 服务器。
  • 源服务器将此对象发回给边缘站点。
  • 源中的响应到达后,CloudFront 就开始将此对象转发到用户。CloudFront 还将此对象添加到缓存中,方便下次有人请求该对象。

其他云服务的CDN产品工作原理也都类似,先从CDN缓存中获取数据或静态内容,如果找到就返回,没有的话就回源,源服务返回内容后将内容扩散到边缘节点存储并返回。

二、为什么使用CDN加速后端服务

对于后端读多写少的接口,也有加速的诉求,特别是在做一些跨境业务场景,我们无法满足在任意一个靠近用户的地方部署服务,这样就会比较大的网络延迟和服务本身响应的延迟,从而影响到用户体验导致用户流失。

对于读多写少的场景我们在接口实现维度,一般会考虑使用一些中心化的缓存,以及热点数据使用本地缓存来解决,很多公司使用redis+本地缓存作为解决方案,这种方案能够解决大部分问题,但对于国际化业务场景中心化缓存方案解决不了用户分散带来的网络延迟问题。而使用CDN加速后端服务能够解决什么问题,简单梳理了下有以下几点。

  • 网络延迟:当用户请求后端接口时,如果服务器与用户之间的网络延迟较高,会导致用户等待时间过长,降低用户体验。通过将后端接口部署在CDN的边缘节点上,可以将响应直接返回给离用户更近的节点,减少了数据传输的距离和网络延迟,从而提高了响应速度。
  • 带宽压力:如果后端接口面临大量用户的访问请求,源服务器可能会面临带宽压力,导致性能下降甚至崩溃。通过将后端接口部署在CDN的边缘节点上,可以将部分请求负载分散到不同的节点,减轻源服务器的负载,提高了系统的可扩展性和稳定性。
  • 防攻击:后端接口可能成为恶意攻击的目标,比如分布式拒绝服务(DDoS)攻击。CDN通常具备抗DDoS攻击的能力,也可以结合WAF以及类似亚马逊sheild实现高防能力,它们通过分布式节点来吸收和过滤攻击流量,只将正常的流量转发到源服务器,从而保护后端接口的可用性和安全性。
  • 全球访问:如果后端接口需要面向全球用户提供服务,由于地理和网络因素,不同地区的用户访问速度可能有很大差异。通过使用CDN,可以将后端接口的内容缓存到全球各个地理位置的节点上,使得用户可以从就近的节点获取内容,减少数据传输距离和延迟,提供更快的访问速度。
  • 大流量处理:对于拥有大量用户和高流量的网站或应用程序来说,CDN可以分散并处理大量的请求,从而减轻后端服务器的负担。它们通过缓存和就近交付内容,有效地减少了后端服务器所需处理的请求数量,提高了整体系统的性能和吞吐量。
  • 数据安全和隐私保护:有些CDN提供商提供额外的数据安全和隐私保护功能。它们可能提供加密通信、身份验证、防篡改和内容权限控制等功能,确保数据在传输和交付过程中的安全性和保密性。
  • 服务无法全球覆盖问题:在国际化业务场景,哪怕是大厂也无法做到服务节点全球覆盖,那么CDN就可以当成服务能力的一种延伸,通过CDN可以让用户感觉服务就在身边
  • 缓解中心化缓存延迟:一般服务的缓存能力也基本都是和服务配套部署,像redis等缓存基本不会也做不到每个区域都有节点,那么在中心化缓存之前,使用CDN动态加速,相当于在靠近用户的区域再加了一层缓存,那么访问服务的性能势必比访问redis缓存性能好。

三、CDN加速后端服务具体实现

CDN加速后端服务的流程大致如下:

  • 请求来了之后,dns会将CDN域名解析到离用户最近的边缘节点
  • 如果CDN中通过路径规则匹配,查到有缓存的数据,那么直接返回,不再回源
  • 如果CDN中不存在缓存数据,那么回源,将请求下发到服务器,服务器返回结果,CDN会根据配置的策略将内容扩散到其他边缘节点。

CDN既然能够加速后端服务,那么具体如实现步骤接下来介绍一下。以亚马逊的CloudFront为例。

1.创建分配

在CloudFront服务页面点击创建分配,选择分发行为源配置,以及其他域名和证书、支持的协议等等。

2.指定动作

回源的行为配置路径规则,以及缓存策略。

3.刷新缓存

虽然说使用CDN加速后端服务的场景是读多写少,但是不代表没有数据变更操作,在数据发生变更后,CDN中缓存的就是过期的数据,要么手动让缓存失效,要么通过其他方式清除CDN中的缓存数据。对于亚马逊的CloudFront提供了通过代码刷新CDN缓存的实现方式,简单实现如下:

代码语言:javascript
复制
public static void refreshCDN() {
    String distributionId = "YOUR_DISTRIBUTION_ID";
    String[] paths = {"/path1", "/path2"};


    // 创建一个 CloudFront 客户端
    AmazonCloudFront cloudFront = AmazonCloudFrontClientBuilder.defaultClient();


    // 创建一个无效请求对象(Invalidation Request)
    CreateInvalidationRequest invalidationRequest = new CreateInvalidationRequest()
        .withDistributionId(distributionId)
        .withInvalidationBatch(new InvalidationBatch()
            .withPaths(new Paths().withItems(paths).withQuantity(paths.length))
            .withCallerReference(String.valueOf(System.currentTimeMillis())));


    // 发起缓存刷新请求
    CreateInvalidationResult result = cloudFront.createInvalidation(invalidationRequest);


    // 输出刷新任务 ID 和状态
    System.out.println("Invalidation ID: " + result.getInvalidation().getId());
    System.out.println("Invalidation status: " + result.getInvalidation().getStatus());
}

在后端程序修改了数据之后,可以调用刷新CDN缓存的方法,让缓存失效,这样新的请求进来会触发回源操作,然后把新的数据缓存的边缘节点。

四、存在的问题和风险

当然CDN不是万能的,使用CDN加速后端服务也会引入一些新的问题,比如说缓存刷新后生效时间问题,对于CloudFront是分钟级别,那这个时间段内可能会出现一些读到旧数据的问题或者请求都大面积回源了,从而导致服务端的请求压力比较大。在使用场景中大概会遇到一下问题:

  • 数据一致性:由于CDN会将内容缓存到分布在全球各地的边缘节点上,因此在更新后端服务的数据时可能存在一定的延迟。这可能导致用户在某个地区访问到过期或不一致的数据。
  • 动态内容缓存:CDN主要用于缓存静态内容,例如图片、样式表和脚本文件等。而对于动态生成的内容,如个性化数据或需要实时计算的信息,CDN 无法直接缓存,并且可能会影响其实时性和准确性。
  • 缓存更新问题:在更新后端服务的内容时,需要手动或自动刷新CDN的缓存,以确保新内容能够及时传递给用户。但是,由于刷新操作可能需要一定时间,并且不同CDN提供商的刷新机制也有所不同,因此可能会产生更新延迟或操作复杂性。
  • 安全性问题:尽管CDN可以提供一定的安全性保护措施,如DDoS攻击防护和SSL/TLS加密等,但在使用CDN时,仍需要注意确保后端服务的安全性。例如,避免将敏感数据直接缓存在CDN中,以防止数据泄露或非授权访问。

在使用CDN加速后端服务时,需要根据具体需求、应用场景和业务特点进行权衡和选择。合理规划缓存策略、动态内容处理和安全防护等方面,也可以和其他工具(中心化缓存、WAF等)结合使用解决CDN加速后端服务可能遇到的问题,并提升用户体验和系统性能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、CDN加速原理
  • 二、为什么使用CDN加速后端服务
  • 三、CDN加速后端服务具体实现
    • 1.创建分配
      • 2.指定动作
        • 3.刷新缓存
        • 四、存在的问题和风险
        相关产品与服务
        内容分发网络 CDN
        内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档