3层Web架构:单独机器上的图层是否有益?

时间:2009-10-06 13:58:21

标签: architecture coding-style

我正在努力的客户有一个标准,他们要求将新应用程序的数据层包装到Web服务中,并将机器与托管业务/表示层的位置分开。有人能告诉我这样做的好处是什么?在我看来,这会导致比解决更多的问题:

  • 导致更多的流量/ CPU时间 - 生成与直接连接到数据库相对的XML soap请求/响应
  • 难以调试 - 需要调试两个与一个
  • 相对的单独项目

我猜这可能是由于安全问题(演示机器暴露在互联网上,而数据层机器没有);但是,我看不出它比直接连接到数据库更安全:登录到数据库的帐户不应该具有比Web服务包装器更多的访问权限。

我错过了什么吗?

6 个答案:

答案 0 :(得分:3)

我认为背后的原因与将域和业务逻辑包装到存储过程中的原因相同。为在不同平台上运行的多个应用程序和客户端提供数据的安全访问,同时在数据层中执行数据完整性检查和其他规则。

这个想法实际上是有道理的,但实施理念并不完美。如果数据层占用大量流量,那么对数据进行序列化和反序列化将会在性能和设备要求方面产生巨大的成本。

答案 1 :(得分:2)

像许多建筑问题一样,它可以是一种平衡的行为。

将3层Web应用程序拆分为在不同的计算机上分别拥有每个层的一个好处是,您现在可以单独对应用程序的各个部分进行负载平衡。例如,您可以有3个Web服务器仅提供GUI,这个“集群”将连接到3个应用程序服务器的“集群”,所有这些都很好地负载平衡,并被视为Web服务器的单个“实例”。同样,与DAL(数据访问层)类似的情况。

以这种方式分离层还允许整个应用程序的层的某种程度的“分离”。这允许每层的设置不同(即可以使用不同的硬件或不同的操作系统等),只要界面保持一致,如果任何单独的层被改变,就不会有问题。

这总会对软件开发产生影响,因为DAL / BLL / UI现在将是单独的程序集(可能是单独编译的DLL或等效的)和真正独立的,而不仅仅是结构化将代码放入一个应用程序/项目中的单独中。

过去,我将Web应用程序的业务层作为Web服务公开,Web GUI完全是针对该服务编写的。这使得该公司可以将该产品作为托管的基于Web的解决方案销售,客户可以使用该解决方案同时销售与Web服务完全相同的产品,从而允许客户将产品的功能集成到他们自己的内部应用程序中(垂直市场)溶液)。

当然,这是平衡行为。将这些层分离到不同的机器上会给系统的整体架构带来一些复杂性。您正确地指出了一些潜在的问题,例如机器之间的流量,如果通信层位于同一台机器上,这些流量现在会增加一些不存在的开销。还有每层之间的数据编组,这也增加了开销。当然,对于Web服务,序列化和反序列化复杂对象会增加显着的开销并对性能产生负面影响,尤其是在流量非常大的情况下。

根据实际暴露给整个应用程序用户的内容,“较低”层的安全性可能需要也可能不需要。如果您只是公开Web GUI,则应将较低层配置为无法访问(除了通过Web服务器),但是,如果您要公开“业务层”以及Web GUI层,那么您将还有额外的负担来保护你申请的多个潜在攻击“表面”。

但最终,如果您知道自己不需要对各个层进行负载平衡,并且您知道自己不需要切换一个层,或者将业务逻辑与Web UI分开,它可能比它的价值更多的努力。

答案 2 :(得分:1)

我认为通过Web服务包装与数据层的通信是很奇怪的,我不建议这样做。

  1. 有一些已建立的标准可以访问数据库(我猜你的意思是指一个数据库,如果你谈论数据层),它也访问远程数据库(例如JDBC,ODBC,...)。因此,没有必要使用Web服务。

  2. 如果您使用网络服务,则会遇到大量新问题,例如:您必须处理的超时,消息完整性,消息安全性或可靠消息传递。这都是潜在的错误来源。

  3. Web服务在延迟和消息大小方面都有巨大的开销。为了获得快速的整体解决方案,必须粗略地使用Web服务。例如。网络服务必须是整个过程的前端,如注册学生(保持较低的消息交换次数),但不能保存学生的数据,然后将学习计划附加到学生的数据,然后追加针对学生数据等的一些费用的新账单(这些都是单独的消息交换,但在访问数据层时这也是一种常见的粒度)。

  4. 所以我真的会去与数据层进行JDBC / ODBC通信。在业务层和表示层或第三方应用程序(应用程序集成)之间,Web服务可能更有意义。

答案 3 :(得分:1)

除了具有良好定义的接口的模块化软件的通常优势之外,三层架构将独立地允许三层中的任何层升级或替换为需求或技术变化。您还可以使用许多前端服务器进行负载平衡。

例如,更改表示层中的操作系统只会影响用户界面代码。

查看银行业务,您的网络访问帐户信息仍然来自COBOL系统。

答案 4 :(得分:1)

是的,这是安全应用程序的常见模式。

  - Database Node
        | (database access protocol)
  - Data Access Layer/Business Logic Layer Node
        | (web services/RMI/CORBA/other protocol)
  - Presentation Layer Node     

通常,Web服务器在DMZ中公开,因此BLL / DAL需要放在另一台机器(节点)中。 Web服务用作“连接协议”。 Web服务很难打入DAL服务器,数据由另一个节点保护。使用Web服务时,表示层可以以自由格式(Java,.NET,Web客户端或桌面应用程序)实现。

答案 5 :(得分:0)

所以听起来你在一台服务器上有Web和Business逻辑,在第二台服务器上有数据访问代码。这是不寻常的,因为业务逻辑通常与网络服务器分开,并且在单独的服务器上与数据访问代码分开。这样做的好处是,您的所有代码逻辑(业务)都将使用您的数据访问代码存在于安全区域(而不是面向公众的Web服务器上)。然后,您现有的Web服务将向业务逻辑公开API,而不仅仅是数据访问代码。