【问题标题】:How to achieve syncronization in loadbalanced multiserver environment如何在负载均衡的多服务器环境中实现同步
【发布时间】:2010-03-18 17:06:12
【问题描述】:

我必须创建一个 .net Web 应用程序,它可以在多个负载平衡的前端服务器上运行。现在我必须使用一些不是线程安全的第三方 api,所以一次只有一个线程应该调用 API,所以我必须使用一些同步机制,如锁或互斥锁,它们在进程内和机器中的进程之间提供同步。现在 lock 或 mutex 在负载平衡的多服务器环境中是否正确工作?如果没有,那么是否有任何机制可以让我在所有机器上同步我的应用程序的所有线程?

【问题讨论】:

    标签: .net asp.net synchronization locking load-balancing


    【解决方案1】:

    第三方 API 以何种方式“不是线程安全的”? 通常这意味着你只能从一个线程调用它每个进程 - 但你可以同时从多个不同的进程调用它,除非它们都将访问一个共享资源。

    如果您能告诉我们更多有关 API 的信息,那将有所帮助...

    编辑:好的,因为它使用单个共享资源,您可能需要考虑创建一个服务器,所有其他人都连接到该服务器,并且它是 sole 使用此第三方 API 的机器。这可能涉及请求的消息队列,或者可能只是一个普通的 Web 服务。显然,这将是系统中的单点故障和瓶颈——如果您能找到任何避免单一共享资源的方法,那将是更可取的。

    您可以通过让多台机器“尝试”成为该主机来避免它成为单点故障,例如通过持有数据库锁。当然,这又回到了您最初关于共享锁的问题——但这意味着您并没有尝试为每个第三方 API 操作获取该锁——只是为了成为“活动主人”的特权。

    【讨论】:

    • 实际上 API 在内部使用一个共享资源,因此一次只能调用一个线程。
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2017-09-05
    • 2013-08-26
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多