多租户架构中的自定义用户主题

时间:2017-04-29 07:24:38

标签: architecture

我正在构建一个包含以下单独组件的多租户Web应用程序:

  • 核心RESTful API(Spring Boot)
  • 管理员门户网站(Angular)
  • 前端网络用户界面(每个租户,技术/语言TBD将有所不同)

前端Web UI需要支持自定义用户主题。换句话说,用户可以创建自己的主题并将其上传到应用程序(通过管理门户),然后在呈现其前端Web UI时使用。

像Shopify这样的一个很好的例子 - 如果用户A和B访问他们的个人店面(即shopA.shopify.comshopB.shopify.com),他们的商店将使用他们各自的自定义主题进行渲染。但是,两个店面仍然使用相同的核心API进行交互(据我所知)。

目前,我对高级架构有这样的想法:

High-level architecture

在此示例中,核心API和管理UI可以作为单个实例托管,但每个租户都有自己的前端UI实例,以支持自定义主题。但是,如果可能的话,我真的想尽量避免使用单独的前端UI实例,因为我认为从可伸缩性的角度来看管理变得更加困难,并且可能会花费更多来托管。

我一直在探索以下替代方法:

  • 拥有1个本地存储所有主题的UI实例,并根据当前租户进行切换。我对此的关注是,我定位了大量用户,因此可能有1000个主题。
  • 将主题存储在中心位置(例如,类似于S3),并且每当向租户的前端发出请求时,抓取相关的主题文件。我对此的关注是在每个请求上检索主题的速度/带宽影响。我可以看一些缓存层来帮助减轻这个问题。
  • 通过使用一些UI实例(每个实例托管多个用户(即共享主机))来使用混合方法。这会在路由请求时增加一些轻微的复杂性。

问题:像Shopify等公司如何解决这个问题?

0 个答案:

没有答案