很多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

总结

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

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

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

    做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或 ...

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

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

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

    BizTalk本质上是异步的消息处理引擎.BizTalk的请求与响应模式是基于异步之上的同步消息交换.消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息.例如,客户端发送一个 ...

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

    大部分的开发环境都是在单机环境下进行的,今天整理了一下BizTalk Server 2006 R2在单机环境下的安装步骤. 1. 软件需求 在独立服务器中完整安装BizTalk Server 2006 ...

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

    我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目标环境的选择选项.该选项可以在不同的环境下使用不同的绑定(BizTalk应用程序配置)感觉很高级. 其实这个非常的简单 ...

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

    BizTalk 的TCP/IP适配器最初是为英国的保健行业开发.该适配器属于BizTalk进程内适配器,将消息通过TCP/IP 套接字符串在BizTalk服务器与远程客户端间进行通讯. TCP/IP适 ...

  7. BizTalk开发系列(三十四) Xpath

    XPath 是在 XML 文档中查找信息的语言,在BizTalk的开发中应用非常广泛,当然你可以不必先学Xpath再去学BizTalk.但是如果对Xpath有一定了解的 话,在很多应用下会使你的开发更 ...

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

    BizTalk 是高效的消息处理引擎,采用多线程并发的方式来处理消息.也就是说当有消息被接收的时候就会产生一个新的消息处理实例.但有时目标系统可能并没有并发处理 的能力, 这时就需要在BizTalk中 ...

  9. [原创]浅谈H5页面性能优化方法

    [原创]浅谈H5页面性能优化方法 前阶段公司H5页面性能测试,其中测试时也发现了一些性能瓶颈问题,接下来我们在来谈谈H5页面性能优化,仅仅是一些常用H5页面性能优化措施,其实和Web页面性能优化思路大 ...

随机推荐

  1. java中高级软件工程师面试总结

    最近去了几家公司面试java中高级工程师,打击挺大的,感觉自己一直以来没有很好的深入学习,对各种知识都是一知半解,但心又太高,想找更高薪的职位,结果面试屡屡碰壁,哎,心情好低落,也是时候静下心来,好好 ...

  2. 《OD大数据实战》Hadoop伪分布式环境搭建

    一.安装并配置Linux 8. 使用当前root用户创建文件夹,并给/opt/下的所有文件夹及文件赋予775权限,修改用户组为当前用户 mkdir -p /opt/modules mkdir -p / ...

  3. Java 使用JDBC、DBCP、C3P0访问数据库

    JDBC: Connection conn = null; Statement stmt = null; ResultSet rs = null; // 1.加载驱动 try { Class.forN ...

  4. Mysql免安装版脚本

    使用Mysql过程中经常需要使用到免安装版本(绿色版)的Mysql,开始网上搜了一大堆,但还真是不怎么好用. 只好自己琢磨了一番,现在放出来和大家分享下: //安装启动服务 @ECHO OFF if  ...

  5. ASP.NET异常处理机制

    try{ //获取并使用资源,可能出现异常}catch(DivideByZeroException de){}catch(ArithmeticException ae){}catch(Exceptio ...

  6. LoadRunner脚本参数化之自动关联和手动关联

    一.关联的意义  1.关联的含义 关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的 ...

  7. 虚拟机centos7配置本地yum源

    在虚拟机中要使用yum命令,就要先配置一下yum源,下面就分享一下这个过程: 1. 挂载iso到vmware,首先得确保CD/DVD连接到镜像.可以这样操作 2. 执行下面的命令 # mkdir /m ...

  8. 百度地图marker点击任意一个当前的变化,其余的marker不变

    百度地图marker点击任意一个当前的变化,其余的marker不变 最近做的百度地图,遇到一个问题,就是在for循环里面执行marker的点击事件 没有可以比对的对象,每次点击marker的时候,i都 ...

  9. unity2D以最小的角度旋转到目标方向(y方向为角色的主方向)

    一.使用向量原理转换到目标方向 为了让角色的自身y转向目标方向,并且以最小角度旋转,要点是获得当前方向与目标方向的叉值,从而判断应该旋转的方向 float rotateSpeed; //相对目标位置运 ...

  10. codeforces 1042d//Petya and Array// Codeforces Round #510 (Div. 2)

    题意:给出一个数组,求其中和小于t的区间数. 先计算前缀和数组sum[i].对当前的sum[i],查询树状数组中有几个比(sum[i]-t)大的数,那么用sum[i]减它就是一个合法区间.再将当前的s ...