|
沙发
楼主 |
发表于 2003-8-3 20:13:00
|
只看该作者
组件安全性:利用微软事务服务器(Microsoft Transaction Server ,MTS)可以大大的简化COM组件的管理,它同时还提供了一种管理组件安全性的方法。我们可以向产品职员提供一种通过图形界面来管理安全性的工具,但是用不着我们自己编制,只要支持MTS就行了。
主干(Legacy)安全性:在我们的设计过程中永远都需要考虑同后台系统的集成,尤其是涉及到安全性时。我们需要了解如何取得对主干(Legacy)系统的访问权限以及我们需要支持什么样的政策。Microsoft SNA Server提供了针对IBM系统的集成的安全性。在非IBM系统上,例如UNIX,我们需要自己编写网关程序。也许你愿意考虑开发一种处理你的电子商务系统和主干(Legacy)环境的COM组件。
商业到商业的安全性:虚拟仓库、执行定单和交易都依赖于公司间的安全连接。这种交易必须通过一种安全的方式进行,利用加密技术是很有前途的。虽然我们可以自己开发一种机制来实现这个目的,但是最方便的是利用那些公开出售的验证技术。作为站点服务器商业版的一个组成部分,商业交换管道(Commerce Interchange Pipeline,CIP)提供了对加密、S/MIME和和DCOM,以及一种返回收条的机制一样的支持,后者是一种轻量拒付方式。
你已经看到,关于安全性有很多要考虑的事情,这些考虑将明显的影响设计工作。我们必须明白我们想要达到哪种安全性级别,我们所用的不同系统的安全性级别以及它们如何影响我们的要求。我建议你从安全性开始你的项目设计,并且在设计系统中的其他部分之前完成这项工作。当你的计划向前推进时,这将会提供一个你可以返回的基础,并且你可以决定在你的安全构架中是否需要其他的系统服务和系统特性。
服务器选择
一旦你理解了核心设计,也处理完了你的规格,并且对安全性问题也有一个良好的认识,你就需要开始认真考虑要用来运行产品的工具了。这可以归结为一个基本问题:"我究竟需要多少台服务器?"这儿没有唯一的答案,如果我告诉你做决定所需要的知识对你更好一些。
如何计划你的服务器关系到你对规格的理解有多深刻。你理解得越深,准确预见你的需要的机会就越大。这儿有一些基本的提示,它们可以帮助你更好的开始:
开发用户原型:这将使你能弄清楚Web站点的用户在什么地方消耗他们的时间。如果你的用户在进行高级搜索上花去了80%的时间,你也许会愿意把这项功能转移到一台单独的服务器上。没有用户行为的精确数据,你是不可能在诸如此类的事情上做出决定的。
配置独立的数据库和Web硬件:甚至在最小的环境里,你也应该认真考虑把你的数据库和Web系统放置在不同的服务器上。Web服务器和数据库服务器,这二者要发挥最佳性能,需要做不同的调整,而其中的差异是非常巨大的。当你调好了一个,却会造成另一个的性能问题。同时,在数据库上,备份操作的负担通常只有在一台独立的服务器才能很好的解决。
把资源密集型的应用转移到独立服务器上:那些会造成密集的系统请求的操作应该转移到别的服务器上去。批处理、为目录编制索引、直接邮件操作,以及Web日志分析,这些都是应该仔细考虑是否要用专门的服务器来处理的内容。
可恢复性(Recoverability)
我们经常这样来考虑可恢复性,即在发生系统崩溃或者其他灾难的时候,我们怎样恢复系统。更常见的情况下,是指如何恢复系统服务。虽然这样说已经基本上够了,我们还是需要想得更广泛一点,应该把事务恢复也包括进去。
事务恢复是指把现在的系统状态恢复到前一个事务状态(耶!你在讲天书啊?)。让我们试试是否能把它变得更容易理解。电子商务系统的目的,就最基本和最原始的意义上来讲,是让我们可以买到东西。要达到这个目的,我们必须采取一种"要么全有,要么全无"的态度。也就是说,我们要么开展完整的交易,要么一点也不要做。为了方便,我们需要假设系统已经通过了ACID测试,我们在本系列的第二部分要讨论这种测试。
现在,我们只要相信我们已经有一种恢复事务的方法就行了。如果我们使用站点服务器商业版(Site Server, Commerce Edition)带有的定单处理管道(Order Processing Pipeline),我们就有一种简单而完整的办法来取消我们所做的改变或者确保改变已经生效。在我们需要和诸如CICS以及Oracle数据库这样的主干(Legacy)系统互动的时候,还需要提供对分布式事务的支持。使用Microsoft Transaction Server就能满足这个要求。
如果我们所要做的全部工作就是事务恢复,那就太好了,但是我们仍然要明白在发生系统崩溃、数据库崩溃或者类似的问题时如何恢复我们的平台。下面列出了我们将在电子商务系统中遇到的一些问题:
分布式恢复:多数电子商务系统是建筑在多层结构上的,这个结构包括表现层、商业层以及数据层。每一层都和不同的主干(Legacy)系统相互作用,并且需要有不同的恢复策略。
庞大的数据集合:视你的系统而言,你需要维护的数据库的规模从GB(230)到TB(240)不等。备份和重新装载这样的系统需要高速解决方案。请确认你已经参考过你的规格,知道有多少数据需要存储,以及这些数据是否必须总是处在能被访问的状态。如果需要数据来做商业报告,你也许愿意把这些信息转移到一台可以用来做分析的服务器上。这不仅将减少你的备份和重载时间,还将提高系统的性能。你还需要考虑巨大的数据集合对索引修复、DBCC操作以及维护工作的影响。Microsoft SQL Server? 7.0在这些领域提供了巨大的性能改善,你也许可以把它作为你的设计的一部分。
不间断的操作:提供一个能确保7x24操作的设计方案是一个很普通的要求。我发现这个要求的真正含义是你要能够处理那些妨碍实现真正的7x24操作的事情。稍后,我们将讨论如何使用Microsoft Message Queue (MSMQ)进行异步设计以使你能以最佳费效比来提供这项服务。
正如你看到的,事务和平台的恢复工作是一件很严肃的事情。每一项都将对你如何编写你的系统造成影响。你必须在转到开发阶段以前解决这个问题,因为这是你走向成功的关键。
关于性能
更大、更快、更强!这好像是今天各处的电子商务站点的"战争"口号。为数十万的用户服务、处理事务,以及增加商业收益的能力是任何电子平台成功的关键所在。在这一部分,我们的目标是了解如何设计一个能提供高性能、高可靠性以及高可伸缩性的系统。
均衡装载和可伸缩性
在我讲演的时候,我经常向听众提问,我问他们,有多少人设计过一个可以同时支持几百个用户的高性能、满负荷、具有容错能力的系统。在平均大约500个听众中,有200只手举了起来。然后我问有多少人设计过一个类似的系统但是能同时支持1000个用户呢?这回只有不到100个人举手。最后,我问有多少人能设计一个可以同时支持10000个或更多用户的系统时,一般都没有人举手。本节的内容将帮助你将来成为少数几个在我问到这个问题时能举起他们的手的听众中的一个。
虽然我也可以把均衡装载和可伸缩性分成两个独立的题目,但是我还是更愿意把它们作为一个整体来处理。因为这两个问题实质上是同一个问题:状态的维持。简而言之,维持状态与保持一致是一个意思。当我们维持状态时,我们就是有状态的,反之,我们就没有状态。如果在用户的每一个动作中间,你能记住他是谁以及他在做什么,你就是在维持状态。又比如,假设我登录到你的系统上,每一次我查询购物篮,你都可以把它显示给我而不需要采用cookie以及其他的客户端标志。你知道我的"用户代号"以及"购物篮代号"。这是因为你使用了Web服务器资源来跟踪我在做什么,我是谁,我去你站点上什么地方。维持状态受到我们的可伸缩性和均衡装载的限制。
均衡装载是通过循环DNS(域名解析),Cisco本地目录(Cisco Local Directors,属于硬件解决方案),或者是最近我特别推崇的,Microsoft Windows Load Balancing Server等方案实现的。这些解决方案把客户端请求引导到被称之为"农场"的最小繁忙(least-busy)服务器上。一个Web"农场"主要是指一系列提供不同服务的服务器。例如,我可以有三个独立的Web服务器,使用上边介绍的其中一种解决方案,把客户装载分布在这三台服务器上。从理论上讲,如果每一台服务器能同时处理100个客户的话,那么由三台服务器组成的Web"农场"就能同时处理300个客户。这样做的好处是对客户端来说,他们看到的都是同一个IP地址或者域名。
如果客户A的第一个请求经由路由器后到了Web服务器1上,而第二个请求却到了Web服务器2上,这样会发生什么情况呢?在一个状态化的环境中,这将会是一个麻烦。如果我们第一次连接到Web服务器上,那么我们需要总是返回到Web服务器1上,因为我们是在这台服务器上建立了我们的状态或者说是身份。在一个典型的Web"农场"中,服务器之间是没有通信的,因此只有在你第一次连接到这台服务器上以后,它才能知道你是谁。设想一个客户在每一次点击一个超链接时都被要求登录一次,仅仅是因为她被导向了一个不同的Web服务器。最低限度说来,这也是会让人感到沮丧的。
均衡装载一般通过下面这种方式来解决这个问题,它实现一个路由表,该表追踪客户的IP地址并且总是把客户导向同一台服务器,除非客户断开连接或者该会话到期。这样做的结果是你必须维持状态并且要利用珍贵的服务器资源。针对大流量的站点有一种更好的方式,这种方法是和Microsoft Site Server P&M捆绑在一起的,并且是一种无状态的方式。在我们详细讨论这个方案之前,首先让我们把注意力转到另一个领域--可伸缩性上来。 |
|