探索 BEAM 虚拟机生态的完整技术图谱,从 Erlang 函数式并发到 Elixir 现代 Web 开发,掌握构建高可用分布式系统的核心能力。
专题文章
语言基础
- Erlang 基础语法教程:从模块定义到并发编程完全指南 — 模块、函数、模式匹配、递归与列表操作
- Erlang 语言基础 — 数据类型、运算符、控制流与函数定义
- Erlang 模式匹配与迭代器 — 模式匹配深度解析与列表/映射表遍历
- Erlang 迭代器与递归 — 递归编程范式与尾递归优化
并发与 OTP
- Erlang 并发编程与 Actor 模型深度解析 — 轻量级进程、消息传递、链接监控与容错哲学
- Erlang OTP 框架:构建工业级并发应用 — Gen_server、Supervisor、Application 与 Event Manager
- Erlang gen_statem 状态机与 gen_event 事件管理深度解析 — gen_statem 两种回调模式、延迟事件与状态超时、gen_event 事件管理
- 自定义 OTP Behaviour 实战:Callback 规范与行为封装 — behaviour_info 回调契约、optional_callbacks、编译期检查、自定义行为实现、行为 vs 协议选型
BEAM 运行时与互操作
- BEAM 运行时与进程调度深度解析 — 调度器与进程模型、抢占式调度、进程迁移、ETS 并发、分代 GC 与写时复制、性能监控调优
- Erlang 与 C 互操作实战:Ports 与 NIF 深度解析 — Port 外部进程桥、NIF 接口与资源对象、调度器阻塞陷阱、dirty NIF 与线程安全、Port/NIF 选型
分布式系统
- Erlang 分布式编程:节点互联与集群部署 — 节点通信、RPC、Mnesia 数据库与 CAP 权衡
- Mnesia 分布式数据库:事务、容错副本与生产部署 — ram/disc/disc_only 存储策略、事务与锁、副本容错、分片与索引
Elixir 与 Web 开发
- Elixir 入门与 Phoenix Web 框架实战 — Elixir 语法、Mix 工具链、Phoenix MVC、LiveView 实时交互与 Ecto 数据库
- Elixir Ecto 数据访问层:Schema、Query、迁移与变更集 — Ecto 四大组件、Query DSL、Migration 与 Changeset 校验约束
- Elixir 测试工程:ExUnit 深入、属性测试与 Mock 策略 — 并发测试、StreamData 属性测试、Mox 契约 Mock 与 Sandbox 隔离
- Phoenix Channels 实时通信实战:WebSocket 与 PubSub 深入 — Socket 认证、Channel 加入与消息流、PubSub 广播、Topic 设计、Presence 在线状态、性能与背压
- LiveView 进阶实战:状态管理、并发与性能优化 — 生命周期与 assign 变更追踪、函数组件、PubSub 跨进程同步、异步长任务、diff 与节流优化、连接恢复
- Mix 工具链与 Elixir 工程化实战 — 项目结构与 mix new、自定义任务、Hex 依赖与 mix.lock、环境配置、质量四件套(format/credo/dialyzer/test)、mix release 发布与 CI
- Elixir 认证授权实战:JWT、Guardian 与 Phoenix.Token — JWT 三段结构与签名算法、Guardian 配置与 Pipeline、签发验证与刷新、Phoenix.Token 边界、吊销与密钥轮换、攻击面防御
生产实践
- Erlang/OTP 生产案例与性能调优 — WhatsApp/RabbitMQ 案例分析、BEAM 调优、内存管理与故障排查
- Erlang ETS 与内存管理:从表类型到生产级缓存 — 四种表类型、并发访问保护、缓存模式、DETS 持久化与性能调优
- Erlang 热代码升级与 Release:从 appup 到滚动升级 — appup/relup、code_change 状态转换、relx/rebar3 打包与零停机升级
- Erlang 位语法与二进制处理:高效数据序列化与协议解析 — Bitstring/binary 类型、位语法表达式、模式匹配协议解析、位标志掩码、iolist 延迟拼接、NIF 共享、TCP 包头解析
- Elixir OTP 监督树与任务并发:Supervisor、GenServer 与 Task — Supervisor 四种策略、GenServer 状态机、Task 异步并发、Agent 轻量状态、DynamicSupervisor、Registry 进程发现、分布式节点通信
- Erlang/Elixir 可观测性:日志、Telemetry 指标与分布式追踪 — Logger 结构化日志、Telemetry 事件指标、Prometheus/Grafana、OpenTelemetry 链路追踪、observer_cli/recon、BEAM VM 内部指标
- Ecto 高级查询与数据库工程:关联、多态与性能优化 — 查询构建器、关联预加载与 N+1 治理、多态关联、Ecto.Multi 事务、子查询 CTE 窗口函数、PostgreSQL JSONB/全文搜索
- Erlang/Elixir 安全加固:加密、认证与分布式信任 — Argon2/bcrypt 哈希、AES/RSA 加密、TLS 配置、安全随机数、分布式 Cookie/TLS、注入防御、Secrets 管理、审计日志
- OTP 应用设计模式:监督树结构、release 打包与热升级 — Application 生命周期、分层监督树、GenStatem 状态机、Mix Release 打包、热代码升级、配置管理三层模型、远程 Shell、libcluster 部署
- Erlang/Elixir 流式数据处理:GenStage、Flow 与 Broadway 实战 — 需求驱动背压、生产者/消费者/生产者消费者契约、Flow 分区与窗口聚合、Broadway 管道并发编排、错误重试与死信、Telemetry 可观测
- Elixir 后台任务与调度:Oban 架构、唯一性与生产运维 — Postgres 队列架构与表结构、Worker 返回值语义、唯一性约束与退避重试、Cron 插件、队列隔离与并发、Oban Web 与测试
- Erlang/Elixir 容器化与集群部署:Release、Docker 与 libcluster — Mix release 构建与产物、多阶段 Dockerfile、runtime.exs 与 RELEASE_* 配置、节点命名与 EPMD、libcluster 策略、滚动升级与优雅停机
工程工具链与集成
- rebar3 构建与发布实战 — 项目结构、依赖与锁、profiles 与配置、escript/release 打包、插件生态、CI 集成
- Dialyzer 与类型规范:静态分析与告警治理 — success typing 原理、spec/type 语法、PLT 构建与增量、常见告警解读、与测试配合
- BEAM 性能调优:调度器、GC 与内存剖析 — 进程与调度器指标、GC 与内存、binary 与 ETS 使用、消息队列与背压、recon/observer 剖析、压测方法论
- RabbitMQ 与消息中间件集成 — AMQP 模型与交换机类型、生产消费与确认、可靠投递与幂等、连接池与背压、集群与运维
- Cowboy 与 HTTP/JSON API 开发 — Cowboy 架构与路由、handler 与中间件、JSON 编解码、WebSocket 与 SSE、限流与安全、部署
- 数据库集成与连接池 — pgsql/epgsql 与 MySQL 驱动、连接池(poolboy)、事务与预处理、迁移与索引、故障重连与超时治理
- Erlang/Elixir gRPC 与 Protobuf:从编码原理到 grpcbox 实战 — Protobuf 线格式与 Varint/ZigZag、.proto 语法与兼容演进、gpb 代码生成、grpcbox 服务端与客户端、四种流式 RPC、拦截器与元数据、状态码与超时
- Elixir HTTP 客户端与连接池:Mint、Finch 与 Req 实战 — Mint 连接模型与 HTTP/2、Finch 池策略与调优、Req 重试退避与插件、四层超时、熔断与舱壁隔离、流式响应与 Telemetry
- Elixir Nx 与数值计算:张量、Axon 与模型推理 — Nx 张量形状与类型提升、命名维度与广播归约、EXLA/XLA 惰性编译与 JIT 缓存、Axon 模型定义与自动微分训练、Nx.Serving 自动批处理推理、ONNX/PyTorch 权重互操作
- Absinthe GraphQL:Schema、Resolver 与订阅 — SDL 与代码优先 Schema 定义、非空与接口联合类型、Resolver 与 Context 传递、Dataloader 消除 N+1、Channels 之上的 Subscription 实时订阅、查询复杂度限制与错误中间件
- Elixir 元编程与宏:AST、quote/unquote 与 DSL 设计 — AST 三元组表示与 quote/unquote 语义、defmacro 编译期展开、卫生宏与 var!/2 边界、@before_compile 与 using 注入、声明式 DSL 实战、调试手段与过度使用代价
- 缓存、限流与熔断:Cachex、Hammer 与降级策略 — Cachex 的 ETS 缓存架构、TTL 抖动与 fetch 单飞、缓存击穿穿透雪崩应对、Hammer 四种限流算法与分布式后端、fuse 熔断状态机与降级回退、组合顺序与 Telemetry 指标
- 分布式一致性与网络分区:CRDT、libcluster 与脑裂治理 — 分布式 Erlang 全互联拓扑与连接成本、libcluster 的 Gossip 与 Kubernetes 策略、CAP 取舍与一致性谱系、CRDT 类型与收敛语义、脑裂检测与多数派治理、Ra 适用边界与分区恢复
- BEAM 内存剖析与泄漏排查:recon、observer 与堆分析 — 进程堆/二进制堆/ETS/进程外内存构成与观测入口、recon 的 proc_window/bin_leak/alloc 工具链、引用计数二进制与堆大小分析、邮箱堆积与原子泄漏、从 RSS 到具体进程的定位流程
阅读路线
| 阶段 | 难度 | 建议阅读顺序 |
|---|---|---|
| 入门 | 初级 | 基础语法 → 语言基础 → 模式匹配 → 迭代器 |
| 进阶 | 高级 | 并发编程 → OTP 框架 → 自定义 Behaviour → 分布式编程 |
| 运行时 | 高级 | BEAM 调度 → Ports/NIF 互操作 → ETS 缓存 |
| 全栈 | 中级 | Elixir 入门 → Phoenix 实战 → Channels 实时 → LiveView 进阶 → Mix 工程化 |
| 生产 | 高级 | 生产案例与性能调优 → BEAM 性能调优 → 数据库集成 |
| 工程 | 中级 → 高级 | rebar3 构建发布 → Dialyzer 类型规范 → Cowboy HTTP API → RabbitMQ 集成 |
相关专题
Erlang/Elixir 的函数式编程与并发模型与多种技术领域紧密关联:
- Clojure 专题 — JVM 上的函数式 Lisp,同为不可变数据与并发 focus
- 设计模式之 Actor 模型 — Actor 并发范式的跨语言对比
- 分布式系统 — CAP 定理、一致性协议与分布式事务
- 系统设计 — 高并发、高可用架构设计原则
- Go 语言并发模型 — CSP 与 Actor 模型的并发哲学对比
Erlang/Elixir 的适用场景
| 场景 | Erlang/Elixir 优势 | 示例系统 |
|---|---|---|
| 即时通讯 | 百万级长连接、消息可靠投递 | |
| 消息队列 | 高吞吐、持久化、路由灵活 | RabbitMQ |
| 实时游戏服务器 | 低延迟状态同步、容错 | League of Legends 后端 |
| IoT 设备管理 | 海量设备接入、固件热更新 | HiveMQ |
| 金融服务 | 交易一致性、零停机升级 | Klarna |
Erlang 的「let it crash」哲学不是放任错误,而是将故障隔离到最小单元(进程),通过监督树自动恢复。这与 Kubernetes 的 Pod 重启策略异曲同工。
专题统计
- 文章数量: 45 篇(语言基础 4 + 并发与 OTP 4 + BEAM 运行时与互操作 2 + 分布式系统 2 + Elixir 与 Web 开发 7 + 生产实践 12 + 工程工具链与集成 14)
- 覆盖领域: 语言基础、并发编程、OTP 框架与自定义 Behaviour、BEAM 运行时调度、Ports/NIF 互操作、分布式与 Mnesia、Elixir 全栈(Phoenix/Channels/LiveView)、Mix 工程化、测试、热升级、生产调优、rebar3、Dialyzer、性能剖析、RabbitMQ、Cowboy、数据库集成、流式处理(GenStage/Flow/Broadway)、后台任务与调度(Oban/Quantum)、gRPC 与 Protobuf、HTTP 客户端与连接池、认证授权(Guardian/JWT)、容器化与集群部署(Release/libcluster)、Nx 数值计算与 Axon 模型推理、GraphQL(Absinthe)、元编程与宏、缓存限流与熔断、分布式一致性与脑裂治理、BEAM 内存剖析(recon)
- 难度分布: 入门 4 篇(初级)→ 中级 12 篇(Elixir 全栈/ETS/测试/rebar3/Cowboy)→ 高级 29 篇(OTP/BEAM 调度/NIF/分布式/热升级/生产/Dialyzer/RabbitMQ/流式/gRPC/集群部署/Nx 数值计算/GraphQL/宏/缓存限流/BEAM 内存剖析)
- 总预估阅读时间: 约 1076 分钟
- 先修要求: 函数式编程概念、基础网络协议