我们有一个部署到Azure网站的ASP.NET MVC应用程序,它连接到MongoDB并进行读写操作.应用程序反复执行.每分钟几千次

我们使用Autofac初始化C#驱动程序,我们将MaxConnectionIdleTime设置为45秒,如https://groups.google.com/forum/#!topic/mongodb-user/_Z8YepNHnbI和其他几个地方所述.

我们仍然收到以下大量错误:

Unable to read data from the transport connection: A connection
attempt Failed because the connected party did not properly respond
after a period of time,or established connection Failed because
connected host has Failed to respond. Method
Message:”:{“ClassName”:”System.IO.IOException”,”Message”:”Unable to
read data from the transport connection: A connection attempt Failed
because the connected party did not properly respond after a period of
time,or established connection Failed because connected host has
Failed to respond.

我们在连接到部署在Azure上的同一数据中心/区域中的VM上的MongoDB实例以及连接到外部PaaS MongoDB提供程序时都会收到此错误.

我在本地计算机上运行相同的代码并连接到同一个数据库,我没有收到这些错误.只有当我将代码部署到Azure网站时.
有什么建议么?

解决方法

每分钟几千个请求是一个很大的负担,唯一的方法是通过控制和限制任何一次可能运行的最大线程数.

由于没有太多关于您如何实现此信息的信息.我将介绍一些可能的情况.

实验时间

常数:

>要处理的项目:

> 50秒/或换句话说…
>每分钟3000次,还有一种方式来看看它…
>每小时18万

变量:

>数据传输率:

>每秒可以传输多少数据将会发挥作用,无论我们做什么,这将根据一天中的时间而变化.

我们唯一可以做的是消除来自不同cpu的更多请求,以分发我们发送的流量的重量.

>处理能力:

>我假设你有一个WebJob,而不是在MVC网站内部编码是自己的.它的效率非常低,不适合您想要实现的目的.通过使用WebJob,我们可以排列要由其他WebJob处理的工作项.问题的排队是Azure Queue Storage.

Azure Queue storage is a service for storing large numbers of messages
that can be accessed from anywhere in the world via authenticated
calls using HTTP or HTTPS. A single queue message can be up to 64 KB
in size,and a queue can contain millions of messages,up to the total
capacity limit of a storage account. A storage account can contain up
to 200 TB of blob,queue,and table data. See Azure Storage
Scalability and Performance Targets for details about storage account
capacity.

Common uses of Queue storage include:

  • Creating a backlog of work to process asynchronously
  • Passing messages from an Azure Web role to an Azure Worker role

问题:

>我们正在尝试每秒完成50笔交易,所以如果我们使用50个线程,每个交易应该在1秒钟以内完成.我们45秒的时间在这一点上没有目的.
>我们期待50个线程同时运行,并且在一秒钟内,每秒钟完成一次. (我在这里夸张一点,只是想点一下,但是想象一下下载50个文本文件,处理它,然后尝试拍摄到一个同事,希望他们甚至准备好抓住它)
>我们需要有一个重试逻辑,如果3次尝试后没有处理该项,则需要将其重新放入队列.理想情况下,我们应该为服务器提供更多的时间来响应,而不是每次失败只有一秒钟,让我们说,在第一次失败的情况下给予2秒的休息,然后是4秒,然后是10秒,这将大大增加我们坚持的几率/检索我们需要的数据.
>我们假设我们的MongoDb可以每秒处理这个数量的请求.如果你还没有,开始寻找扩大规模的方法,问题并不在于它是一个MongoDb,数据层可能是什么,事实上,我们正在提出这个数量的请求一个单一的来源将是你最有可能的问题.

解决方案:

>设置一个WebJob并将其命名为EnqueueJob.这个WebJob将有一个唯一的目的,排队要在队列存储中处理的工作.
>创建名为WorkItemQueue的队列存储容器,该队列将作为下一步的触发器,并启动扩展操作.
>创建另一个名为DequeueJob的WebJob.这个WebJob也将有一个唯一的目的,将工作项从WorkItemQueue中出来,并将请求发布到您的数据存储.
>配置DequeueJob,一旦一个项目被放置在WorkItemQueue内,启动5个单独的线程,而队列不为空时,为每个线程出现工作项,并尝试执行出队作业.

>尝试1,如果失败,等待&重试.
>尝试2,等待&重试.
>尝试3,将项目排入WorkItemQueue

>将您的网站配置为自动调整x数量的cpu(请注意,您的网站和网络作业共享相同的资源)

Here’s a short 10 minute video概述了如何利用队列存储和Web作业.

编辑:

另一个原因可能是因为另外两个因素,这些错误可能是因为它在一个MVC应用程序…

如果您正在使用DEBUG属性编译应用程序,而是推送RELEASE版本,则由于web.config中的设置,您可能会遇到问题,而不使用DEBUG属性,ASP.NET Web应用程序将运行请求最长为90秒,如果请求比此更​​长,它将处理请求.

要将超时时间延长到90秒以上,您需要更改web.config中的[httpRuntime] [3]属性…

<!-- Increase timeout to five minutes -->
<httpRuntime executionTimeout="300" />

您需要注意的另一件事是您的浏览器的请求超时设置>网络应用程序,我会说,如果你坚持在MVC中保存代码,而不是将其解压缩到WebJob中,那么可以使用以下代码向Web应用程序发出请求,并将其超时请求.

string html = string.Empty;
string uri = "http://google.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Timeout = TimeSpan.FromMinutes(5);

using (HttpWebResponse response = (HttpWebResonse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
    html = reader.ReadToEnd();
}

c# – Azure上的MongoDB连接问题的更多相关文章

  1. Swift 如何访问 MongoDB

    Perfect开源项目参与Perfect开发Slack在线协同MongoDBMongoDB库函数是在mongo-c语言库的基础上封装而成,能够为Swift轻松访问MongoDB服务器提供便利。请确保安装并激活了最新版本的Swift3.0toolchain。注意每次向项目追加依存关系时,必须要打开Swift软件包管理器重新创建一个新的Xcode项目文件。在您的项目中声明MongoDB请在您的Perfect项目源程序开头声明并导入MongoDB函数库:创建一个MongoDB数据库连接创建到MongoDB服务器

  2. TP5(thinkPHP5)框架mongodb扩展安装及特殊操作示例

    这篇文章主要介绍了TP5(thinkPHP5)框架mongodb扩展安装及特殊操作,结合实例形式分析了MongoDB扩展的基本安装、配置、模型操作以及使用Push操作实现的数据添加、更新等方法,需要的朋友可以参考下

  3. Node.js和MongoDB实现简单日志分析系统

    这篇文章主要介绍了Node.js和MongoDB实现简单日志分析系统,本文给出了服务器端、客户端、图表生成、Shell自动执行等功能的实现代码,需要的朋友可以参考下

  4. Laravel框架中集成MongoDB和使用详解

    今天小编就为大家分享一篇Laravel框架中集成MongoDB和使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. Node.js中使用mongoskin操作mongoDB实例

    这篇文章主要介绍了Node.js中使用mongoskin操作mongoDB实例,Mongous是一个轻量级的nodejs mongodb驱动,需要的朋友可以参考下

  6. Node.js中使用mongoose操作mongodb数据库的方法

    如何利用mongoose将数据写入mongodb数据库呢?操作方法很简单,下面小编给大家分享Node.js中使用mongoose操作mongodb数据库的方法,感兴趣的朋友一起看看吧

  7. php如何利用pecl安装mongodb扩展详解

    这篇文章主要给大家介绍了关于php如何利用pecl安装mongodb扩展的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. SpringBoot MongoDB详细使用教程

    这篇文章主要介绍了SpringBoot整合Mongodb实现简单的增删查改,MongoDB是一个以分布式数据库为核心的数据库,因此高可用性、横向扩展和地理分布是内置的,并且易于使用。况且,MongoDB是免费的,开源的,感兴趣的朋友跟随小编一起看看吧

  9. CentOS上安装Node.js和mongodb笔记

    这篇文章主要介绍了CentOS上安装Node.js和mongodb笔记,本文讲解了Python安装、Node.js安装、npm安装、mongodb驱动安装、mongodb数据库操作测试代码等内容,需要的朋友可以参考下

  10. php7安装mongoDB扩展的方法分析

    这篇文章主要介绍了php7安装mongoDB扩展的方法,简单分析了php7安装MongoDB扩展的步骤与相关配置操作技巧,需要的朋友可以参考下

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部