性能对比 这里可以写的对比:
String 与 StringBuilder 对比
2.0 中 TryParse 与 Parse 性能对比
2.0 中TSQL 写字符串处理函数与C#写字符串处理函数性能对比。
2.0 中泛型跟非泛型的性能比较
DataSet 缓存跟 Cache Application block 的比较
今天应该是个好日子,早上到国际会议中心路上,看到有7、8队结婚的婚车队伍。
早上首先听得是张炜老师的 VS.net2005 团队开发的课。虽然我很早就获得了VS.net Beta 1 Team System。由于至少需要三台机子才可以配置好Team System Beta 1(据说是因为各台服务器上用的.net FW2.0 版本不一样),我一直没配置Team System。今天的课一直很期待看到演示,演示没看到,看到演示的录像,不过收获也非常丰富。
Vs.net Team System 包括4大块:
架构师使用的(Team Architect) 、开发者用的(Team Developer)、测试人员用的(Team Test)、以及一些公共应用的(Team Foundation)。
Team Architect 这里,以前我接触的很少,VS.net TS 中,给我的感觉,这部分的主要功能就是设计图、以及设计方便的转换为代码(模型驱动开发)。
Team Developer 这里除了大家都知道的,VS.net IDE 更加强大外,还有两个很牛的功能:
1、静态代码分析,VS.net 可以分析你所写的代码,然后给出优化建议。
2、集成的单元测试,由于这部分是看的Vidio,不知道这里单元测试跟NUnit差别有多大,以后要好好比较一下。
Team Test 这里的测试,不象微软以前提供的测试软件那样,只是一个独立的软件,而是集成到VS.net中了,包括测试案例管理、压力测试等,这些都集成到VS.net Team System中了。
Team Foundation 这里是整个开发团队公用的基础部分,包括:进度管理、项目管理、Bug管理、每日构建、签入签出代码、报表分析、项目门户等等。这里很多东西是跟微软的其他产品相结合的。比如项目的门户网站就是利用的微软的SharePoint Portal Server。看来开心他们部门预感到了这一点,成立了Office技术专家俱乐部,昨天我专门跑去报名申请了。我对开心他们的先见之明佩服的五体投地。我的景仰犹如滔滔江水...........
这节课后,考虑到我正在做的下一代社区架构,需要用虚机本地搭配测试环境,就放弃了听架构的讲座,到第一会场听“用 Visual Server 2005 创建一个测试平台和测试实验室”的讲座。
这节课主要介绍了使用Visual Server 的一些经验,建议,技巧。感觉不错,至少我知道了我测试设计的下一代社区的时候,如何配置、分配虚机了。如何搭配一个测试环境。虽然这些东西以前自己心里或多或少有点概念,但系统的听一边,很有价值。
今天中午,我并没有主持BOF的任务,就到处逛逛,聊聊天,遇到了来北京工作的mvm大侠。伟人呀。^&^,上次系统的给我介绍SQL Server的集群,受益匪浅。
下午的课,两节课听得都是卢斌讲公共语言运行库。公共语言运行库2.0新特性这里,主要就是SQL 集成、支持64位、增加了更多的API、泛型等等内容。第二节的透视公共语言运行库,我晕倒,去年就有同样的内容。而且这个核心的东西。不会变化的。不过卢老师讲的很好的。
听完这节课后,就到处溜达溜达,今年我的TechED就这样结束了。
今天我的参与的TechED,不象去年,去年主要是听课、听课、再听课。今年除了听课,更多的是交流、聊天。相当一部分的收获是聊天中收获的。
早上仍然是一大早去的,跟孟子聊了一会天,然后就一起去展波的会场听“高效网站开发”。由于之前关注过ASP.net2.0,自我感觉这节课对自己来说,新东西不多。不过感觉ASP.net2.0 已经相当的成熟,大量的构建模块被微软创建,以后一般网站的开发,完全可以拿来就用。不用自己再费劲的写代码。一个分两页的主细表应用,就可以不写一行代码完成。
听完第一节课后,没有停留,直接奔BOF区,准备中午的BOF,刚好在BOF区碰到怡红公子和微软总部的肖老师。一边准备BOF,一边跟他们聊天。
中午的BOF,比昨天好多了,不过今天BOF一个不成功的地方是没有话筒。由于是在餐厅附近讨论问题,周围噪音很大,一般2圈人以后,外面的人很难听见里面在说啥了。限制了今天参与的人数。
12点半后,BOF就慢慢散了,只剩下几个人在聊天。这时候我没有上去听课,而是继续聊天,其间向肖老师请教了很多SQL Server 的问题,以及内存缓存数据的问题,受益匪浅。理解了很多架构的取舍。
下午三点多的时候,去第一会场听肖老师的“用SQL Server 2005 实现大型数据库系统”的讲座。听了这个讲座,SQL Server 2005 朝企业级大型数据库方向进步了很多这个感觉更加深刻。另外一些大型数据库下的设计、优化方法也受益匪浅。
然后就是听 Gurpreet Pall 关于架构的讲座。我觉得SOA中,跟 WEB Service 挂钩这么紧密,有点太超前了,毕竟企业内部现在很多应用,WEB Service 并不是首选。也许首选应该是 .net Remoting 吧。此外给我的感觉,以后 WEB Service 会发展的类似 .net Remoting 一样,远程服务器对象、支持事务等等也许以后会慢慢支持的更加好。
晚上没参加TechED的晚会,回来路上竟然碰到豆腐,豆腐正在为吃饭苦恼,到处找饭店。^&^
这两天由于忙BOF,上午最后一节,下午第一节一般都没法听,明天BOF不是我主持了,终于可以完整的听一天课了。^&^
明天中午仍然有三场BOF讨论,欢迎大家参加:
| 智能客户端设计与开发 |
董洵 |
2004-9-19 |
| 微软中文技术网站能给我们带来什么 |
王洪超 |
2004-9-19 |
| 网站安全和个人计算机的安全 |
王骏凯 |
2004-9-19 |
早上怕堵车,一大早没吃早餐就出来,谁知不堵车,不到8点就到了,然后就在外面晃悠,到处找卖早餐的地点,亚运村那边找个卖早餐的地方真不容易。好不容易吃完早餐来到会场,晕倒,会场发香蕉和雪饼。早知道不用那么费劲在外面找卖早餐的了。^&^
由于中午要跟董洵组织BOF,早上除了听了半节SQL Server 2005 Beta2的课外,其他都在瞎忙。
这半节课最大的收获就是讲师推荐用 Best Practices Analyzer Tool for Microsoft SQL Server 2000 1.0
http://www.microsoft.com/downloads/details.aspx?FamilyID=b352eb1f-d3ca-44ee-893e-9e07339c1f22&displaylang=en
检查自己SQL Server 是不是足够的被优化了。
再加上博客堂的MicroHelper.Net 以前也介绍过,
http://blog.joycode.com/microhelper/archive/2004/07/01/26265.aspx
http://blog.joycode.com/microhelper/archive/2004/03/02/14533.aspx
说的我心动,也准备下周,公司本地服务器上配置一个,看看CSDN 论坛的数据库有啥需要优化的地方。另外网上的文章看来跟实际的讲座交流效果还是差点,以前看了MicroHelper.Net的文章,也没有下决心试用一下,但是一听课了,反而很快下决心试用了。
另外这半节课听下来,SQL Server 2005 给我的感觉,朝企业级大型数据库方向进步了很多。比如可以不停数据库服务的情况下,修复某个扇区的错误,等这些细小的方面。
听了这半节课后,就去一楼准备SOA的BOF,今天的BOF真是失败,吃饭的地方是单行线,不允许返回,我们BOF的地点,用户只能过一次,出来又进不去。最后,今天的两场BOF合并到一起,由JGTM'2004 大侠给我们上了一堂SOA的课。受益非浅。
下午第一场去听孙大侠的DEV322 Visual C# 2005 介绍。通过看展波 VS.net 2005 IDE 功能演示,感觉VS.net IDE 在易用性和代码重构方面提供了非常方便的功能,这些小技巧对自己的工作会事半功倍。
然后孙大侠(我有个奇怪的想法,为啥不叫展大侠?七侠五义里面展大侠的名气够大吧)。重点讲解了C#2.0 的范型,受益非浅呀。
孙大侠课后,被拉去一个MVP的圆桌会议,等圆桌会议出来后,就快最后一节课了,最后一节课跑去给开心捧场。
打击一下开心,他那节课的内容都太泛泛而谈。感觉整节课除了开头放的那段Video外,没有吸引我的地方。
晚上是MVP的晚餐会,我们尊敬的孙老大获得微软亚洲社区特殊贡献奖。恭喜老大。遗憾的是老大不在我们这桌,等开始跨桌交流的时候,又找不到老大了。
另外,明天我主持的高性能网站设计、开发BOF仍然是中午吃饭时间,地点是一楼饭堂的旁边,欢迎大家来发表各自的高见。
我看很多人没准备参加《SOA与企业级软件系统架构》这一场BOF的讨论。其实这一场讨论不论对开发者,还是项目主管,IT从业人员 都是非常有价值的,下面整理一些SOA的基本信息。欢迎大家参加“SOA与企业级软件系统架构”这一场讨论。
下面摘抄自董洵8月2日发表在计算机世界上的文章:
拨开SOA的面纱
内容简介
SOA是英文Service-Oriented Architecture,即服务导向架构的缩写。这个词汇最近一两年频频出现在各种技术期刊上。但是一直以来对于SOA到底是什么一直没有明确的回答;SOA有什么特点?适合用于解决哪些问题?与其他的技术有什么区别与联系?Web Service和SOA又是什么关系?SOA的出现对于软件架构设计有什么影响?本文将就上面提到的这些问题,尝试根据作者自己的理解给出SOA的定义;总结出SOA特有的三个基本特征;然后以HTTP协议为例对这些特征进行解释;最后简要的说明SOA对今后软件架构设计可能带来的影响。
SOA定义
下面是作者给SOA下的一个定义:SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。从这个定义中我希望表达的前提有下面两点:
1)软件系统架构: SOA不是一种语言,也不是一种具体的技术而是一种软件系统架构,它尝试给出在特定环境下推荐采用的一种架构,从这个角度上来说,它更像一种模式(Pattern)。因此它与很多已有的软件技术比如面向对象技术,是互补的而非互斥的。它们分别面向不同的应用场景,用来满足不同的特定需求。
2)SOA的使用范围:需求决定同时也限制功能。SOA并不是包治百病的万灵单,它最主要的应用场合在于解决在Internet环境下的不同商业应用之间的业务集成问题。在下面我们会详细讨论Internet的各种特点是如何决定了SOA的特点,这里我们只需要先简单回顾一下Internet环境区别于Intranet环境的几个特点:a)大量异构系统并存,计算机硬件工作方式不同,操作系统不同、编程语言也不同;b)大量、频繁的数据传输仍然速度缓慢并且不稳定;c)版本升级无法完成,我们根本就无法知道互联网上有哪些机器直接或者间接的使用某个服务。
基于上面的前提,下面就让我们一起看一下SOA的基本特征。
SOA三大基本特征
独立的功能实体
在Internet这样松散的使用环境中,任何访问请求都有可能出错,因此任何企图通过Internet进行控制的结构都会面临严重的稳定性问题。SOA非常强调架构中提供服务的功能实体的完全独立自主的能力。传统的组件技术,如.NET Remoting, EJB,COM或者CORBA,都需要有一个宿主(Host或者Server)来存放和管理这些功能实体;当这些宿主运行结束时这些组件的寿命也随之结束。这样当宿主本身或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。
SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,比如事务处理(Transaction),消息队列(Message Queue),冗余部署(Redundant Deployment)和集群系统(Cluster)在SOA中都起到至关重要的作用。
大数据量低频率访问
对于.NET Remoting,EJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是通过函数调用的方式进行的,一个功能的完成往往需要通过客户端和服务器来回很多次函数调用才能完成。在Intranet的环境下,这些调用给系统的响应速度和稳定性带来的影响都可以忽略不计,但是在Internet环境下这些因素往往是决定整个系统是否能正常工作的一个关键决定因素。因此SOA系统推荐采用大数据量的方式一次性进行信息交换。
基于文本的消息传递
由于Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COM、CORBA这些传统的组件模型中,从服务器端传往客户端的是一个二进制编码的对象,在客户端通过调用这个对象的方法来完成某些功能;但是在Internet环境下,不同语言,不同平台对数据、甚至是一些基本数据类型定义不同,给不同的服务之间传递对象带来的很大困难。由于基于文本的消息本身是不包含任何处理逻辑和数据类型的,因此服务间只传递文本,对数据的处理依赖于接收端的方式可以帮忙绕过兼容性这个的大泥坑。
此外,对于一个服务来说,Internet与局域网最大的一个区别就是在Internet上的版本管理极其困难,传统软件采用的升级方式在这种松散的分布式环境中几乎无法进行。采用基于文本的消息传递方式,数据处理端可以只选择性的处理自己理解的那部分数据,而忽略其它的数据,从而得到的非常理想的兼容性。
HTTP协议:一个典型的SOA实现
每一项新技术都是在一些旧的技术基础上发展出来的。正如XML根本思想来自于在60年代就已经出现的早期标记性语言一样,SOA虽然这两年才出现,但是它所表达的观念应该说在网络这种分布式系统结构出现不久就已经广泛应用了。例如我们最熟悉的HTTP协议就是一个非常典型的SOA架构设计。HTTP协议的工作过程简单叙述如下:
1)客户端,通常是通过浏览器,向服务器端以文本的方式发送一个请求,索取一个Web页面;
2)服务器端接收到这个请求之后,根据请求的内容进行处理并且返回一个符合HTML语法的文本;
3)客户端接收到服务器端的响应文本后调用本地的程序,通常还是浏览器,把返回的HTML文本的内容展现出来。
下面来看一下HTTP协议如何满足了SOA的特点:
- 独立的功能实体:作为服务器端的Web服务器是绝对不会因为客户端的状况变化而改变的,它总是非常稳定的按照自己的内在逻辑运行,响应外部的请求,管理自己的资源和数据。这里一个非常好的例子就是Web服务器对缓存(Cache)的处理,很多Web服务器为了提高性能都或多或少的对数据进行缓存,但是缓存数据、刷新数据这些于客户端完全无关的操作完全由服务器端独立完成,完全不受客户端的影响。
- 大数据量低频率访问:对于一个HTTP请求来说,客户端与服务器之间访问的边界非常简单:就是一个请求,一个响应,没有任何其它的信息往返。无论客户端申请的网页上除了文字之外还有什么信息,对于客户端来说,它发出的请求只是简单的告诉Web服务器它所需要的网页的位置;至于为了生成这个网页,服务器端是否需要访问数据库,执行Servlet或者其它的CGI程序对客户端而言,都是完全透明的。
- 基于文本的消息传递:迄今为止兼容性最好的系统可能就是HTTP协议支撑的大部分的web应用了,我们可以在Windows平台下用IE查看互联网上一个Linux+Apache服务器上的由Perl脚本自动生成的网页。这里的关键就是所有内容都是以格式化的文本方式传递的,不管Perl脚本如何执行,只要它的输出是符合HTML规范的网页,就可以被客户端的浏览器解释。而由于不同的操作系统上对于相同的HTML的解释遵循相同的规范,因此不同操作系统下仍然能够看到一致的用户界面。
我们上面基本描述了SOA作为一种软件架构有哪些特点,下面让我们一起看看Web Service与SOA的关系。
SOA于Web Service
Web Service是就现在而言最适合实现SOA的一些技术的集合,事实上最近SOA的火爆在很大程度上归功于Web Service标准的成熟和应用的普及为广泛的实现SOA架构提供了基础。下面让我们看看Web Service中的各种协议是如何互相工作来满足SOA所需的特点的:
- 独立的功能实体:通过UDDI的目录查找,我们可以动态改变一个服务的提供方而无需影响客户端的应用程序配置。所有的访问都通过SOAP访问进行,只要WSDL接口封装良好,外界客户端是根本没有办法直接访问服务器端的数据的。
- 大数据量低频率访问:通过使用WSDL和基于文本(Literal)的SOAP请求,我们可以实现能一次性接收大量数据的接口。这里需要着重指出的是SOAP请求分文本方式和远程调用(RPC)两种方式,正如上文已经提到的,采用远程调用方式的SOAP请求并不符合这点要求。但是令人遗憾的是现有的大多数SOAP请求采用的仍然是远程调用(RPC)方式,在某些平台上,例如IBM WebSphere的早期版本,甚至没有提供文本方式的SOAP支持。
- 基于文本的消息传递:Web Service所有的通讯是通过SOAP进行的,而SOAP是基于XML的,不同版本之间可以使用不同的DTD或者XML Schema加以辨别和区分。因此只需要我们为不同的版本提供不同的处理就可以轻松实现版本控制的目标。
SOA对于软件架构设计的影响
无论您现在的系统是否牵涉到基于Internet的业务集成,采用SOA推荐的架构都对提高您系统的扩展性有很大帮助,下面是在系统中引入SOA后需要在软件架构方面做出的改变:
- 使用基于文本方式的SOAP调用,摆脱远程调用中出现的函数参数类型等与数据无关的信息,保证所有SOAP传递的都是有意义的商业数据。依赖于Schema,而不是类定义对这些数据进行解释。
- 传统的三层Web应用将可能变成四层结构:传统意义上的商业逻辑层将被进一步划分为存放每个会话(Session)信息的客户逻辑层和与状态无关Sateless的SOA层。
总结
本文根据作者自己对SOA的理解给出了SOA的定义,总结了SOA的三点特征并且简要的从程序员的角度指出SOA的出现对于软件架构设计的影响,希望本文能帮助您对SOA有较为深入的理解。
由于是一个讨论会,以下图表只有在需要的时候才会被展示。这些图表收集自一些微软公开的PPT。
IIS5与 IIS6 的工作原理对比图:
集群的两种方式:
页面缓存跟没有缓存的比较:
ASP.net 请求处理过程:
更多这方面的图表,请看以下连接:
http://blog.joycode.com/ghj/gallery/988.aspx
北京TechED的日常安排上,有一个同类人活动(Bird of Feathers)。
同类人(Bird of Feathers)
活动时间:9月17日-19日 11:30-13:00
“同类人”(BOF)活动,是结识与您有共同兴趣的与会者的好机会。活动将在会议每天的午餐时间进行,具体项目由TechEd 的参加者自己来推荐和协调,与会者可以挑选任何一个参加。比如,您可以提议一个与开发人员或是IT专家相关的议题,然后由大家通过投票来决定针对哪些话题来召开BOF会议。您的同行和发言的专家们都会参加这些非正式的活动,您能在互动的环境中与大家交流,从中获得大量信息。
这个BOF的活动最新安排计划如下:
| BOF |
主持人 |
时间 |
| SOA与企业级软件系统架构 |
董洵、郭红俊 |
2004-9-17 |
| 基于SQL Server的BI系统 |
金戈 |
2004-9-17 |
| 高性能网站的设计、部署和开发 |
郭红俊、董洵 |
2004-9-18 |
| Exchange Server性能优化及垃圾邮件抵抗 |
陈流浩 |
2004-9-18 |
| The new Visual C++2005 |
曾毅、董颖涛、Stan Lippman |
2004-9-18 |
| 智能客户端设计与开发 |
董洵 |
2004-9-19 |
| 微软中文技术网站能给我们带来什么 |
王洪超 |
2004-9-19 |
| 网站安全和个人计算机的安全 |
王骏凯 |
2004-9-19 |
地点:TechEd 1楼
时间:11:30 AM ~ 1:00 PM
注意:更具体安排以TechED当天会场安排为主。以上顺序可能会在会议当天根据情况作调整。欢迎参加讨论。
最后:强烈推荐我参与的其中两场:《高性能网站的设计、部署和开发》 《SOA与企业级软件系统架构》。
北京 TechED 上,计划中的一个BOF(同类人)的主题是:高性能网站设计、开发、部署,下面是我初步整理需要讨论的主题:
网站是信息展示平台,它的核心职责是把信息展示出来。当然,他也有部分信息收集的职责,但信息收集,一般不会占很大的比重。
网站的信息,可以保存在文件、数据库、内存中。最常见的就是保存在数据库中,这样,最常见的网站架构就是把数据库中的数据作一定加工处理,然后展现给用户,如下图所示:

我们要提高网站性能,就需要根据实际情况,对上面的每一个步骤进行优化。
优化主要包括:
1、减少通讯量,比如网站与客户端之间传递的Html更小;对ASP.net中来说,ViewState优化就是这方面一个典型。各个应用层之间也是要减少数据通讯量的。
2、减少对某个操作的请求数,比如做定时更新缓存;这里除了ASP.net涉及到的几种缓存概念外,还有静态文件技术,数据库冗余设计,都是这方面的典型。
3、虽然你做了上面很多的减少操作,但是仍然发现难以满足性能需求,这时候就要考虑作集群。通过增加服务器来提供性能,集群条件下,如何设计一个网站,是一个复杂的内容。
对 IIS6+ASP.net+数据库 的环境来说,你还需要了解以下信息:
4、理解ASP.net的工作原理,让实际的执行操作性能更高;
ASP.NET工作模型
HttpHandler和HttpModule的使用
缓存设计要素
Web Control开发
ASP.net 2.0 中如何做性能优化
5、理解IIS6的特性,知道如何配置,可以发挥更大的性能优势;
比如 Web garden 等信息。
6、数据库,针对你用的数据库,做优化。
数据库通用的一些概念,比如那种环境适合使用存储过程?等等。
以上是准备在这个BOF中讨论的内容,欢迎大家参加,如果有感兴趣的内容也可以提出来。
想详细看这篇文章,请到以下地址看:http://www.poynterextra.org/eyetrack2004/main.htm
下面摘抄文中的几个图:
人类的阅读视线变换:
The eyes most often fixated first in the upper left of the page, then hovered in that area before going left to right. Only after perusing the top portion of the page for some time did their eyes explore further down the page.
网页的价值分块:
Dominant headlines most often draw the eye first upon entering the page -- especially when they are in the upper left, and most often (but not always) when in the upper right.
注意:这只是,人们第一次去看某个页面的时候的视线图,如果某个人常去某个网页,他会形成自己的看法,会改变看这个网页的视线轨迹。那时候,上面的图可能就有点不太适用了。