Web 应用程序中的 SOA 性能

SOA performance in a webapp

我正在为传统后端(假设管理所有内容的 Django 实例)和类似 LinkedIn 的 Web 应用程序的面向服务架构之间的决定而苦苦挣扎。我对 SOA 的意思是拥有一个完全独立的数据访问接口 - 比如说 Ruby + Sinatra - 查询数据库,一个独立的聊天应用程序 - Twisted - 通过其 API 使用,一个 Django web使用这些 API 来提供内容等的服务器

我可以看到将项目中的所有内容模块化并仅通过 APIs 访问的优势:可扩展性、测试等。但是,这不会破坏站点性能吗?我想所有模块都将通过 HTTP 请求进行通信,所以 这种结构不会给站点中的基本所有内容增加很多延迟 吗?有比 HTTP 更好的选择吗?

其次,关于开发的便利性,这真的会给我们的开发人员增加很多复杂性吗?特别是在第一阶段,直到我们获得 MVP。

编辑:我们是一个由两名开发人员和一名设计师组成的小团队,但我们没有截止日期,因此如果它能带来更多技术价值,我们可以处理一些额外的工作

简短回答,是的,SOA 肯定会用封装和可重用性来换取延迟。答案很长,这取决于(一如既往)你是怎么做的。

有多少延迟影响您的应用程序与您的服务的细粒度成正比。如果您提供非常细粒度的服务,则必须对 assemble 用户体验进行数百次顺序调用。如果您提供极其粗粒度的服务,您将无法从服务中获得任何可重用性;因为它们将与您的应用程序紧密耦合。

有 HTTP 的替代方案,但如果您要使用定制的东西,您需要问问自己,您到底为什么要使用服务?为什么不直接使用库,完全避免网络层?

从 API 开始肯定会增加项目的成本和复杂性。这必须通过 API 给你的灵活性来平衡。在这种情况下,您可能会从代码库的内部结构化 API 中获益,但只是将它们作为模块调用。或者构建库而不是独立的 APIs。

这在很大程度上取决于您的项目有多大。你是一个由 1-3 名开发人员组成的团队,正在努力获得你的 MVP 吗?或者你是一家拥有 20-100 名开发人员的企业,他们都需要想办法在不相互踩踏的情况下划分项目?