本周系统设计复习:

  • 你应该知道的 8 个最重要系统设计概念
  • 你应该知道的 DNS 记录类型
  • 轮询 vs. Webhooks
  • API vs. SDK!
  • Netflix 如何真正使用 Java?
  • 大 O 表示法 101:编写高效算法的秘密
  • 终极 Kubernetes 命令速查表

8 种最常用的 DNS 记录类型

以下是 8 种最常用的 DNS 记录类型。

1. A(地址)记录

将域名映射到 IPv4 地址。它是将人类可读域名转换为 IP 地址的最基本记录之一。

2. CNAME(规范名称)记录

用于将一个域名别名为另一个。通常用于子域名,将它们指向主域名,同时保持实际域名隐藏。

3. AAAA 记录

类似于 A 记录,但将域名映射到 IPv6 地址。它们用于支持 IPv6 协议的网站和服务。

4. PTR 记录

提供反向 DNS 查找,将 IP 地址映射回域名。它通常用于验证服务器的真实性。

5. MX 记录

将电子邮件流量定向到正确的邮件服务器。

6. NS(名称服务器)记录

指定域的权威 DNS 服务器。这些记录帮助将查询定向到正确的 DNS 服务器以进一步查找。

7. SRV(服务)记录

SRV 记录为特定服务(如 VoIP)指定主机和端口。它们与 A 记录结合使用。

8. TXT(文本)记录

允许管理员向 DNS 记录添加人类可读文本。它用于包含验证记录,如 SPF,用于电子邮件安全。

轮询 vs. Webhooks

轮询(Polling)

轮询涉及以固定间隔重复检查外部服务或端点以检索更新信息。就像不断问”你有新东西给我吗?“,即使可能没有任何更新。这种方法资源密集且效率低下。此外,你只在你询问时获得更新,从而错过任何实时信息。然而,开发者对何时以及如何获取数据有更多控制。

Webhooks

Webhooks 就像拥有内置通知系统。你不连续询问信息。相反,你在应用服务器中创建端点,并将其作为回调提供给外部服务(如支付处理器或运输供应商)。每次发生有趣的事情时,外部服务调用端点并提供信息。这使 Webhooks 非常适合处理实时更新,因为数据一可用就推送到你的应用。

何时使用轮询或 Webhook?

当存在某些基础设施限制阻止使用 webhooks 时,轮询是可靠选项。此外,使用 webhooks 存在由于网络问题错过通知的风险,因此需要适当的重试机制。

Webhooks 推荐用于需要即时数据交付的应用。此外,webhooks 在资源利用方面高效,特别是在高吞吐量环境中。

API vs. SDK

API(应用程序编程接口)和 SDK(软件开发工具包)是软件开发世界中的重要工具,但它们服务于不同目的:

API

API 是一组规则和协议,允许不同软件应用和服务相互通信。

  • 它定义软件组件应该如何交互
  • 促进软件组件之间的数据交换和功能访问
  • 通常由端点、请求和响应组成

SDK

SDK 是工具、库、示例代码和文档的综合包,帮助开发者为特定平台、框架或硬件构建应用。

  • 提供更高阶抽象,简化特定平台的开发
  • 针对特定平台或框架定制,确保在该平台上的兼容性和最佳性能
  • 提供对平台特定高级功能和能力的访问,否则可能难以从头开始实现

API 和 SDK 之间的选择取决于项目的开发目标和要求。

Netflix 如何真正使用 Java?

Netflix 主要是 Java 商店。

Netflix 的每个后端应用(包括内部应用、流媒体和电影制作应用)都是 Java 应用。

然而,Java 栈不是静态的,多年来经历了多次迭代。

以下是这些迭代的细节:

1. API 网关

Netflix 遵循微服务架构。每个功能块和数据由使用 Java(最初版本 8)构建的微服务拥有。

2. 使用 Groovy 和 RxJava 的 BFF

为多个客户端使用单个网关对 Netflix 是个问题,因为每个客户端(如电视、移动应用或 Web 浏览器)有细微差别。为处理这个,Netflix 使用前端后端(BFF)模式。Zuul 被移动到代理角色。

3. GraphQL Federation

Groovy 和 RxJava 方法需要 UI 开发者在创建 Groovy 脚本方面做更多工作。此外,响应式编程通常很难。

大 O 表示法 101

从简单数组操作到复杂排序算法,理解大 O 表示法对构建高性能软件解决方案至关重要。

  • O(1):常数时间表示法。运行时无论输入大小如何都保持稳定。例如,按索引访问数组元素,在哈希表中插入/删除元素。
  • O(n):线性时间表示法。运行时与输入大小成正比增长。例如,在未排序数组中查找最大或最小元素。
  • O(log n):对数时间表示法。运行时随输入增长缓慢增加。例如,在排序数组上二分查找,在平衡二叉搜索树上操作。
  • O(n²):二次时间表示法。运行时随输入大小指数增长。例如,简单排序算法如冒泡排序、插入排序和选择排序。
  • O(n³):三次时间表示法。运行时随输入大小增加迅速升级。例如,使用朴素算法相乘两个稠密矩阵。
  • O(n log n):线性对数时间表示法。这是线性和对数增长的混合。例如,高效排序算法如归并排序、快速排序和堆排序。
  • O(2ⁿ):指数时间表示法。运行时每个新输入元素翻倍。例如,通过划分为多个子问题解决问题的递归算法。
  • O(n!):阶乘时间表示法。运行时随输入大小 skyrocket。例如,排列生成问题。
  • O(√n):平方根时间表示法。运行时相对于输入的平方根增加。例如,在范围内搜索,如埃拉托斯特尼筛法查找所有质数到 n。

Kubernetes 命令速查表

Kubernetes 是一个开源容器编排平台。它自动化容器化应用的部署、扩展和管理。

最初由 Google 开发,Kubernetes 现在由 CNCF(云原生计算基金会)维护。

此速查表包含用于不同目的的最重要 Kubernetes 命令:

  • Kubernetes 设置
  • 一般集群管理
  • Kubernetes 部署
  • Kubernetes Pod 检查
  • 故障排除和配置
  • 与服务、配置映射和管理入口相关的杂项命令

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP143: DNS Record Types You Should Know

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。