很多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主机性能优化的更多相关文章
-
BizTalk开发系列(三十八)微软BizTalk Server定价和许可[解读]
做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或 ...
-
BizTalk 开发系列(三十九) BizTalk Server 2009技术概览
BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...
-
BizTalk开发系列(三十)单向端口实现请求-响应
BizTalk本质上是异步的消息处理引擎.BizTalk的请求与响应模式是基于异步之上的同步消息交换.消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息.例如,客户端发送一个 ...
-
BizTalk开发系列(三) 单机环境下的BizTalk Server 2006 R2安装
大部分的开发环境都是在单机环境下进行的,今天整理了一下BizTalk Server 2006 R2在单机环境下的安装步骤. 1. 软件需求 在独立服务器中完整安装BizTalk Server 2006 ...
-
BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding
我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目标环境的选择选项.该选项可以在不同的环境下使用不同的绑定(BizTalk应用程序配置)感觉很高级. 其实这个非常的简单 ...
-
BizTalk开发系列(三十五) TCP/IP 适配器
BizTalk 的TCP/IP适配器最初是为英国的保健行业开发.该适配器属于BizTalk进程内适配器,将消息通过TCP/IP 套接字符串在BizTalk服务器与远程客户端间进行通讯. TCP/IP适 ...
-
BizTalk开发系列(三十四) Xpath
XPath 是在 XML 文档中查找信息的语言,在BizTalk的开发中应用非常广泛,当然你可以不必先学Xpath再去学BizTalk.但是如果对Xpath有一定了解的 话,在很多应用下会使你的开发更 ...
-
BizTalk开发系列(三十六) Orchestration单实例执行
BizTalk 是高效的消息处理引擎,采用多线程并发的方式来处理消息.也就是说当有消息被接收的时候就会产生一个新的消息处理实例.但有时目标系统可能并没有并发处理 的能力, 这时就需要在BizTalk中 ...
-
[原创]浅谈H5页面性能优化方法
[原创]浅谈H5页面性能优化方法 前阶段公司H5页面性能测试,其中测试时也发现了一些性能瓶颈问题,接下来我们在来谈谈H5页面性能优化,仅仅是一些常用H5页面性能优化措施,其实和Web页面性能优化思路大 ...
随机推荐
-
16个基本颜色关键字 Basic color keywords
16个基本颜色关键字 Basic color keywords Color Color Name HEX RGB black #000000 0,0,0 silver #C0C0C0 192, ...
-
如何在CentOS 7上安装EPEL源
EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentO ...
-
JqueryMobile 跳转问题
解决办法: 禁止ajxa跳转有两种情况: 1.禁止局部ajax跳转 2.禁止全局ajax跳转 对于#1只需要在a标签中添加下面的属性: data-ajax=“false” 有时我们要用正常的ht ...
-
数据块损坏(block corruption)
分为物理损坏和逻辑损坏-物理损坏一般指数据块头部不可以访问.数据块校验值不合法,数据块格式不再是oracle承认的格式-逻辑损坏一般是在物理性结构完整的情况下,数据的内容在含义上不正确,比如保存了不允 ...
-
thinkjs——修改where默认条件为or
写之前,得先反思一下:总以为大神同事的高冷是一种与大家格格不入的节奏,可是当自己遇到的问题难以解决的时候,大神同事一下子就让问题迎刃而解,于是,满眼的敬佩之感:一定努力当一个像大神同事一样的progr ...
-
NewRowNeeded和UserAddedRow事件以及RowsAdded的区别使用
NewRowNeeded事件当 VirtualMode 属性为 true 时,将在用户定位到 DataGridView 底部的新行时发生,适合给新行建立一些默认数据和按规则应该产生的数据,但此时不推荐 ...
-
向量旋转 UPC 2217
这道题目是13山东省省赛的签到题,题目大意是给等边三角形的两个定点,让求逆时针旋转之后的第三个点的坐标,原来不会向量的旋转,在网上找了找,找到一篇挺好的,直接贴过来. 向量的旋转 实际做题中我们可能会 ...
-
java_reflect_02
按我们所知道的.对于类中的method,constructor,field如果访问属性是private的情况下我们是访问不了的,但通过反射就可以做到 仔细分析api发现Method,Construct ...
-
CentOS配置samba服务
1.服务器需要下载samba.sambaclient包 yum install samba samba-client -y 2.客户端需要下载samba-client.cifs-utils包 yum ...
-
转《trackingjs人脸检测》
tracking.js是一个开源(BSD协议)的计算机视觉插件,在不同的浏览器中有不同的计算机视觉算法和技术,通过使用现代HTML5规范,能够实现实时颜色跟踪.人脸检测等功能,界面直观.核心文件轻量. ...