我必须创建一个.net Web应用程序,它可以在多个负载均衡的前端服务器上运行。现在我必须使用一些非线程安全的第三方api,因此一次只能有一个线程调用API,所以我必须使用一些同步机制,如lock或mutex,它们在进程内和整个进程中提供同步。现在锁定或互斥锁是否正确地在loadbalanced multiserver环境中工作?如果没有那么是否有任何机制使用我可以在所有机器中同步我的应用程序的所有线程?
答案 0 :(得分:1)
第三方API以何种方式“不是线程安全的”? 通常是,这意味着您只能从一个线程每个进程调用它 - 但您可以同时从多个不同进程调用它,除非它们都将访问单个进程共享资源。
如果您可以告诉我们有关API的更多信息,那将会有所帮助......
编辑:好的,因为它使用的是单个共享资源,您可能需要考虑创建一个服务器,其他所有服务器都连接到该服务器以及唯一计算机以使用此第三方API。这可能涉及请求的消息队列,或者可能只是普通的Web服务。显然,这将是单点故障和系统中的瓶颈 - 如果您能找到避免单个共享资源的任何方法,那将是更可取的。你可以通过让多台机器“试图”成为这种主机来避免单点故障,例如:通过持有数据库锁。当然,这回到了你原来的共享锁定问题 - 但这意味着你并没有试图为每个第三方API操作获取锁定 - 只是为了成为“活跃主人”的特权。