20190127-Orleans与SF小伙伴的部分问答

Orleans
  1. 怎么部署到服务器?
  • 方式1:Orleans 服务端寄宿在Web应用中,将Web应用部署到服务器
  • 方式2:通过SF/K8s部署到服务器
  1. 不同服务器上的谷仓和谷如何调配?
  • 由Orleans框架调度。当部署到有一组节点的集群时,Orleans在内部实现了一组协议,来发现和维护集群中Orleans silo的成员身份,包括检测节点故障和自动重新配置。
  1. 谷和谷仓如何连接
     var silo = new SiloHostBuilder()
     [...]
     // Endpoints
     .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
     [...]
    
    Orleans silo有两种典型类型的端点配置:
  • silo-to-silo端点(siloPort),用于同一集群中的silo之间的通信
  • client-to-silo端点(gatewayPort),用于同一集群中的客户端和silo之间的通信

在示例中,我们使用帮助方法.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000),将用于silo-to-silo通信的端口设置为11111和用于网关的端口设置为30000。

  1. 接口、服务、actor概念的边界
  • 结合OrleansSample.zip示例程序理解接口、服务、actor的概念
  1. 明确谷仓的含义
  • Grain的集合
  • 结合OrleansSample.zip示例程序理解
    Actor
  1. 无状态的Actor上数据如何处理
  • 通过调用actor的方法,对actor的字段数据CRUD

示例:
Grain:

    public class HelloGrain : Orleans.Grain, IHello
    {
        private readonly ILogger logger;
        private string tempData;
        public HelloGrain(ILogger logger)
        {
            this.logger = logger;
        }
        Task IHello.SayHello(string greeting)
        {
            var result = string.IsNullOrEmpty(tempData) ? $"You said: '{greeting}', I say: Hello!" : $"You said:'{tempData}-{greeting}'";
            return Task.FromResult(result);
        }

        public Task SetValue(string temp)
        {
            tempData = temp;
            return Task.CompletedTask;
        }
    }`

调用:

    public class HomeController : Controller
    {
        private IClientFactory clientFactory;
        public HomeController(IClientFactory clientFactory)
        {
            this.clientFactory = clientFactory;
        }
        public async Task Index()
        {
            var client = clientFactory.GetClient();
            var actor = client.GetGrain(0);
            var r = await actor.SayHello("Kiwi");
            return Content(r);
        }
        public async Task SetValue(string str)
        {
            var client = clientFactory.GetClient();
            var actor = client.GetGrain(0);
            await actor.SetValue(str);
        }
    }
  1. Actor持续化的过程怎么实现
  • 参考:https://dotnet.github.io/orleans/Documentation/grains/grain_persistence/index.html
  1. 多个物理分离的服务如何连接在一起
  • 通过orleansmembershiptable表和Orleans框架维护的协调方式。
  • 相关回答 Orleans问题 3
  1. Orleans+Actor 怎么部署 实际使用
  • 相关回答 Orleans 问题 1
    SF
  1. SF与IIS的区别是什么?
  • Internet Information Service(IIS)是windows开设web网页服务的组件,提供Web、FTP、SMTP等服务,是用来搭载网站运行程序的平台。
  • Service Fabric 是一款分布式系统平台,可方便用户轻松打包、部署和管理可缩放的可靠微服务和容器。
  • Service Fabric 可帮助你构建使用微服务方法的应用程序,它提供:
    1. 提供系统服务的平台,用于部署、升级、检测和重启失败的服务、发现服务、路由消息、管理状态和监视运行状况。
    2. 能够部署在容器中运行或作为进程运行的应用程序。 Service Fabric 是容器和进程 Orchestrator。
    3. 有助于以微服务形式生成应用程序的编程模型,如:ASP.NET Core、Reliable Actors。
  1. SF的节点之间如何保证同步(例:一个节点死掉之后,再复原的时候依据的数据是怎么获得的)
  • 可靠性子系统通过使用复制器、故障转移管理器和资源平衡器提供一种机制,使得 Service Fabric 服务的状态高度可用。
    复制器确保主服务副本中的状态更改会自动复制到辅助副本,从而维护服务副本集中主副本和辅助副本之间的一致性。 复制器负责副本集中副本间的仲裁管理。 它与故障转移单元进行交互以获取要复制的操作列表,重新配置代理为其提供副本集的配置。 该配置指示操作需要复制到哪些副本。 Service Fabric 提供名为 Fabric Replicator 的默认复制器,编程模型 API 可使用它来使服务状态高度可用和高度可靠。
    故障转移管理器确保向群集添加节点或从群集中删除节点时,会自动在可用节点间重新分发负载。 如果群集中的节点失败,群集会自动重新配置服务副本以维持可用性。
    Resource Manager 在群集中的失败域之间放置服务副本,并确保所有故障转移单元正常运行。 Resource Manager 还会平衡群集节点基础共享池中的服务资源,从而获得最佳的统一负载分布。
  • SF中的微服务支持备份还原、容错域等概念实现高可用
  • 相关参考Reliable Services 概述
  1. SF与docker的关系
  • 参见Service Fabric 和容器
  1. SF是否可以做到负载均衡
  • 一般sf上的微服务之前,会配置专门的负载均衡器。
  • 支持。
  1. 在SF中,是否一个node对应多个服务器
  • Service Fabric 群集是一组通过网络连接在一起的虚拟机或物理计算机,微服务会在其中部署和管理。
  • 群集可以扩展到成千上万台计算机。
  • 属于群集一部分的计算机或 VM 称为节点。需为每个节点分配节点名称(字符串)。 节点具有各种特征,如放置属性。 每个计算机或 VM 都有一个自动启动 Windows 服务 FabricHost.exe,此服务在引导时开始运行,并启动两个可执行文件:Fabric.exe 和 FabricGateway.exe。 这两个可执行文件构成了节点。在开发或测试方案中,可以通过运行 Fabric.exe 和 FabricGateway.exe 的多个实例,在单台计算机或 VM 上托管多个节点。

总结:
上面表述摘自官方文档,可以理解为:生产环境,一个node对应一个服务器(一台物理机或一个VM);测试开发环境,单台计算机或VM可以托管多个node


  1. actor如何跨服务器通信
  • Silo对消息进行路由的过程分为以下3步
    1. 查找本地的Actor Activation数据字典,如果找到了,直接路由到本地的Actor Activation进行消息处理
    2. 如果本地的Actor Activation数据字典中没有这个Grain,则查找缓存字典,找到后根据字典中的Silo地址,然后将消息路由到对应的Silo
    3. 如果缓存中也没找到,会根据GrainId,通过Consistent Hash来获得目标Silo,进行远程的Silo查找GrainId对应的激活,然后保存到本地的缓存字典中
  • 相关参考 Orleans问题3和Actor问题3
  1. 如果SF部署两个cloud,是两个不同进程吗?
  • Service Fabric 是容器和进程Orchestrator。能够部署在容器中运行或作为进程运行的应用程序。
  • sf集群中的协调器,帮助运行其他进程。协调器的数量和机制没有看到相关文档。
  • 如果Cloud_A下有一个应用程序项目;Cloud_B下有一个应用程序项目,是两个进程。

你可能感兴趣的:(20190127-Orleans与SF小伙伴的部分问答)