大规模和完全可扩展的网络应用架构

Large scale and full extensable web application architecture

我一直在阅读许多架构,例如 N-Layered、Onion、...。但是我正在设计一个大型系统,该系统由一些大型数据库运行并为另一个 applications/clients.

提供大量服务

另一方面,我们的系统必须设计得非常可扩展。我们系统中命名为模块或子系统的部分,拥有自己的模型、业务逻辑,并且可能拥有 UI 或服务。甚至有些模块没有任何 UI 也没有任何系统外服务,这些模块只是扩展了我们的系统。

我是设计师团队的一员,我正在为我们的系统考虑以下架构:

它是一个洋葱架构,但是数据库的实体将在每个模块中定义。每个模块将由一个单独的团队开发。我们之间没有依赖关系,但是我们的数据库是一样的!

我的顾虑如下:

当您说 "large" 时,我假设您说的是至少一百万行代码。假设这是正确的,你真的应该看看 SOA architecture 来分隔你的 "modules"。根据您使用的语言,有很多不错的 RESTful 架构非常适合公开数据库层服务。

不要做代码级依赖,或者让依赖潜入数据库层。强烈解耦它们,并使模块通过网络层相互通信。这使它们保持高度独立,并限制了任何一次更改的范围。

它还允许您同时在生产中拥有多个版本,从而允许应用程序生态系统独立发展。

如果您有独立的 UI,则尤其如此。要求所有利用核心应用程序的应用程序同时升级是后勤方面的噩梦。

我们已经使用这种方法很多年了,使用 Restlet 公开核心数据库级服务,并让其他服务和应用程序使用它们。它非常有效,并允许应用程序按照自己的时间表发展和部署。

它还允许独立重构单个数据库"modules"。