分布式软件架构——域名解析系统

news2024/9/25 13:23:38

透明多级分流系统的设计原则

用户在使用信息系统的过程中,请求首先是从浏览器出发,在DNS的指引下找到系统的入口,然后经过了网关、负载均衡器、缓存、服务集群等一系列设施,最后接触到了系统末端存储于数据库服务器中的信息,然后再逐级返回到用户的浏览器之中。

这个过程需要经过许许多多的技术部件。那么作为系统的设计者,我们应该意识到不同的设施、部件在系统中,都具有各自不同的价值:

  • 有一些部件位于客户端或网络的边缘,能够迅速响应用户的请求,避免给后方的I/O与CPU带来压力,典型的如本地缓存、内容分发网络、反向代理等。

  • 有一些部件的处理能力能够线性拓展,易于伸缩,可以通过使用较小的代价堆叠机器,来获得与用户数量相匹配的并发性能,并且应尽量作为业务逻辑的主要载体,典型的如集群中能够自动扩缩的服务节点

  • 有一些部件的稳定服务,对系统运行具有全局性的影响,要时刻保持着容错备份,维护着高可用性,典型的如服务注册中心、配置中心

  • 有一些设施是天生的单点部件,只能依靠升级机器本身网络、存储和运算性能来提升处理能力,比如位于系统入口的路由、网关或者负载均衡器、位于请求调用链末端的传统关系数据库等,都是典型的容易形成单点部件。

所以,在对系统进行流量规划时,我们需要充分理解这些部件的价值差异。这里有两个简单、普适的设计原则:

  1. 尽可能减少单点部件,如果某些单点时无可避免的,则应尽最大限度减少到达单点部件的流量。

比如用户要获取存储在数据库的用户头像图片,浏览器缓存、内容分发网络、反向代理、Web服务器、文件服务器、数据库等都可以提供这张照片。所以,恰如其分地引导请求分流至最合适的组件中,避免绝大多数流量汇集到单点部分(如数据库),同时依然能够、或者在绝大多数时候能够保证处理结果的准确性,在单点系统出现故障时,仍能自动而迅速地实施补救措施,这便是系统架构中多级分流的意义。

  1. 奥卡姆剃刀原则

Entities should not be multiplied without necessity.
如无必要,勿增实体。
—— Occam’s Razor, William of Ockham

在能满足需求的前提下,最简单的系统就是最好的系统。

DNS工作原理

域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。它的作用时将人类便于理解的域名地址(如www.baidu.com)转换为便于计算机处理的IP地址(如14.119.104.254)。

先看两个名词:

  • 权威域名服务器(Authoritative DNS):负责翻译特定域名的DNS服务器。权威是指服务器决定该域名最终结果。
  • 根域名服务器(Root DNS):是指固定的、无需查询的顶级域名(Top-Level Domain)服务器,可以默认为它们已内置在操作系统代码之中。全世界一共有13组根域名服务器(每一组根域名都通过任播的方式建立了一大群镜像),之所以有13的限制是因为DNS主要采用UDP传输协议来进行数据交换,未分片的UDP数据包在IPV4下最大有效值为512字节,最多可以存放13组地址记录。

DNS解析步骤如下:

  1. 客户端检查本地的DNS缓存,查看是否存在并且是存活(根据TTL,Time to Live存活时间判断缓存失效)着该域名的地址记录。
  2. 客户端将地址发送给本机操作系统中配置的本地DNS(Local DNS,用户手工设置或DHCP分配时或拨号时从PPP服务器中自动获取)。
  3. 本地DNS收到查询请求后,会按照是否有www.baidu.com的权威服务器 ——> 是否有baidu.com的权威服务器 ——> 是否有com的权威服务器的顺序,依次查找自己的地址记录,如果没有查询到,本地DNS就会一直找到最后点号代表的根域名服务器为止。
  4. 假设本地DNS是全新的,上面不存在任何域名的权威服务器记录,所以DNS查询请求按步骤3的顺序,一直查到根域名服务器之后,它会得到com的权威服务器记录,然后通过com的权威服务器得到baidu.com的权威服务器地址记录,以此类推,最后找到能够解释www.baidu.com的权威服务器地址。
  5. 通过www.baidu.com的权威服务器,查询到其地址记录。这里的地址记录并不一定是指IP地址,在RFC规范中,有定义的地址记录类型多大几十种,比如IPV4下的IP地址为A记录,IPV6下的AAAA记录、主机别名CNAME记录,等等。

DNS系统多级分流的设计,就是为了让DNS系统能够经受住全球网络流量不间断的冲击,但它也并不是没有缺点。典型的问题就是响应速度会受影响。在极端情况下,域名解析可能会导致每个域名都必须递归多次才能查询到结果,显著影响传输的响应速度。
以下图为例,DNS查询耗时约310毫秒,
首次DNS请求耗时
所以,为了避免这种问题,专门就有一种前端优化手段,叫做DNS预取(DNS Prefetching):如果网站后续要使用来自于其他域的资源,那就在网页加载时便生成一个link请求,促使浏览器提前对该域名进行预解释,如下所示:

<link rel="dns-prefetch" href="//domain.not-icyfenx.cn">

而另一种可能更严重的缺陷,就是DNS的分级查询意味着每一级都有可能受到中间人攻击的威胁,产生呗劫持的风险
要攻陷位于递归链条顶层的根域名服务器和链路时非常困难的,它们都有很专业的安全防护措施。但很多位于递归链条底层的、或者来自本地运营商的Local DNS服务器,安全防护相对松懈,甚至不少地区的运营商自己主动劫持,专门返回一个错的IP,通过在这个IP上代理用户请求,以便给特定类型的资源(主要是HTML)注入广告,进行牟利。
针对这种情况,近几年出现了一种新的DNS工作模式:HTTPDNS(也称DNS over HTTPS,DoH)。它把原本的DNS解析服务开放为一个基于HTTPS协议的查询服务,替代基于UDP传输协议的DNS域名解析,通过程序代替操作系统直接从权威DNS,或者可靠Local DNS获取解析数据,从而绕过传统Local DNS。这种做法的好处是避免了“中间商赚差价”的环境,不再惧怕底层的域名劫持,能有效避免Local DNS不可靠导致的域名生效缓慢、来源IP不准确、产生的智能线路切换错误等问题。

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

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

相关文章

云计算——容器

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.容器简介 二.主流容器技术 1.docker &#xff08;1&#xff09;容器的组…

HTML5+ Runtime提示

使用的环境 vue-cli框架&#xff0c;Andriod调试、云打包都会出现该弹框 1.我遇到的问题 上述弹框提示&#xff0c;HBuilderX3.8.2 &#xff0c; 手机SDK版本是3.8.4&#xff0c;不匹配 解决目的&#xff1a;需要让两个版本匹配 2. 点击“查看详情”&#xff0c;查看原因 …

JS文件UTF8格式乱码问题

UTF8格式的JS文件在IE中显示乱码问题的解决 这种情况通常是由于JS文件头缺少BOM标志引起的,解决方式: 方法1:用系统自带记事本,另存为 UTF-8,覆盖原文件,会自动加上BOM标志(就是文件开头的EF BB BF 三个字节) 方法2: 用notepad 打开,编码菜单,由UTF8编码改为 UTF8-BOM编码

10-Vue从入门到手撕

什么时候可以开始学习Vue? 学习路线&#xff1a;H5 CSS3 ---> ES6 ---> 网络 ---> 第三方库 ---> 工程化 ---> Vue 不经过前面的铺垫是无法学习vue的&#xff0c;就算学了还得倒回去补知识点 展现Vue Vue源码分析&#xff0c;走进作者的内心世界 …

记录一次对STM32G4串口硬件FIFO的调试

记录一次对STM32G4串口硬件FIFO的调试 前言&#xff1a;通常我们使用串口接收多字节数据会使用中断和DMA两种方式。使用中断方式&#xff0c;每接收到一个字节就会触发一次中断&#xff0c;我们可以在中断函数里将接收到的这一字节保存在内存中然后等待其他程序处理&#xff0c…

麦语言是什么东东?怎么学?

麦语言&#xff08;M Language&#xff09;是一种用于处理数据的编程语言&#xff0c;最初由微软公司开发。它是Power Query&#xff08;数据提取和转换工具&#xff09;和Power BI&#xff08;商业智能工具&#xff09;中的一部分。麦语言支持对各种数据源进行查询、转换和清理…

农业温室大棚数据监控系统的设计与实现

1.引言 农业温室大棚作为现在农业发展的必要条件&#xff0c;将高新技术融入农业温室大棚也愈发的重要&#xff0c;对农业温室大棚数据的监控&#xff0c;将温室大棚智能化。本设计对温室大棚实现远程数据监控&#xff0c;自动化控制&#xff0c;对温室内的环境数据进行巡回检…

解决Springboot在启动时报错:不支持发行版本17

今天在创建新项目时控制台出现如下错误&#xff1a; 最后经过排查发现问题出现如下几点。将以下几点进行修改问题得以解决。 1.将红色箭头地方由17改为11 2.将maven的pom文件中 的javaversion由17改为113.将spingboot的版本调为2.7.5 如果以上还没有解决问题&#xff0c;可以尝…

机器视觉(图像处理)入门金典之图像数字化及处理方法

图像的数字化 一般的图像(模拟图像)不能直接用计算机来处理,必须首先转化为数字图像 把模拟图像分割成一个个称为像素的小区域,每个像素的亮度或灰度值用一个整数表示 数字化的含义: 使模拟图像的灰度、亮度和色彩数据化 图像数字化的步骤: 两个步骤: 1、在空间坐标…

时间序列分解 | Matlab改进的自适应噪声完备集合经验模态分解ICEEMDAN

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab改进的自适应噪声完备集合经验模态分解ICEEMDAN 部分源码 %--------------------

【百日冲大厂】第十九篇,牛客网选择题+编程题汽水瓶+ 查找两个字符串a,b中的最长公共子串(动态规划问题)

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#xff0c;第十九篇,牛客网选择题编程题汽水瓶 查找两个字符串a,b中的最长公共子串(动态规划问题).&#x1f49e;&#x1f49e;&#x1f49e;生活就像一只盲盒&#xff0c;藏着意想不到的辛苦&#xff0c;当然也有万般惊喜的可…

【自动化测试】——Selenium (基于java)

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启软件测试的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 目录 一、认识Selenium 1.什么是自动化测…

原码的表示

原码表示 定点整数源码与定点小数源码 源码表示例题 正数与负数转换直接将高位变为1即可 原码的性质 原码的优缺点 乘除法直接符号位异或&#xff0c;数值相乘除即可加法与减法需要先判断两个数值的大小然后确定符号位

软件开发项目延期就天天加班,你认为有效吗?

目录 一、软件开发项目延期的因素 1.1 客户需求变更 1.2 开发人员变动 1.3 技术瓶颈 1.4 对外沟通问题 二、相应的解决方案 2.1 需求变更管理机制 2.2 公司内部人员培训和团队建设 2.3 技术难题攻关 2.4 优化沟通流程 三、总结 软件开发项目延期时加班并不是一个长期…

C++之std::forward模板函数用法(一百四十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

2023.7.2-逆向显示键入的整数

功能&#xff1a;输入一个整数(多位)&#xff0c;逆向显示输入的结果。 程序&#xff1a; int main() {int a;printf("请输入一个整数&#xff1a;");scanf("%d",&a);if (a < 0)printf("请输入一个正整数");else{while (a>0){printf…

力扣 -- 931. 下降路径最小和

题目链接&#xff1a;931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 参考代码&#xff1a; class Solution { public:int minFallingPathSum(vect…

动态规划 DP (四) 子序列问题

5.子序列问题 1&#xff09; 力扣https://leetcode.cn/problems/longest-increasing-subsequence/解题思路&#xff1a;因为子序列&#xff0c;其实就意味着要进行两层遍历了&#xff0c;分别列举子序列的结尾坐标和开始坐标&#xff0c;这样才能遍历完所有子序列。然后遍历的…

Linux学习-实操篇

Linux学习 实操篇 学自尚硅谷武晟然老师&#xff0c;结合老师课堂内容和自己笔记所写博文。 文章目录 Linux学习实操篇Shell介绍文件目录一、目录操作命令1.1 查看和切换工作目录1.2 列出目录内容1.3 创建和删除目录 二、文件操作命令2.1 创建文件2.2 复制文件或文件夹2.3 删除…

Django之ORM与MySQL对比

ORM 把类映射成数据库中的表&#xff0c;把类的一个实例对象映射成数据库中的数据行&#xff0c;把类的属性映射成表中的字段&#xff0c;通过对象的操作对应到数据库表的操作&#xff0c;实现了对象到SQL、SQL到对象的转换过程。 下面以一个商品库存明细表 myfirstapp_sku&…