【系统设计系列】 DNS和CDN

news2025/2/28 12:45:40

系统设计系列初衷


System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

中文版: https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md

初衷主要还是为了学习系统设计,但是这个中文版看起来就像机器翻译的一样,所以还是手动做一些简单的笔记,并且在难以理解的地方对照英文版,根据自己的理解在AI的帮助下进行翻译和知识扩展。

域名系统(Domain name system, 简称DNS)

                                                来源:DNS 安全介绍

什么是DNS

域名系统是把 www.example.com 等域名转换成 IP 地址。

这里需要了解一下DNS协议。

DNS 协议的作用是将域名转换为 IP 地址,使得计算机之间可以通过域名进行通信。例如,当用户在浏览器中输入网址时,DNS 协议会将这个网址对应的域名解析成 IP 地址,然后计算机就可以通过这个 IP 地址连接到目标服务器,获取相应的网页信息。同时,DNS 还支持反向解析,即通过 IP 地址查找对应的域名。

域名系统是分层次的,一些 DNS 服务器位于顶层。当查询(域名) IP 时,路由或 ISP 提供连接 DNS 服务器的信息。较底层的 DNS 服务器缓存映射,它可能会因为 DNS 传播延时而失效。DNS 结果可以缓存在浏览器或操作系统中一段时间,时间长短取决于存活时间 TTL。

  • NS 记录(域名服务) ─ 指定解析域名或子域名的 DNS 服务器。
  • MX 记录(邮件交换)  ─ 指定接收信息的邮件服务器。
  • A 记录(地址)  ─ 指定域名对应的 IP 地址记录。
  • CNAME(规范)  ─ 一个域名映射到另一个域名或 CNAME 记录( example.com 指向 www.example.com )或映射到一个 A 记录。

CloudFlare 和 Route 53 等平台提供管理 DNS 的功能。某些 DNS 服务通过集中方式来路由流量:

  • 加权轮询调度
    • 防止流量进入维护中的服务器
    • 在不同大小集群间负载均衡
    • A/B 测试
  • 基于延迟路由
  • 基于地理位置路由

DNS的查询方式

DNS(Domain Name System,域名系统)主要有以下几种查询方式:

递归查询(Recursive Query):

递归查询是一种将查询请求传递给其他 DNS 服务器的方式,直到收到查询结果。当客户端向本地域名服务器发送查询请求时,本地域名服务器会代表客户端在域名树中逐级向上查询,直到找到对应的 IP 地址或查询到顶级域名服务器。在这个过程中,本地域名服务器会先查询自己的缓存,如果缓存中没有相应的记录,它会向其他 DNS 服务器发送查询请求,直到收到回答。

迭代查询(Iterative Query):

迭代查询是另一种查询方式,客户端向本地域名服务器发送查询请求,如果本地域名服务器没有相应的记录,它会将查询请求依次转发给其他 DNS 服务器,直到收到有效的 IP 地址。在迭代查询过程中,客户端和服务器之间存在多次交互,服务器在查询过程中逐步向上查找,直至找到答案。

反向查询(Reverse Query):

反向查询是基于 IP 地址查询主机名的方式。当客户端知道一个 IP 地址,想要查询其对应的主机名时,可以发送反向查询请求。本地域名服务器会接收到这个请求,并向其他 DNS 服务器发送查询请求,最终返回对应的主机名。

负载均衡查询(Load Balancing Query):

负载均衡查询是一种多个服务器之间的负载均衡技术。当一个域名对应多个 IP 地址时,为了避免单一服务器压力过大,可以将这些 IP 地址分配给多个服务器,组成一个服务器集群。这时,域名服务器需要将多个 IP 地址存储在 A 记录中,并将这些 A 记录分配给不同的服务器。当客户端发送查询请求时,本地域名服务器会依次向这些服务器发送查询请求,直到收到第一个有效的 IP 地址。

这些查询方式在域名解析过程中发挥着重要作用,不同的查询方式适用于不同的场景和需求。

DNS的缺陷

  • 虽说缓存可以减轻 DNS 延迟,但连接 DNS 服务器还是带来了轻微的延迟。
  • DNS服务管理通常由政府,网络服务提供商和大公司,而且通常非常复杂
  • DNS 服务最近遭受 DDoS 攻击,会导致不良的影响,比如用户在不知道 Twitter IP 地址的情况下无法访问 Twitter 等网站。(由于IP和域名无法解析对应上)

CDN(Content delivery network 内容分发网络)

什么是CDN

内容分发网络(CDN)是一个全球性的代理服务器分布式网络,它从靠近用户的位置提供内容。通常,HTML/CSS/JS,图片和视频等静态内容由 CDN 提供,虽然亚马逊 CloudFront 等也支持动态内容。CDN 的 DNS 解析会告知客户端连接哪台服务器。

将内容存储在 CDN 上可以从两个方面来提供性能:

  • 从靠近用户的数据中心提供资源
  • 通过 CDN 你的服务器不必真的处理请求

CDN 推送(push)

当你服务器上内容发生变动时,推送 CDN 接受新内容。直接推送给 CDN 并重写 URL 地址以指向你的内容的 CDN 地址。你可以配置内容到期时间及何时更新。内容只有在更改或新增是才推送,流量最小化,但储存最大化。流量较小的网站或内容不经常更新的网站可以很好地使用推送 CDN。 内容一次性放置在 CDN 上,而不是定期重新拉取。

CDN 拉取(pull)

CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源。你将内容留在自己的服务器上并重写 URL 指向 CDN 地址。直到内容被缓存在 CDN 上为止,这样请求只会更慢,

存活时间(TTL)决定缓存多久时间。CDN 拉取方式最小化 CDN 上的储存空间,但如果过期文件并在实际更改之前被拉取,则会导致冗余的流量。

流量大的网站可以很好地使用CDN拉取,因为流量分布得更均匀,CDN 上仅保留最近请求的内容。

CDN的缺陷

根据流量的不同,CDN 成本可能会很高,但应权衡不使用 CDN 时可能产生的额外成本。

如果在 TTL 过期之前更新内容,则内容可能会过时。

CDN 需要更改静态内容的 URL 以指向 CDN。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIT6.828实验记录-Lab1

1.Lab1 刚刚入门,难度确实很大,大量的参考资料,知识点涉及的较深,好在每个实验,作者都给出了很多提示,让繁琐的实验变得有趣起来。逐个exercise进行,知识点有些断片,所以特意花点时…

excel中删除重复项

数据如图: 要删除姓名这一列的重复项,操作: (1)选中姓名这一列(2)点击“数据”(3)点击“删除重复项" 这是excel会自动检测出还有别的关联列 直接默认,点击删除重复项...弹出下面的界面 因为我们只要删除“姓名”列的重复值&…

C++智能指针之unique_ptr(保姆级教学)

目录 unique_ptr 概述 涉及程序 初始化 手动初始化 std::make_unique函数(C14) unique_ptr常规操作 不支持操作:该指针不支持拷贝和赋值操作;所以不能拷贝到容器里 移动语义std::move(); release(); reset(); *解应用…

【计算机网络】 子网划分

文章目录 IP地址分类子网掩码网关广播地址非默认子网掩码子网划分常见问题 IP地址分类 学会十进制和二进制的相互转换可以很快速的有规律的记住 子网掩码 又叫网络掩码,地址掩码,子网络遮罩,就是说把子网络遮起来,不让外界窥探到…

“安全即服务”为网络安全推开一道门

8月30日,三六零(下称“360”)集团发布了2023年半年报,其中安全业务第二季度收入6.54亿元,同比增长98.76%,环比增长157.16%,安全第二增长曲线已完全成型!特别值得一提的是&#xff0c…

【Unittest】Requests实现小程序项目接口测试

文章目录 一、搭建接口测试框架二、初始化日志三、定义全局变量四、封装接口五、编写测试用例六、生成测试报告 一、搭建接口测试框架 目录结构如下。 二、初始化日志 在utils.py文件中编写如下如下代码,初始化日志。 # 导入app.py全局变量文件 import app import l…

基于Zookeeper搭建Kafka高可用集群(实践可用)

目录 一、Zookeeper集群搭建 1.1 下载 & 解压 1.2 修改配置 1.3 标识节点 1.4 启动集群 1.5 集群验证 二、Kafka集群搭建 2.1 下载解压 2.2 拷贝配置文件 2.3 修改配置 2.4 启动集群 2.5 创建测试主题 2.6 写入数据测试 一、Zookeeper集群搭建 为保证集群高可…

SV中的随机化约束

1.多个变量相互依赖,如何进行随机化? 采用solve before (1)constraint c_valid_write_data {solve access_type before data;solve burst_length before data;(access_type TVIP_AXI_WRITE_ACCESS) -> data.size() burst…

算法通过村第五关-队列和Hash黄金笔记|LRU的设计与实现

文章目录 前言1. LRU的含义2. Hash双向链表实现LRU总结 前言 提示:我曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定从容。 我们层如此盼望世界的认可,到最后才知道:世界是自己&#…

01-Kafaka

1、Kafka 2 的安装与配置 1、上传kafka_2.12-1.0.2.tgz到服务器并解压: tar -zxf kafka_2.12-1.0.2.tgz -C /opt 2、配置环境变量并更新: 编辑profile配置文件: vim /etc/profile #设置kafka的环境变量export KAFKA_HOME/opt/kafka_2.1…

【ESP32--FreeRTOS 任务间的同步与通信】

本文主要记录【ESP32–FreeRTOS 任务间的同步与通信】的学习记录,邮件,信号量,事件组的使用和优缺点以及应用场景 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。&#x1f6…

软件测试之随机测试

目录 一、作随机测试之前的一些前提条件 二、随机测试功能点的选取 三、功能点的随机测试 在软件测试中除了根据测试用例和测试说明书进行功能测试外,还需要进行随机测试(Ad-hoc testing),随机测试是没有书面测试用例、记录期望…

【算法】插入排序

插入排序 插入排序代码实现代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&…

【算法】归并排序 详解

归并排序 详解 归并排序代码实现1. 递归版本2. 非递归版本 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相…

dpkt 处理linux cooked capture

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(1)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

QT 初识多线程

1.QThread线程基础 QThread是Qt线程中有一个公共的抽象类,所有的线程类都是从QThread抽象类中派生的,需要实现QThread中的虚函数run(),通过start()函数来调用run函数。 void run()函数是线程体函数,用于定义线程的功能…

借助CIFAR10模型结构理解卷积神经网络及Sequential的使用

CIFAR10模型搭建 CIFAR10模型结构 0. input : 332x32,3通道32x32的图片 --> 特征图(Feature maps) : 3232x32即经过32个35x5的卷积层,输出尺寸没有变化(有x个特征图即有x个卷积核。卷积核的通道数与输入的通道数相等,即35x5&am…

01-从JDK源码级别剖析JVM类加载机制

1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。 public class Math {public static final int initData 666;public static User user new User();public int compute() { //一个方法对应一块栈帧…

整理mongodb文档:事务(一)

个人博客 整理mongodb文档:事务(一) 原文链接,个人博客 求关注,本文主要讲下怎么在mongose下使用事务,建议电脑端看 文章概叙 本文的开发环境为Nodejs,在‘单机模式’讲解最基本的事务概念。并没有涉及分片以及集群&#xff0…