我们正在将网站迁移到 Azure,现在有时会遇到问题,但有以下异常(exception)情况:
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full
我们为德国的长途巴士开发了一个搜索引擎,每天向外部服务发出数千个请求:
- MongoDB
- Azure 缓存
- Azure 存储(Blob)
- 外部 API
我猜,每天大约有 250,000 个电话。或多或少所有的时间都很快又很短。我们为所有外部 API 设置了 8 秒或更短的超时,以防止挂起请求。
外部 API 主要通过以下类访问:http://pastebin.com/evNUVMXp
到目前为止,一切都运行良好,但一切都只在一台机器上运行。目前,我有 2 个用于 mongodb
的虚拟机和一个用于运行 3 个大型实例的网站。
有什么想法可以解决这个问题吗?
感谢您的帮助: 塞巴斯蒂安
最佳答案
我遇到的主要问题是 CosmosDB 客户端实例。建议在应用程序内将其用作静态。
因此,我建议引入数据客户端作为单例使用。
因此在应用程序中使用它就像:
DataClientFactory<EntityData>.Instance.DocumentDbRepository
其中,DataClientFactory
实现 Singleton 模式,DocumentDbRepository
实现围绕 CosmosDB 客户端 API(或您正在使用的数据客户端)的存储库模式。
CosmosDB 客户端(以及其他一些客户端)似乎被设计为对并行请求非常积极。
关于c# - Azure:无法执行套接字上的操作,因为系统缺乏足够的缓冲区空间或队列已满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480003/