Orleans:构建高性能分布式Actor服务
上QQ阅读APP看书,第一时间看更新

3.1 Orleans运行时

Orleans运行时是一个自组织的分布式程序框架,Orleans运行时框架是一个由若干逻辑同构的Orleans主机节点Silo组成的集群(见图3-1),每个Silo节点都是一个.Net服务进程,物理上可以承载于物理服务器、虚拟机或是Docker实例中。与分布式微服务集群(如ZooKeeper)类似,由于每一个Silo节点都是逻辑同构的,且所有Silo节点都使用基于TCP/IP的点对点(P2P)通信链路相互连接,Orleans集群支持Silo节点的动态加入、转移和故障恢复,可以在保证Orleans集群整体服务正常运行的前提下对系统容量进行动态伸缩。

每个Silo节点中同时承载着若干个响应外部业务请求的Grain实例,Silo节点进程通过使用任务调度器(Task Scheduler)、流管理器(Stream Manager)、持久化管理器(Persistence Manager)、Grain实例管理器(Activations Manager)、Grain目录管理器(Actor Directory Manager)、集群成员管理器(Cluster Membership Manager)、消息及序列化管理器(Messaging Serialization Manager)、客户网关(Client Gateway)实现了业务请求响应、集群内消息通信、任务调度、数据流管理、持久化储存及系统性能监控等功能,构成了Orleans运行时的最小逻辑单元,并可以提供完整的Orleans运行时服务。

•图3-1 由Silo集群组成的分布式Orleans运行时

• 任务调度器为整个Orleans运行时中的任务调度提供服务,与.NET Core运行时中的任务调度不同的是,在Orleans任务调度器内实现了一套定制化的异步任务调度模型,向外层提供了一套在同一逻辑任务组内线程安全的任务框架,为单个Grain实例的并发请求处理提供了线程安全的保证。

• 数据流管理器为Orleans的流式处理提供了事件流驱动的数据流管理功能。

• 持久化管理器为Orleans系统提供了可靠的持久化读写接口,Grain实例的状态保存即通过调用持久化管理器所提供的服务进行保存和读取。

• 实例管理器主要处理Grain实例的生命周期管理任务,如Grain实例的激活/休眠及Grain实例在执行业务逻辑时的异常处理等任务。

• Grain实例目录主要负责记录Silo中所管理的Grain实例列表,在Silo接收到客户端请求时提供Grain实例的查询服务。

• 集群成员管理器主要用于Orleans服务集群中各Silo主机间的服务发现、注册、路由、健康信息记录和管理,为Orleans服务器集群中和集群间通信提供必要的上下文及动态路由信息。

• 消息及序列化管理器直接为Silo提供了可靠、透明的内部通信服务,保证Silo与客户端及Silo与Silo之间具有可靠的数据交换信道。

• 客户网关通过TCP/IP将Silo所提供的服务接口暴露给Orleans引用实例(即Grain Reference)。