自治应用程序的体系结构
2007-02-23 12:21:12 来源:WEB开发网Emissary 也可以为用户保存会话状态。一个典型的例子就是 ASP.NET Web 窗体,它在多次调用期间为用户保存购物车,从而允许用户向购物车中已有的商品添加商品,这些商品一直保存在购物车中,直到购买过程完成。
然而,fiefdom 并不信任 emissary,甚至当 emissary 必须作为 fiefdom 的一部分查看时也如此。通过 emissary 传递过来的任何请求都要对其安全性、完整性和正确性进行评估,就像对传入时没有 emissary 协助的请求进行评估那么仔细。保险公司对销售代理引进的保险应用程序所进行的处理正是这种情况。使用 emissary 更多的是为客户端的利益着想,而非 fiefdom。
这样应该如何在 fiefdom 和其 emissary 之间分配工作呢?应该这样,fiefdom 必须处理共享数据,这意味着必须对写操作进行串行化以便保护数据的完整性。相反,emissary 可以处理参考数据的本地只读副本和每用户数据。因此,emissary 可以忽略同步问题。在非军事区 (demilitarized zone),emissary 通常一次只处理一个客户端,而 fiefdom 通常驻留在受保护的 Intranet 内,而且必须始终对所有客户端可用。
使用 Web 窗体,emissary 事实上可以进行扩展。而扩展 fiefdom 就相当困难,因为它处理的是共享数据,而共享数据必须始终对所有客户端可用。
因此,如果能够将更多的工作分配给 emissary,从而降低 fiefdom 的负载,则应用程序的可扩展性就会显著提高。您可以通过周密设计来实现这一点。让我们来看一看 Amazon.com。当您浏览它们的站点,将书和其他商品放入购物车时,所有工作都可以由 emissary 完成。只有当您点击“Submit”按钮进行结算时,您才需要用到 fiefdom。
但是要做到这一点,您必须缜密设计系统:划清 fiefdom 和 emissary 的界限,并使用性能和扩展增强器(例如缓存对象)。此外,您设计 fiefdom 的服务界面所采用的方式也必须使得 emissary 和 fiefdom 之间的交互最小化。
更多精彩
赞助商链接