6.1.1 常用网络术语
当我们在本章中提到节点,我们表示的是一个运行着的通过网络进行通信的应用程序。 在网络拓扑中它是一个连接点。 它是分布式系统的一部分。 多个节点可以运行在一台服务器上,或者他们可以运行的单独的服务器上。 图 6.1 展示了一个常用的网络拓扑:
Figure 6.1 Common network topologies
一个节点在分布式系统中有特定的角色。 它有特定的责任来执行特殊的任务。 例如,一个节点可能是分布式数据库的一部分,或者是多个提供前端 web 请求的多个 web 服务器之一。
节点使用特定的网络传输协议来与其他节点通信。 传输协议的例子包括 TCP/IP 和 UDP。 节点间的消息通过传输协议来发送,需要以网络特定协议的数据单元来编码和解码。 协议的数据单元包含消息的以字节数组的存储表示。 消息需要转换到字节,并从字节转换为消息,这分别是序列化和反序列化。 Akka 为这个目的提供了序列化模块,在本章中会简单接触。
当节点是同一个分布式系统的一部分时,他们的关系是同一个组的成员。 这个成员关系可以是静态的或动态的(或者是两者的混合)。 静态成员关系中,节点的个数和每个节点的角色是固定的,在网络的生命期中不能改变。 动态成员关系允许节点成为ubutong的角色,允许节点加入和离开网络。
静态成员关系显然比较简单。 所有的服务器启动时持有对其他节点网络地址的引用。 这也不太灵活;一个节点不能被运行在其他网络地址上的其他节点代替。
动态成员关系更灵活,运行一组节点按照需求增加或收缩。 这样也可以处理网络中失败的节点,可能自动替换它们呢。 这比静态成员关系远为复杂。 如果要恰当地实现动态成员关系,它需要提供机制来动态加入和离开集群,探测和处理网络失败,识别失去联系/网络中失败的节点,提供某些发现机制,通过这个机制,新节点可以找到网络上存在的集群,因为网络地址并不是静态定义的。
既然我们简单看了网络拓扑和常用术语,下一节会看看 Akka 使用分布式模型来构建本地和分布式系统的原因。