微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决奥尔良的哪一部分实际上是分布式的?

文档中有几个令人困惑的地方,让我很难理解 Orleans 中跨集群的分布究竟是如何发生的。因此,问题。

问题 #1

Orleans 声称有一个内置的 distribution 功能可以分布在多个服务器上。在我看来,Orleans 本身可以充当负载均衡器,并且可以自动扩展。因此,如果我将 Orleans 应用部署到多个服务器,那么服务发现和负载管理应该会自动发生,对吗?

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

问题 2

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

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

解决方法

  1. 服务发现和负载管理确实会自动发生。 Consul 不是强要求。唯一的外部要求是 Membership 表提供者——Orleans Clustering 内部使用的东西。 Orleans 已经内置了许多内置的 Membership 表提供程序。例如,Azure 表存储。您只需要配置 Orleans 即可使用它,当然还有 Azure 存储帐户。 Consul 是 Membership 表提供程序的另一种替代方案,还有更多。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?