本周系统设计复习:
- 你应该知道的 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。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。