BizTalk开发系列(三十二)浅谈BizTalk主机性能优化

  很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率。但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率,从而约束了BizTalk的效率。之前做了一个200万条CSV数据通过 BizTalk传到数据库的程序。在不改变程序的情况下对主机性能做了一下简单优化,处理效率发生了成倍的增长。

程序逻辑

  先简单的介绍一下程序的处理逻辑,CSV原文件大概有200多万条数据,文件大小50多M。每条只有两个字段总长度大概有三十个字符左右。进 Pipeline之后由XML Disambler进行拆分,经过Orchestration拆分之后以每个XML 5000条数据进行处理。之后还需要经过其他 Orchestration的订阅与处理。最后将数据存储到SQL Server中。从CSV到SQL Server Table一共需要经过5个变化也就是经过一次拆分和三次Map。

软硬件环境

  硬件环境: Intel Xeon E5405 2.00Ghz X2 , 4GB , 74G X 8 RAID 5

软件环境:Windows Server 2003 Enterprise R2 32bit + BizTalk Server 2006 Enterprise R2 32bit + SQL Server 2005 Enterprise R2 32bit

  

   虽然大家可能知道很多方法可以解决这个问题,比如数据库命令,SSIS,自定义Adapter,自定义Pipeline等,但关于程序的优化 和合理性我们不在这里讨论因为项目有自己实际的问题,我们主要来看一下在不修改程序的情况下如果通过简单的优化主机性能达到性能的大幅度提高。

  在优化之前(使用BizTalk默认设置)虽然我的程序也可以运行,但遇到了两个问题:一个是CPU的利用率很低一般情况下都在20%左右徘 徊,磁盘读写效率也不高一般都在20M/s以下。二是数据库的数据不连续,也就是偶尔才会有数据往数据库里添加数据。不是连续的产生数据。所有数据跑完的 时间大概需要2小时左右。

在优化之前我们需要了解一下两个概念: 主机阻止和CLR 宿主线程值。

主机阻止

  在 BizTalk Server 上执行的大部分处理都在称为 BizTalk Server 主机实例的逻辑实体内进行,该逻辑实体是在 BizTalk Server 上以 Windows 服务或独立的主机进程运行的进程。为了管理主机实例进程使用的资源,BizTalk Server 使用可调整的阻止机制控制消息在主机实例中的传输和处理。

  该阻止机制对主机实例的负载进行调节,以确保负载没有超过主机实例或任何下游主机实例的处理能力。该阻止机制还防止称为资源争用的情况发生,这 种情况会降低主机实例进程或其他系统进程的整体性能。一个或多个进程消耗有限的资源从而损害进程自身和/或其他进程时,便会出现资源争用的情况。例如,消 耗过量的内存或线程将导致内存分配失败或大量的线程上下文切换,这会影响进程的性能。这样的资源争用会降低 BizTalk Server 的整体性能。

  主机阻止机制还检测可用资源利用不足的时间。如果可用的资源未得到充分利用,则阻止机制将允许主机实例处理更多的消息。主机阻止机制不断监视可用资源是否过度利用或利用不足,并据以调整通过主机实例的消息流。

  总之,BizTalk Server 主机阻止机制有助于确保系统以最佳可持续水平运行。

主机的CLR 宿主线程值

Windows 线程是 Windows 进程可用的最基本的可执行单元,因此,有必要为与 BizTalk 主机实例相关联的 .NET 线程池分配足够的线程以防止线程不足。线程不足时,没有足够的线程用于执行请求的作业,因此会对性能造成负面影响。同时应注意防止为与主机相关联的 .NET 线程池分配不必要的过多线程。为与主机相关联的 .NET 线程池分配过多的线程会增加上下文切换。Windows 内核从运行一个线程切换到运行另一个线程时,会发生上下文切换,这会带来性能开销。分配过多的线程会产生过多的上下文切换,这会对总体性能产生负面影响。

通过在 BizTalk Server 的注册表中创建相应的 CLR Hosting 值,可以修改与 BizTalk 主机的实例相关联的 .NET 线程池中可用的 Windows 线程数。

优化实战

  当然对于BizTalk的性能优化是一个复杂的事情。微软也提供也相应的分析工具和指南,但这些实现起来都比较麻烦,而且可能多人都喜欢偷懒, 不喜欢看这些分析的数据和使用这些工具。现在我们就来简单的做一下优化,优化主有有几个方面,一个是修改主机的阻止参数,一个是注册表参数的优化(一些高 级的功能都藏在注册表里^_^)。

  以下是我修改之后的参数设置,各主机阻止参数的含义大家可以通过查看帮助文档(规划可持续性能 > 引擎性能特性 > 通过主机阻止优化资源使用 >如何修改默认的主机阻止设置)了解,有些属性设置为0是指不启用主机阻止,也就是使用服务器最大资源。

1. 主机属性

2.阻止阈值

3.消息发布阻止设置

4. 消息处理阻止设置

5.修改.NET宿主线程值

Regedit.exe->HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTSSvcguid,其中 guid 是每个 BizTalk Server 主机实例的唯一 GUID

6.调整消息大小阈值

在映射期间,高于此阈值的文档将缓冲到文件系统中。修改该大小阈值,请在 BizTalk Server 注册表的以下位置处创建一个名为 TransformThreshold 的 DWORD 值:

HKLM\Software\Microsoft\BizTalk Server\3.0\Administration\TransformThreshold

输入一个要设置为新阈值的字节数的十进制值: 8000000

优化结果

  通过简单的优化之后数据的处理时间从原来的将近2小时缩短到了25分钟左右,服务器的CPU,磁盘读写利用率也得到了大幅度的提高。还有数据库的数据基本上可以连续的产生。

CPU使用率平均在50%左右,有数据存储到SQL Server时会达到90%以上。

磁盘写数据速率达到了52M

总结

  性能优化是个复杂的问题,需要经过大量的测试,而且由于项目和环境的需要面对的问题也不一样,程序的瓶颈也不一样。需要按实际情况解决。当然如果在程序设计和开过过程中充分考虑各产品的性能特点,优化程序的架构和处理方式应该是上上策。

时间: 2024-07-31 10:32:34

BizTalk开发系列(三十二)浅谈BizTalk主机性能优化的相关文章

BizTalk开发系列(三十八)微软BizTalk Server定价和许可[解读]

做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或者认为使用企业版是应该的,企业软件的销售就是有意思,懂产品的和卖产品的一般不是一个人.懂产 品的一般是做技术的,学这个产品的时候就是用D版的或者是企业版,不会去关心不同产品的定价.当然在跟客户讲的时候就很少考虑版本及价格因素.而卖产品就 会添油加醋说要实现这样的平台您需要购买XX.YY产品,当然为要

BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与2009 Beta这两个版本之间的常见功能的开发.发现表现平平,没有什么太让人兴奋的地方.随着最近一段时间BizTalk Server 2009配套产品(组件)的陆续发布.对于新一代的BizTalk开发应用平台的认可逐渐清晰起来. BizTalk新一代的开发与应用平台除了操作系统.数据库及集成开发环境之外主要包括

BizTalk开发系列(三十)单向端口实现请求-响应

BizTalk本质上是异步的消息处理引擎.BizTalk的请求与响应模式是基于异步之上的同步消息交换.消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息.例如,客户端发送一个SOAP请求到BizTalk SOAP适配器.连接该Web Service的BizTalk Orchestration接收处理消息.并返回一个SOAP响应消息.对于客户端程序来说是一个同步的SOAP请求.但在引擎内部则是通过并联交换许多 的异步消息来实现. 以下是请求-响应模式中的五个架构属性: B

BizTalk开发系列(三) 单机环境下的BizTalk Server 2006 R2安装

大部分的开发环境都是在单机环境下进行的,今天整理了一下BizTalk Server 2006 R2在单机环境下的安装步骤. 1. 软件需求 在独立服务器中完整安装BizTalk Server 2006 R2的基本软件需求 Windows 2003 Server with Service Pack 2 (SP2), or Windows 2003 Server R2 Microsoft Office Excel 2003 and InfoPath 2003 with Service Pack 2

BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding

我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目标环境的选择选项.该选项可以在不同的环境下使用不同的绑定(BizTalk应用程序配置)感觉很高级. 其实这个非常的简单,只需要两个步骤: 第一, 针对不同环境配置不同的Binding文件,具体你可以先把BizTalk应用程序配置为开发环境(比如相应的路径.数据库连接等).然后导出Binding文件.然后再发为生产环境的配置再导出成Binding文件. 第二, 点击BizTalk Application的Resour

BizTalk开发系列(三十四) Xpath

XPath 是在 XML 文档中查找信息的语言,在BizTalk的开发中应用非常广泛,当然你可以不必先学Xpath再去学BizTalk.但是如果对Xpath有一定了解的 话,在很多应用下会使你的开发更加快捷.为了方便查阅整理了一些Xpath常识和实际实例给开发过程提供个参考.由于BizTalk还未支持Xpath 2.0,所以以下的例子都是基于W3C 1.0规范. Xpath的重要性[实 际的场景] 之前做一个升级的项目,在项目中需要对XML进行节点查找并比较里面相应的值,通过比较结果再选取它的父

BizTalk开发系列(三十五) TCP/IP 适配器

BizTalk 的TCP/IP适配器最初是为英国的保健行业开发.该适配器属于BizTalk进程内适配器,将消息通过TCP/IP 套接字符串在BizTalk服务器与远程客户端间进行通讯. TCP/IP适配器支持以下几种交互模式: Request Only 消息被发送到BizTalk并路由到任何流程(Orchestration)或发送端口. Request-Response 消息被发送到BizTalk并接收从BizTalk返回的远端服务器的返回信息. Solicit Only 消息从BizTalk发

BizTalk开发系列(三十六) Orchestration单实例执行

BizTalk 是高效的消息处理引擎,采用多线程并发的方式来处理消息.也就是说当有消息被接收的时候就会产生一个新的消息处理实例.但有时目标系统可能并没有并发处理 的能力, 这时就需要在BizTalk中采用单实例的方式来处理消息.在BizTalk的管道中直接可以启用按序送达的方式来实现, 但是在Orchestration中并没有提供类似的选项.该如何做到呢? 其实在BizTalk中可以根据设置消息的Correlation Set也就是相关属性来实现这样的效果.也就是第一条消息进来之后创建一个Orc

BizTalk开发系列(三十三)BizTalk之Excel终极解决方案

Excel作为优秀的客户端数据处理程序得到了广泛的应用. 由于其简单又强大的功能在很多公司或个人的数据处理中占用非常重要的位置. 而BizTalk作为微软的SOA主打产品虽然免费提供了很多Adapter支持各种协议及应用程序. 不过非常可惜没有提供对富客户端程序Excel的"原生态"支持. 所以我们只能自己查找解决办法. 应用程序对Excel的支持网上已经有很多解决方案的,一部分是使用ODBC的excel驱动将Excel作为数据源进行处理,对于规范数据表之类的Excel文档这种方法比较