Tag: 负载均衡

BizTalk服务器问题

我们公司有一个biztalk服务器(一个虚拟的(1!)…)和一个保存数据的sql server。 现在我们有很多数据流量。 我说的是成千上万。 所以我实际上不确定一台服务器是否相当安全,但我们的公司并不那么容易说服。 最近我们遇到了很多问题。 请允许我详细说明,所以我没有遗漏任何东西: 我们的服务器有5个应用: 一个有3个编排,12个发送端口,16个接收位置。 一个有4个编排,32个发送端口,20个接收位置。 一个有4个编排,24个发送端口,20个接收位置。 一个有47个(是47个)编排,37个发送端口,6个接收位置。 一个具有几个资源的常见应用程序。 自从我们使用47个业务流程部署应用程序以来,我们遇到了问题。 很多这些编排使用赋值形状,使用c#代码进行映射。 这是因为我们使用HL7扩展,这有点特殊,所以通过使用c#code和xpath,映射更容易,因为很多这些模式看起来很相似。 c#读入通过xpath接收的XmlNodes,并返回XmlNode,然后再将其分配给biztalk消息。 我不确定这可能是原因,但我想我会提到它。 发送和接收端口有许多不同的类型:文件,MQSeries,SQL,MLLP,FTP。 每种类型都有不同的主机实例,以平衡负载。 我们的业务流程使用BiztalkApplication主机。 在这个服务器上还运行了几个脚本,主要是ftp上传脚本和拉链脚本,每天拉链文件每半小时压缩一次,并在一个月后删除zip文件。 我们在备份文件上使用这个zipscript(我们备份很多,备份也在我们的服务器上),我们这样做是因为服务器在将文件发送到有很多(很多)文件的位置时出现问题,所以之后文件减少到拉链它变得更好。 现在我们最近遇到的问题主要是两个主要问题: 我们最重要的问题如下。 我们在队列中保留了一个包含大量消息的接收位置以进行测试。 在我们启动这个使用47个业务流程的接收位置之后,正在运行的服务实例开始向天空摇滚。 好的,这很正常。 假设大约10000,然后我们停止接收位置以查看biztalk如何处理这10000个实例。 通常情况下,它们会很快下降,有时会发生故障,但过了一段时间它会开始“节流”,这意味着它们只是停止处理并且服务实例保持相同的数字,例如在30秒内它从10000下降到4000,然后它保持在4000并且它非常非常缓慢地降低,例如在5分钟或者30分钟内降低。 所以这意味着,其他应用程序的所有其他服务实例也都停留在这里,并且它们也没有被处理。 我们注意到在重新启动主机实例后,实例编号再次快速下降。 因此,我们尝试有选择地重新启动不同的主机实例以找到问题。 我们注意到最终重新启动文件发送/接收主机实例就可以了。 所以我们认为文件发送会成为问题。 结合我们做了很多备份。 所以我们用mqseries备份替换了文件类型备份。 发生同样的问题,有趣的是,重新启动文件发送/接收主机仍然可以解决问题。 在事件查看器中也找不到任何错误。 我们遇到的第二个问题是。 有时在早上6点左右,全部或部分主机实例正在停止。 在事件查看器中,我们注意到以下错误(这些错误不止一个): 具有URL“SQL:// ZNACDBPEG / mdnd0001 /”的接收位置“MdnBericht SQL”正在关闭。 详细信息:“已超出错误阈值。接收位置正在关闭。”。 消息传递引擎无法将具有URL“\ m2mservices \ Othello_import $ \ […]

如何在使用负载平衡时锁定对象

背景 :我正在编写一个函数,使用C#将长时间的操作放入队列中,每个操作分为3个步骤: 1.数据库操作(更新/删除/添加数据) 2.使用Web服务进行长时间计算 3.数据库操作(保存步骤2的计算结果)在步骤1中的同一个db表上,并检查db表的一致性,例如,步骤1中的项目是相同的(请参阅下面的更详细的示例) 为了避免脏数据或损坏,我使用锁对象(静态单例对象)来确保作为整个事务完成3个步骤。 因为当多个用户正在调用该函数来执行操作时,他们可以在他们自己的操作期间的不同步骤修改相同的db表而没有这个锁定,例如,user2在他的step1中删除了项目A,而user1正在检查A是否仍然存在于他的第3步。(附加信息:同时我正在使用Entity框架中的TransactionScope来确保每个数据库操作都是一个事务,但重复可读。) 但是,我需要把它放到一个使用负载均衡机制的云计算平台上,所以实际上我的锁对象不会生效,因为该function将部署在不同的服务器上。 问题:如何使我的锁定对象在上述情况下工作?