【问题标题】:MongoDb Driver 2 - Singleton Instance Resilience [duplicate]MongoDb Driver 2 - Singleton Instance Resilience [重复]
【发布时间】:2017-05-16 08:58:01
【问题描述】:

在连接弹性方面,有没有人使用 MongoDB C# 驱动程序 (v2+) 和单例样式连接/集合实例?

问题

我们最近努力保护我们更广泛的基础架构,基本上通过 SSL 运行所有内容,甚至在内部也是如此。因此,我们最近获得了我们的主要 MongoDb 集群之一。最直接的区别之一是连接到集群的成本增加。我们的旧解决方案遵循典型的存储库模式,其中消息的订阅者将实例化存储库并在处理该消息之后允许它被 GCd 之前新建一个连接。由于切换到 SSL,我们看到消息处理性能大幅下降 - 超出了我们的预期!

问题

对于长寿命实例(周/月),是否有推荐的方法来使用 IMongoClientIMongoDatabaseIMongoCollection<T>。它是否优雅地处理..

  1. 集群中的特定节点出现故障(但集群保持可用)
  2. 整个集群下线(例如主要网络中断)
  3. 设置更大的超时时间等是否明智?有什么影响?

我目前的理解是1.应该没问题,因为2.它会尝试在超时窗口内缓冲操作并在集群再次可用时处理它们。 3. 很大程度上取决于内存和操作的及时性(我们需要在内部考虑)。

如果集群关闭的时间超过了各种超时允许的时间,我假设抛出异常,此时我还假设我的实例将变得无用,除非我可以告诉驱动程序重试连接到无限聚集。对我来说,这似乎是文档和我自己的研究的灰色地带 - 任何人都可以提供更多的阅读材料或建议来解决这种情况下的网络故障等问题吗?

非常感谢,

【问题讨论】:

    标签: c# mongodb ssl mongodb-.net-driver mongodb-csharp-2.0


    【解决方案1】:

    回答我自己的问题。您应该尽可能尝试重复使用IMongoClient - 理想情况下,它应该是一个单例。 IMongoDatabaseIMongoCollection<T> 可以根据需要创建。请参阅"Re-use" sections of the Mongo C# driver documentation

    IMongoClient 实现将保持与服务器的长期连接,并在网络故障时重新连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2012-10-07
      • 2021-03-31
      • 2013-07-03
      • 2016-08-13
      • 1970-01-01
      相关资源
      最近更新 更多