主要观点:Erlang 以并发、容错和分布闻名,其基于 Actor 模型,通过进程和消息传递实现并发,有内置的容错机制如链接和监控进程,OTP 是基于 Erlang 的库和设计原则集合,分布是 Erlang 的优势之一,通过节点、网络等实现节点间通信,但分布也有诸多问题如大规模集群的可扩展性、缺乏细粒度控制、网络分区、单邮箱瓶颈、节点发现及物理因素等。
关键信息:
- Actor 模型由 Carl Hewitt 提出,Erlang 基于此,进程轻量可创建大量。
- 消息传递机制用于进程间通信,每个进程有自己的邮箱。
- 容错机制包括链接和监控进程,可处理进程崩溃。
- OTP 有行为、监督者、GenServers 等组件。
- 分布通过节点、网络实现,有网络透明性等特点。
- 分布存在可扩展性、控制、分区、邮箱瓶颈、节点发现和物理等问题。
重要细节: - 创建新进程用
spawn/1
函数,可无限循环进程作为基本编程方式。 - 链接进程当一个崩溃另一个也崩溃,监控进程可在进程崩溃时被通知。
- OTP 组件可组合构建容错、可扩展系统。
- 节点是 Erlang 虚拟机实例,通过
epmd
连接,可通过net_kernel:connect_node/1
连接远程节点。 - 分布依赖心跳消息确保连接存活,大规模集群易产生网络流量问题。
- 分布式 Erlang 缺乏细粒度控制,可利用集群成员异构性并构建自定义路由层。
- 网络分区是分布式系统需考虑的问题,可使用分布式共识算法等。
- 单邮箱瓶颈在高流量系统中是问题,可使用替代分布机制。
- 节点发现需补充如
libcluster
等工具。 - 物理因素如光速、时钟同步影响分布式系统设计。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。