实际上分布在奥尔良的哪一部分?

Ano*_*ous 3 orleans

文档中有几个令人困惑的点,让我很难理解奥尔良集群中的分布到底是如何发生的。因此,问题。

问题#1

Orleans 声称拥有内置的分发功能,可以跨多个服务器进行分发。对我来说,奥尔良本身可以充当负载均衡器,并且可以自动扩展。因此,如果我将 Orleans 应用程序部署到多个服务器,那么服务发现和负载管理应该自动发生,对吗?

在这种情况下,为什么一些文档和文章建议使用其他工具(例如 Ocelot 或 Consul)作为 Orleans 集群的单个入口点?

问题2

我想在多个服务器上使用简单但分布式的内存存储,例如 Redis 或 Apache Ignite,并且我想知道是否可以使用简单的颗粒作为这种数据存储?

比方说,一个grain 将存储一系列餐厅,而其他一些grain 将跟踪选定餐厅的最后 1000 名访客。我是否可以将这 2 个grain 作为单例集合仅激活一次,向每个集合添加或删除记录,并将这 2 个grain 用作内存存储,均匀地可供集群中的所有节点使用?另外,如果答案是肯定的,我是否需要向这些集合添加锁,或者每个颗粒始终存在于单个线程中?

Gab*_*iot 5

  1. 服务发现和负载管理确实是自动发生的。Consul 并不是一个强烈的需求。唯一的外部需求是成员资格表提供程序 - Orleans Clustering 在内部使用的东西。Orleans 中已经内置了许多内置的会员表提供程序。例如,Azure 表存储。您所需要的只是配置 Orleans 来使用它,当然还有 Azure 存储帐户。Consul 是会员表提供者的另一个替代方案,而且还有更多。

另一件没有内置的事情是基础设施扩展。如果您的服务需求增加,则需要要求基础设施提供商(云提供商)添加更多服务器。添加服务器后,Orleans 也会自动调整新服务器之间的工作负载和负载平衡。但弄清楚需要更多服务器并添加它们并不是由 Orleans 自己完成的(可能有一些外部贡献的工具可以做到这一点。也许可以配置 K8 来做到这一点?我对此并不完全确定)。

  1. 是的,您可以使用这 2 个颗粒作为内存存储,就像您所写的那样。不,您不需要使用锁。所有颗粒都是单线程的。