电子商务系统的性能评测与数据存取优化
1 前 言
Java 2企业版(J2EE)技术自从诞生以来,经过近几年的发展,已经成为建没电子商务系统的重要的技术方案。不象.NET,J2EE是开放的工业标准,由Sun公司领导的工作小组负责制定。这样就带来一个好处,软件厂家就町以根据该标准开发包括应用构件、开发工具和J2EE服务器以及其它相关的产品。目前,有超过30家软件厂家致力于J2EE软件的开发。由于他们开发的产品都基于同样的标准。而该标准是基于Java技术的,不仅保证了J2EE应用程序和操作系统是无关的,还保证用户开发的应用软件可以在不同厂家生产的中间件上运行。给用户带来了前所未有的选择自由性。当平台的功能已经标准化,人们关心的焦点转移到了J2EE服务器的性能和扩展性上。标准化的测试基准成为人们评测和选择J2EE中间件的基本工具,EcPerf是Sun公司和其他J2EE服务器厂家共同设计和开发的基准测试包。软件,一家可以用之测试和改进各自的J2EE应用服务器,各个厂家产品性能的提高直接给用户带来益处。而对于用户来讲,则可以使用该基准测试,来评价和选择不同厂家的产品。我们正是站在用户的角度,通过对Jboss应用服务器和MySQL数据库服务器进行测试。找出系统的性能瓶颈,进行针对性的优化,有效地扩展系统,EcPerf是实际应用的一个缩影,通过运行该测试,把炎踺的性能瓶颈找出来,通过数据存取优化,提高系统的吞吐量:最后,结合测试的经验,提出了J2EE电子商务系统数据存取优化的若干关键原则。
2 J2EE技术体系结构
J2EE技术是一个平台性的技术,为开发大型分布式的企业应用(包括电子商务系统)提供了基础服务。EJB技术规范是这个技术架构的核心,它定义了J2EE应用的基础关键模块,包括实体EJB、会话EJB和消息传递EJB以及必需的基础服务。J2EE平台使得用户只需要关心商业逻辑的实现,企业计算所需要的公共服务由平台来提供,这些服务包括缓存服务、连接缓冲池、机群管理、失败转移、负载均衡、名字服务等等。要建设一个具有高度扩展性的电子商务系统,这些服务足必需的。由于J2EE平台把基础服务和应甩逻辑清晰分开,中间件厂家致力于平台软件的开发和优化,用户只需要考虑商业逻辑的正确实现即可。
面对众多的基于J2EE技术架构的中间件,用户如何进行选择呢?厂家一般发布各自的测试结果,这些结果采用的测试基准和测试方法一般不一样,不同厂家的测试可能得出相互矛盾的结论。标准化的测试基准正是适应用户的需要而开发出来的,EcPerf正是这样的测试标准。用户可以使用该标准评测不同厂家的中间件,度量其性能、可靠性和扩展性,从而做出选择。
3 测试基准
EcPerf基准测试由技术规范和工具软件包构成。技术规范对基准测试进行了详细的描述,包括负载构成、测试运行过程、扩展准则、操作规范以及性能指标的测试等;而相关的工具软件包则提供运行测试和度量性能指标的源代码。EcPerf的开发得到了主要的J2EE厂商的支持,包括BEA、IBM、iPlanel、Oracle、sun、Borland以及IONA等。
EcPerf基于一个大型的分布式应用进行建模,设计者选择制造过程管理、供应链管理、定单和库存管理作为整个系统的基本功能框架。这是一个重量级的业务系统,需要一个强大的中间件平台的支持。整个系统需要用到众多的中间件服务,包括分布式事务处理、机群管理、负载均衡、超强容错、缓存管理、持久化管理(数据库操作)、数据库连接缓冲池管理等。
EcPerf数据模型包括四个商业领域的实体。分别是客户管理域(Customer)、制造过程管理域(Manufacturing)、供应链管理域(Supplier)、公司内部信息管理域(Corporation)等。客户管理域处理客户请求和进行其定单管理。制造过程管理域负责“及时”(Just In Time)制造的管理工作。供应链管理域则负责处理和供应商的外部交互事务。公司管理域负责管理包括客户、产品、供应商在内的基础信息。图1把各个管理域所管理的信息和主要事务以及各个管理域的关系表现了出来。
3.1 客户管理域
客户管理域的事务属于在线处理类事务(OLAP),主要的事务包括客户下新的定单、修改定单、查询某个定单的状态、或者查询某个客户的所有定单等。定单的来源包括一般客户和公司客户(分销企业),公司客户的定单称为大定单(Big Orders)。当系统接收到新的定单,需要通过公司管理域,查询客户的信用状况,根据用户是分销商、第一次客户还是老客户,来决定不同的折扣率。已经下的定单还可以进行修改,客户可以查看自己的定单,销售人员则可以查看所有客户的定单。
3.2 制造过程管理域
制造过程管理域管理企业的生产线活动。生产的成品称为部件(Widgets),由构件(Components)组装而成。部件和构件,统称为零件(Pans)。生产线的类型有两种,包括计划生产线(Planned Lines)和大定单生产线(Large Order Lines)。计划生产线按照事先规定的数量和生产速度,生产部件;而大定单生产线则根据客户的大定单来进行生产。具体的生产过程由工作单(Work Order)来进行驱动。工作单描述某种类型的部件的数量及其说明。计划生产线的作用,是模拟现实中的根据预测来进行生产的活动,而大定单生产线则模拟现实中的根据客户定单进行生产的情形。当工作单进入系统,系统查询BOM(Bill of Materials,是对生产某个部件需要什么构件以及数量的描述),并且从库存中凋出相应的构件。当部件在生产线上移动,数据库里的部件状态相应进行更新。当工作单完成,数据库的工作单状态随即改变,零件库存量相应做出更新。如果某种构件的库存用光了(可以设置库存警戒线),系统向供应发出购买定单。
3.3 供应链管理域
供应链管理域负责和供应商的交互事务。它负责根据所需要汀购的零部件、订购的数量、供应商的报价等信息,决定联系哪个供应商。供应链管理域随即向选定的供应商发送一个采购单(Purchase Order)。采购单包含采购的零部件类型和数量、收货地址、以及发货的截止时间等信息。当供应链管理域接收到相应的零部件后,则往制造管理域发送更新库存的消息,由之更新库存。
3.4 公司内部信息管理域
公司内部信息管理域负责管理客户、零件、供应商等信息。客户的信用信息,包括其信用额度等,保存在公司内部信息管理域的独立数据库里,通过这样的信息部署,保证了最大的信息安全。当客户下新定单的时候,系统需要检查其信用信息,这个请求来自客户管理域,发到公司内部信息管理域,由其处理,并返回结果。给客户的折扣信息也在这里进行计算。
通过以上的分析,各个管理域具有明确的管理职责,有些事务需要跨越多个管理域才可以完成,各个域之问的调用关系通过消息来驱动。系统有可能访问外部信息源,比如向供应商订购零部件等,这样的事务,不仅是跨越系统内各个管理域的、而且是跨越不同系统的事务。由此可见,EcPerf模拟了一个复杂的实际电子商务应用。
3.5 应用架构
与供应商的交互事务,使用Java Servlet技术来实现,称为Supplier Emulator,部署到不同的机器上。Supplier Emulator模拟系统向供应商发送零部件采购单,以及收到零部件的交互事务。Supplier Emulator从供应链管理域的Buye6es会话Bean接收定单,经过一定时间的定单处理(睡眠一段时间,时间的长度是定货到发货的平均时间),然后把订购的零部件发送给RreceiverSes会话Bean,图2描述了各个软件模块的关系。
工作负载由一个多线程Java程序(EcPerf Driver)来生成。EcPerf Driver可以在多个客户端机器上运行,模仿多用户的并发访问。数据的持久化通过EJB技术的实体Bean来实现,系统持两种持久化方法,包括BMP(Bean MaIlaged Persistency)和CMP(Container Managed Persistency)。
通过没置事务导入速率(Transaction In胁tion Rate),指定每秒钟负载牛成器生成的新定单数量,以及每秒种在制造管理域安排生产的工作单数量。性能以每分种执行的商业操作来进行表示Bbops/min(Benchmark Business Opemtions per Minute),分别对客户管理域和制造域每分钟完成的操作数量进行度量,然后加权汁算出来。
4 测试与优化
测试套件以J2EE技术(EJB)来实现,部署到测试系统上。测试系统的硬件和软件配置。
对J2EE电子商务系统进行优化,有不同的设计模式可以遵循。我们把讨论的重点放在数据的持久化、对象缓存、以及数据库连接的缓冲池管理等几个关键问题上,即对数据存取进行优化。