1 / 41

.NET vs. J2EE .NET 和 J2EE 应用在架构和性能上的比较

.NET vs. J2EE .NET 和 J2EE 应用在架构和性能上的比较. 曹严明 微软 ( 中国 ). 议程. 架构的讨论 .NET 和 J2EE Java Pet Store vs. .NET Pet Shop 概述 Nile 应用性能调整 SQL Server: WinDNA  .NET  数据库调 整  中间层调 整 , 输出缓存 Oracle: .NET to Oracle using OleDB vs. new Microsoft .NET Oracle provider Nile 应用性能比较

avital
Download Presentation

.NET vs. J2EE .NET 和 J2EE 应用在架构和性能上的比较

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. .NET vs. J2EE.NET 和 J2EE 应用在架构和性能上的比较 曹严明 微软(中国)

  2. 议程 • 架构的讨论 • .NET 和 J2EE • Java Pet Store vs. .NET Pet Shop 概述 • Nile 应用性能调整 • SQL Server: WinDNA  .NET  数据库调整 中间层调整, 输出缓存 • Oracle: .NET to Oracle using OleDB vs. new Microsoft .NET Oracle provider • Nile 应用性能比较 • .NET on SQL/Oracle vs. Java on SQL/Oracle • 企业级 .NET Pet Shop 2.0 的深入讨论 • 资源

  3. .NET 技术架构 Biztalk 编排服务 消息队列 企业服务 Biztalk 适配器 安全 … 组件 组件 组件 组件 .NET Framework 公共语言运行时 Windows

  4. J2EE 技术架构 JMS ebXML 安全 JCA JTA … 组件 组件 组件 组件 J2EE Framework Java虚拟机 任何平台

  5. WS-I 消息队列 编排服务 企业服务 Security ebXML 适配器 … 安全 JMS JTA JCA … .NET J2EE CLR JVM Windows Linux 技术架构整合

  6. Web 架构: J2EE vs .NET .NET J2EE 表示层 可运行于大多数主要应用及Web服务器 JSP Servlets Web 表单 Server 控件 Code-Behind ASP.NET IIS 状态: ASP.NET Session,.NET 数据缓存 状态: 封装于 EJB 中, 也可在 Web Sessions 中 .NET Assembly ADO.NET (可使用 COM+ 服务; 比如事务) J2SE/EE JDBC (事务使用 JTA) 业务逻辑层 JavaBeans EJBs CLR SQL Server Oracle DB/2, etc. SQL Server Oracle DB/2, etc. 支持大多数数据库 (通过 Type 4 驱动程序) 数据层

  7. EJB 与 .NET 组件比较 J2EE .NET Session Beans 无状态 有状态 .NET 类 无状态 传统的对象 无隐含的数据映射 编写你自己的数据访问代码 Entity Beans 永远有状态 .NET中 无等价类 对象等价于数据库记录 数据映射通过以下 4个方法: Create, Load, Store and Remove BMP = 这4个方法由你自己编写 CMP = container 提供这些方法 除了这4个方法再没有其它的数据访问

  8. Entity Bean Models • Transacted Entity Bean • Property true 意味着在每个事务的开始和结束都要读数据和写 数据 (即使数据没有变化) • Propery false 指仅在生成时读一次数据, 以后再也不读(即使数 据已陈旧) • Read-only Bean (BEA 特有的功能) • BEA 特有的功能以防止在状态无变化时不调 Store 方法 • BEA 亦有刷新的设置可允许数据按时间间隔刷新 • 只读的, 事务的 entity bean 行为类似于 .NET 中运用 DataReader 的类 (每次读, 重不写) • CMP Opt Tool 是 WebSphere 的优化 • 读取 bean 的源代码, 判断数据访问模式, 删除不必要的 Store 调用 • Option A, B and C caching 亦可规定 bean 的数据库访问是否 是排他的 • Option C意味着排他的数据访问, 所以 Store method 可以懒方 式调用

  9. Java Pet Store 是什么? • Java Pet Store 是 Sun J2EE 的主要示例应用 • 源代码: http://java.sun.com/j2ee/blueprints • 展示了 J2EE 企业应用编码的最佳实践 • 作为示例程序发布于 • IBM WebSphere 4.0 • Oracle Application Server 9i • Sun iPlanet • BEA WebLogic • 在JavaOne 2001活动中作为 J2EE 的主要示例应用广泛地强调

  10. 依照 SUN 的说法 Java Pet Store 是…. “一个展现如何最佳利用J2EE技术的完整的成熟的在线商店.” “…一个展示了J2EE技术基本使用方法的示例应用程序,同时也展现了系统设计的最佳实践方法.“

  11. .NET Pet Shop是什么? • Java Pet Store 在 .NET 架构上的实现 • 源代码: http://www.gotdotnet.com/team/compare • 实现了完全同样的功能 (v 1.1.2) • 以C#书写的完全分层的3层逻辑设计 • 展示 .NET Framework 的最佳编程实践 • 应用扩展以展示 .NET 对移动设备 (PDA, 手机) 的支持 • 应用扩展以展示 .NET 对创建和使用Web服务的支持

  12. Java Pet Store 与 .NET Pet Stop 比较 基于 Sun/Oracle 2002 年3月发布的最新版本 17500 代码量 (越少越好) 15000 14,273 12500 .NET Pet Shop 10000 J2EE Pet Store 7500 5,891 5,404 3,484 5000 1,881 2,566 2500 863 684 412 56 总代码行数 用户界面 中间层 数据层 配置

  13. Java Pet Store 与 .NET Pet Stop 比较 基于 Sun/Oracle 2002 年3月发布的最新版本 300 250 .NET Pet Shop 200 J2EE Pet Store 150 100 50 事务响应时间 (越短越好) 302 事务响应时间 (毫秒) 97 69 50 57 18 19 20 22 23 3,000 3,500 4,000 4,500 5,000 并发用户数

  14. Nile 性能测试 • Nile VB/COM+/ASP • Nile C# (Managed SQL Server Provider) • Database tuning for Nile C# (Index) • Database tuning for Nile VB/COM+/ASP • Output Caching • Nile C# Oracle (OLE DB Provider) • Nile C# Oracle (.NET Provider)

  15. Nile 性能测试结果

  16. .NET Data Provider for Oracle(数据基于 Nile 基准)

  17. Nile 基准 • 使用 eWeek 版本的 JSP/Nile 重复了2002春的 eWeek/PC Magazine 数据库基准 • BEA/JDBC 到 SQL Server 后端 • BEA/JDBC 到 Oracle 后端 • 比较于 • .NET 到 SQL Server 后端 (通过 .NET SQLClient 类) • .NET 到 Oracle后端 (通过 .NET OracleClient 类) • 因为 Ziff 没有公布它的测试脚本, 我们只好使用自己的 Benchmark Factory 测试脚本

  18. Ziff 测试报告… • BEA 到 mySQL 和 Oracle 后端性能最佳 • BEA 到 SQL Server后端性能最差 • 他们得出结论说如果中间层使用Java, SQL Server 来作后端是不可行的 • ASP.NET 到 SQL Server后端性能非常好 • 比 BEA到Oracle/mySQL后端大约好50%

  19. 我们发现… • BEA/JSP 应用程序 • Ziff 使用了批量语句来限制输出行数 (SQL Server) • “Set Rowcount 100 Select * from Products Set Rowcount 0” • 这个不寻常的编程方式使 SQL Server JDBC driver 进入一个性能很差的游标模拟状态 • 应使用 • “Select Top 100 * from Products” • 结果性能提高了一个数量级 • ASP.NET 应用程序 • 是对 JSP 代码的直接移置, 而非对.NET的最佳编程实践 • 不是很公平的比较, 应该有一个合适的ASP.NET 的实现 • 查询用了 Like clause , 而 JSP/BEA 应用程序用的是 exact match • 结果性能慢了很多, DB 利用率高了5倍

  20. Nile 基准测试结果Compaq ProLiant 4 x 550 MHz Server

  21. 关键结论 • 如果中间层使用Java, SQL Server 作后端是一个很好的选择 • BEA 与 SQL Server 比与 Oracle 性能要好 • 如果以 Oracle 作后端, 中间层使用 .NET是一个很好的选择 • .NET 访问 Oracle 后端同 COM+/Win DNA 访问 SQL Server 后端一样快 • .NET 访问 Oracle 后端比最新的 JDBC 访问 Oracle 后端快 100%多 (Oracle 9.2 drivers, BEA 7.0) • .NET 访问 SQL Server 后端仍然是最快的 • 比 BEA 7.0/JDBC/Oracle 快 220% 多 • 更快的数据访问意味着在相同的用户响应时间和 相同的并发用户数的要求下需要的服务器更少 • 运行同样的应用程序, .NET 比 Java 需要少得多的服务器

  22. 重写 Java Pet Store • 有人抱怨说: “从来没想把它当成一个基准….” • 请 Java 开发专家 (Middleware Corp.) 来重写 Sun 的 Java Pet Store • 设计完全自由, 只须满足以下几个要求: • 必须基于 J2EE • 必须是3层结构 • 必须100%的功能等价 • 增加了分布式事务处理 • 运用 EJB/ JTA 与 .NET/COM+ • 增加了基于 SOAP 的 Web 服务 • 在各种配置下作基准测试 • 请 Middleware Company 测试所有的实现并验证所有的结果 • .NET 在 Win2K 和 Windows .NET Server 平台 • J2EE 在 BEA WebLogic 7.x, IBM Websphere 4.x 平台 • Middleware Company 在 TheServerSide.com 网站上公布所有结果

  23. 迄今为止的结果 • 开发时间 • 新的 .NET 实现由2个开发人员在1周内完成 • 增加了功能, 极大地减少了代码量, 提高了性能 • 新的 J2EE 实现由2个开发人员在8周内完成 • 在负荷下的调整时间 • .NET 实现: 1天 • J2EE 实现: 9周, 每天12-18小时

  24. J2EE 调整和配置 • 须测试巨大的配置矩阵来找出“可接受的”配置 • JDKS • JDK 1.3 • JDK 1.4 • JRocket (couldn’t use with BEA native IO) • Oracle clients 及数据连接设置 • BEA Oracle drivers • Oracle non-XA and XA JDBC thick driver 9.2 • Oracle non-XA and XA JDBC thin driver 9.2 • Number of database connections/configurations • HTTP 服务器 • BEA 内置 (进程内, 速度快); IIS 还是 Apache? • Bean 的种类 • Stateful 还是 non-stateful; CMP 还是 BMP? • Read-only, transacted 还是 non-transacted

  25. J2EE调整和配置 • 巨大的配置矩阵 • Java 克隆的数目和种类 • 1, 2, 4, and 8, optimal numbers changes based on number of CPUs • Run clustered configuration or non-clustered configuration? • 输入/输出 • Native I/O 还是 non-native IO • 常驻内存的 bean 的数量 • 取舍于 缓存量与内存占用量 • 堆的大小 • 必须跟着克隆数目而变化 • 希望2代垃圾收集以尽可能慢的频率发生 • 操作系统 • Windows 2K 还是 Linux? • 处理器亲和 • 克隆共享 CPUs 还是每个克隆拥有自己的 CPU? • TCP/IP 注册表设置 • 需要调整避免在高负荷下垃圾收集过程中产生的 http 异常

  26. J2EE BEA 最终设置 • 采用 BMP 因为 CMP 性能太差 • BEA 7.0 on W2K 因为本地的 IO 支持, BEA in-process http listener • JDK 1.4 and Oracle 9.2 thin drivers • 使用几种不同的数据源类型, BEA 启动时产生300多个并发的 Oracle 数据连接 • 不同的数据源使用不同驱动程序; XA or non-XA depending on use; readonly or normal based on use • 尽可能使用 BEA “只读的”entity beans • BEA 特有的功能

  27. J2EE BEA 最终设置 • 没有采用 CPU 亲和 • 在高用户负载下, 在垃圾收集时 CPU 亲和不稳定 • 对每个CPU, 创建1个非管理的, 非集束的克隆, 这意味着8个BEA实例运行于一个8-CPU的单服务器配置 • 克隆之间没有故障转移或者其它智能 • 必须保持8个配置文件之间的一致 • 8个不同的HTML管理控制台来配置和监控应用程序 • 基于这个配置需要对系统架构作特殊的考虑 • 克隆之间不知道其它克隆的 bean 的状态 • 因为要付出很大的性能代价来设置 EJB 状态多路广播, 所以只好选择了这个设置

  28. .NET 调整和测试 • 建立 “cluster-safe”配置以利于向外扩展 • 运用 ASP.NET session 对象, ADO.NET DataReaders, Data Access Application Block (DAAB) for SQL Server • 在 W2K 平台运行于进程内 • 对静态的产品信息, 运用 .NET 驻内存数据缓存 • 花了大约一天时间调整各种设置, 最后决定了 .NET 的省缺配置 • 应用程序在高负荷下一直稳定地运行 • 两天的测试中无宕机, 无重启

  29. 迄今为止的结果

  30. 迄今为止的结果

  31. .NET 只需要1/16数量的并发的分离管理的应用程序服务器 (基于1个Java克隆分配一个CPU) 在网络场里, .NET 只需要一半数量的服务器 在这个响应时间, .NET 支持多一倍的并发用户数 迄今为止的结果

  32. Java Pet Store 与 .NET Pet Stop 比较 基于最新的企业版 .NET Pet Shop 和 J2EE Pet Store (by Middleware Co.) 17500 代码量 (越少越好) 15000 14,722 12500 .NET Pet Shop 10000 J2EE Pet Store 7500 6,829 7,295 5000 2,143 2500 1,021 875 197 30 401 217 总代码行数 用户界面 中间层 数据层 配置

  33. 许可证费用的比较8 CPU Compaq ProLiant • BEA 7.0 on W2K • $3995 (W2K with Internet Connector) • $80,000 (WebLogic Server 10K per CPU) • + 开发工具费用 • .NET • $3995 (W2K with Internet Connector) • ~$1,000 for Visual Studio

  34. 资源

  35. 基准和技术比较 • Http://www.gotdotnet.com/team/compare • 现在有 • Pet Store 1.5 代码, 白皮书, 基准 • Oracle 基准 VeriTest 审计结果 • Nile代码, 基准 • .NET 与 WebSphere Web 服务比较 • .NET 与 WebSphere 基准包 • 马上将有 • 完备的事务基准 (通过 Pet Store 2.0 企业级中间件基准) • Doculabs Web 服务比较和基准 • 更多的技术比较

  36. 问题?

  37. Open Source Java Pet Store • Created by Clinton Bergen • Hosted at:http://www.ibatis.com/jpetstore/jpetstore.html • Used JSPs/Servlets/Struts exclusively • Abandoned EJBs • Did not implement all functionality • No record pagination • No user profiling for favorites list and banner images • No distributed transaction • No Web Service

  38. .NET Pet Shop 2.0 2,143 Open Source JPetStore:What Open Source Community Says 7000 Lines of Code Required (Less is Better) 6000 5000 .NET Pet Shop 1.5 3873 4000 JPetStore 3484 3000 2000 1000 Total Lines of Code

  39. Open Source JPetStore:What Open Source Community Says • .NET version 1.5 is poor because • Uses stored procedures • Embeds HTML (image URLs) in database • Does not use MVC design pattern • Uses generated code (ASP.NET Web Forms), hard to maintain • .NET Software costs $ • Reality Check • .NET Pet Shop 2.0 uses no stored procs • URLs in database simply based on replicating Sun’s data schema, minor point and easy to change in .NET Pet Shop • .NET Pet Shop could just as easily use the MVC design pattern, developer has the choice • .NET Pet Shop is not based on codegen • JPetStore based on 7,000 lines of TLD generated STRUTS library code (not counted in line count) • .NET software costs are very low, and well worth it; few enterprise companies are using freeware software lacking major ISV backing for major projects

  40. Open Source JPetStore:What Open Source Community Says • Reality Check (cont) • Open source version missing lots of functionality (data paging, user profiles, etc., so code count not valid) • Open source version has no EJB use, they have completely abandoned most elements of J2EE • Open source version has never been benchmarked, and demo site has been taken down indefinitely “for maintenance” • Open Source author fails to mention that JPetStore uses Struts, a code library that includes 7,000 lines of code not counted in the line count: • Even so, .NET Pet Shop has 45% less code than open source version not counting Struts-generated code • Benchmark data/stress testing? • Stay tuned

  41. 如果您有任何问题,请加入微软中文新闻组继续讨论如果您有任何问题,请加入微软中文新闻组继续讨论 加入微软中文新闻组 http://www.microsoft.com/china/community

More Related