本周系统设计复习:
- 为什么每个人都在谈论 MCP?
- 如何学习后端开发?
- 简化 Git 工作流
- 虚拟化 vs. 容器化
- Netflix 如何构建分布式计数器?
如何学习后端开发
后端开发需要了解多个方面。以下是开发者应该学习的所有内容的思维导图:
1. 基础(Fundamentals)
包括后端 vs. 前端、客户端 - 服务器、DNS 等主题。
2. 后端编程语言
在一种或多种编程语言之间选择,如 Java、Python、JS、Go、Rust 和 C#。
3. 数据库
包括数据库类型主题,如 SQL(Postgres、MySQL、SQLite)、NoSQL(MongoDB、Firebase、DynamoDB)、NewSQL(CockroachDB、Spanner)。其他主题包括使用 ORM 和数据库缓存。
4. API 和 Web 服务
学习 API 类型(REST、GraphQL、gRPC、SOAP)和认证技术(如 JWT、OAuth 2、API 密钥)。
5. 服务器和托管
涉及后端托管服务(AWS、Azure、GCP)、使用 Docker 和 Kubernetes 容器化,以及 Nginx、Apache 等的服务器设置。
6. DevOps
学习使用 GitHub Actions 和 Jenkins 的 CI/CD 管道、IaC(Terraform、Ansible)和监控工具(如 Prometheus、Grafana、ELK)。
简化 Git 工作流
学习 Git 是每个开发者的基本技能之一。以下是简单和基本 Git 工作流中的步骤。
1. 开发者工作目录(未跟踪)到暂存区(索引)
命令是”git add”。文件从未跟踪变为已暂存。
2. 暂存区到本地仓库(HEAD)
此移动的命令是”git commit -m “message""。它将更改保存到本地仓库(HEAD),标记版本历史。
3. 本地仓库到远程仓库(远程)
此移动的命令是”git push”。它将提交的更改上传到远程仓库(如 GitHub)以进行协作。
4. 远程仓库到本地仓库
命令”git pull”和”git fetch”帮助这个。“git pull”用远程更改更新本地文件。另一方面,“git fetch”检索远程更改但不合并它们。命令”git merge”合并来自不同分支的更改。
5. 检查差异
命令”git diff HEAD”显示开发者工作目录和最新提交之间的差异。
虚拟化 vs. 容器化
虚拟化在单个物理服务器上创建多个 VM,每个都有自己的操作系统,使用管理程序。
容器化是一种轻量级虚拟化方法,在隔离环境(容器)中运行应用,共享相同的操作系统。
让我们更详细地看看不同的可能性。
1. 裸机(Bare Metal)
应用直接在操作系统上运行。不使用虚拟化或容器化。它提供高性能但缺乏灵活性。
2. 虚拟化(Virtualized)
使用管理程序创建 VM。每个 VM 有自己的 guest OS,使其在资源上更重。提供强隔离但增加开销。
3. 容器化(Containerized)
使用容器引擎代替管理程序。容器共享主机操作系统,使其轻量高效。它比 VM 更快、更可扩展。
4. 虚拟化上的容器化(Containerized on Virtualized)
在 VM 内运行容器。提供灵活性和隔离,常见于混合云环境。它在资源效率和安全性之间取得平衡。
Netflix 如何构建分布式计数器
分布式计数器是一个系统,其中计数事件的责任分布在网络中的多个服务器或节点上。Netflix 需要跟踪和测量多个用户交互以做出实时决策和优化基础设施。
为此,他们构建了分布式计数器抽象。
Netflix 的分布式计数器抽象在四个主要层中操作
确保高性能、可扩展性和最终一致性。
客户端 API 层 用户通过与系统发送 AddCount、GetCount 或 ClearCount 请求进行交互。Netflix 数据网关高效处理和路由这些请求。
事件日志和 TimeSeries 存储 事件存储在 Netflix TimeSeries 抽象中以获得可扩展性。每个事件都标记有事件 ID 以确保幂等性。为避免数据库竞争,事件分组到称为桶的时间分区中。数据存储在 Cassandra 中。
Rollup 管道或聚合 Rollup 队列收集事件更改并批量处理它们。聚合在不可变时间窗口中发生,确保准确的 rollup 计算。数据存储在 Cassandra Rollup Store 中以实现最终一致性。
读取优化(缓存和查询处理) 聚合计数器值缓存在 EVCache 中以实现超快读取。如果缓存值过时,后台 rollup 刷新更新它。此模型允许 Netflix 每秒处理 7.5 万次请求,具有个位数毫秒延迟。
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP157: How to Learn Backend Development?。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。