【问题标题】:Web portal taking data from web service or database - architecture pattern从 Web 服务或数据库获取数据的 Web 门户 - 体系结构模式
【发布时间】:2012-11-17 14:15:55
【问题描述】:

我正在开发当前基于以下架构构建的项目:

1) 第一种解决方案

  • 具有基于 Entity Framework 5 的所有数据库逻辑 (DAL) 的项目
  • 负责向客户门户网站和智能手机应用程序提供数据的 WebAPI 项目

2) 第二种解决方案

  • 用作客户门户网站的 MVC4 项目

客户 Web 门户和 WebAPI 位于同一台服务器上。 WebAPI 直接访问数据库,而客户门户网站通过 WebAPI 访问它。选择此架构的原因是为了缩短开发时间,因为 Web Portal 和智能手机应用程序调用了 85% 的相同 Web 服务。但是,我非常担心这是多么好的性能架构。我认为客户门户网站应该直接访问数据库,这将是更有效的方式。

对此有什么想法吗?

【问题讨论】:

  • 直接访问数据库是什么意思?您是否仍想使用您的 DAL 库,只是不想使用 WebAPI,对吗?
  • 我基本上希望 Web Portal 以与 Web API 使用它相同的方式直接使用 DAL 库。

标签: c# asp.net-mvc-3 asp.net-web-api n-tier-architecture


【解决方案1】:

架构总是很棘手,它总是在开发速度、可维护性、性能和可扩展性等不同因素之间进行折衷。所以,你需要权衡所有的利弊。

通过 WebAPI 访问数据库

1 .肯定会在性能上引入一些开销。但是多少钱?假设通过额外的包装器 (WebAPI) 传递您的调用,每次调用将花费您大约 2-3 毫秒的额外时间,以及大约 200MB 的额外 RAM。我认为,这不是一个真正的问题,但您会更好地了解所有细节,这取决于您。

2 。该解决方案可以从使用缓存中获得一些好处。如果您将 IIS 配置为缓存对 WebAPI 的请求,那么:WebAPI 客户端和门户都会提高性能。

直接通过 DAL 访问数据库

1 .从理论上讲,您正在为您的数据库引入两个需要处理的入口点。如果您需要添加一些必须由 WebAPI 客户端和您的门户使用的逻辑,并且该逻辑是特定于 Web 的(例如,与用户会话相关的内容)怎么办?您不应该将其添加到 DAL,而是需要添加具有另一个库的另一个层,这将被两者使用:WebAPI 和您的门户。如果您唯一的访问点是 WebAPI,那么您可以只修改 WebAPI 来获得结果。

总结一下:

这些只是一些优点和缺点。但是,如果您的项目不是很大,如果它不打算承受很高的负载,那么我会考虑的唯一因素是开发成本。如果使用 WebAPI 作为单一入口点更快,那就去吧。

【讨论】:

  • 我主要担心 WebAPI 端的 IIS 线程。假设有 10.000 个用户正在访问门户,每个用户都将获得可用的 IIS 线程来处理请求。在这种情况下,WebAPI 会发生什么,考虑到它还必须为智能手机应用程序使用一些 IIS 线程,它是否能够以如此快的速度处理来自 Web Portal 的多个请求。
  • IIS 为每个请求创建一个单独的线程。但这里的限制因素是并发请求的数量。如果您每小时有 10,000 次点击,那么您将大约只有 3 个并发请求/秒(以及相应的 3 个线程)。但是,假设您有大量的请求。那么是的,您的 WebAPI 将无法处理所有客户端和门户的请求。对于 IIS 客户端和门户是平等的,它们将平等地收到拒绝响应。如果门户更重要,您可以在同一个 IIS 上创建另一个 WebAPI 实例,并将客户端和门户请求路由到不同的实例
  • 别忘了缓存。如果它适合您的情况,它可以极大地覆盖您
猜你喜欢
  • 2018-04-24
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多