系统设计面试的 12 种算法
Bloom Filter:在执行磁盘作之前,检查请求的项目是否在缓存中。
Geohash:用于构建基于位置的服务。
HyperLogLog:计算用户在搜索中执行的唯一查询。
一致性哈希:用于在集群节点之间高效分配数据。
Merkle Tree:用于检测跨多个节点的数据副本之间的不一致。
Raft 算法:用于实现日志复制的共识。
Lossy Count:网络流量分析、Web 分析和识别重磅攻击者。
QuadTree:用于构建基于位置的服务。
Operational Transformation:用于支持协作编辑系统。
Leaky Bucket:用于速率限制
Rsync:在两个不同的系统之间同步文件和目录。
光线投射:用于地理空间分析、视频游戏中的碰撞检测和计算机图形学。
Kubernetes 的工作原理
Kubernetes (K8S) 是一个开源容器编排平台,最初由 Google 开发,现在由云原生计算基金会 (CNCF) 维护。
以下是开发人员与 Kubernetes 的交互方式:
开发人员创建描述应用程序的清单文件。
Kubernetes 获取这些清单文件,对其进行验证,并在其 Worker 节点集群中部署应用程序。
Kubernetes 管理应用程序的整个生命周期。
Kubernetes 由两个主要组件组成:
控制平面:它就像 Kubernetes 的大脑,由以下部分组成:
API 服务器:它接收来自用户或 CLI 的所有传入请求。
Scheduler:它根据资源可用性和约束决定在何处运行新 Pod。
Controller Manager:它确保集群的所需状态与实际状态匹配。
Etcd:Kubernetes 保存其所有数据的键值存储,包括应用程序的配置、集群状态和所需状态。
Worker 节点:它们是集群中的 worker。每个节点都有以下子组件:
Kubelet:每个节点上的主要工作程序。它与 API 服务器通信,获取指令,并确保容器按预期运行。
Kube-proxy:处理每个节点上的网络。
容器运行时
API 安全的 12 大提示
使用 HTTPS
使用 OAuth2
使用 WebAuthn
使用分级 API 密钥
授权
速率限制
API 版本控制
白名单
检查 OWASP API 安全风险
使用 API Gateway
错误处理
输入验证
无状态身份验证的密钥
JWT 或 JSON Web 令牌是一种开放标准,用于在两方之间安全地传输信息。它们广泛用于身份验证和授权。
JWT 由三个主要组件组成:
标头 每个 JWT 都带有一个标头,用于指定用于对 JWT 进行签名的算法。它以 JSON 格式编写。
有效负载 有效负载由声明和用户数据组成。有不同类型的声明,例如已注册、公共和私有声明。
签名 签名是确保 JWT 安全的原因。它是通过获取编码的标头、编码的有效负载、密钥和算法并对其进行签名来创建的。
可以通过两种不同的方式对 JWT 进行签名:
对称签名 它使用单个密钥对令牌进行签名和验证。签署 JWT 的服务器和验证 JWT 的系统之间必须共享相同的密钥。
非对称签名 在这种情况下,使用私钥对令牌进行签名,使用公钥来验证令牌。私钥在服务器上是安全的,而公钥可以分发给需要验证令牌的任何人。
数字签名如何工作
数字签名是一种特定类型的电子签名,用于签署和保护以电子方式传输的文档。
数字签名类似于物理签名,因为它们对每个人来说都是唯一的。它们标识签名者的身份。
以下是 Alice 作为发件人和 John 作为收件人的数字签名的工作流程示例:
Alice 生成一个由私有密钥和相应的公钥组成的加密密钥对。私钥保持机密状态,只有签名者知道,而公钥可以公开共享。
签名者 (Alice) 使用哈希函数从文档创建唯一的固定长度数字和字母字符串,称为哈希。此哈希值表示文档的内容。
Alice 使用其私钥加密消息的哈希值。此哈希值称为数字签名。
数字签名将附加到原始文档,从而创建一个数字签名文档。它通过网络传输给接收者。
收件人 (John) 从文档中提取数字签名和原始哈希值。
收件人使用 Alice 的公钥解密数字签名。这将生成一个最初使用私有密钥加密的哈希值。
收件人使用与签名者相同的哈希算法为收到的邮件计算新的哈希值。然后,他们将此重新计算的哈希值与从数字签名获取的解密哈希值进行比较。
如果哈希值相等,则数字签名有效,并确定文档未被篡改或更改。
来源:blog.bytebytego.com/p/ep149-jwt-101-key-to-stateless-authenticationblog.bytebytego.com/p/ep150-12-algorithms-for-system-design