简介

森林管理是一个在你的数据库上自动生成管理面板的工具,然后可以进行定制。由于大多数开发人员和组织对他们的数据有正确的隐私和安全要求,我们必须建立我们的解决方案,以确保这些要求得到尊重,以便提供一个可行的服务。这就是为什么我们决定采用一个混合SaaS架构。
我们将混合SaaS解决方案定义为同时依靠SaaS部分和内部部署部分的软件。SaaS部分由供应商托管和管理,包括用户将通过他们的浏览器连接和互动的用户界面。内部(或自我托管)部分由用户管理和托管,并包括用户的数据和供应商提供的元素,以发送和接收相关数据到用户界面。
正如第一段所讨论的,这种架构的主要优点是,用户的数据永远不会被供应商看到,而是停留在用户的控制环境中。此外,用户将自动受益于供应商推出的更新,就像任何SaaS解决方案一样。
让我们以森林管理为例,详细介绍这种混合SaaS架构。
高水平的混合SaaS架构
在森林管理的案例中,整个架构由4个不同的组件组成,如下图所示。用户的数据库,管理后台,森林管理API服务器和森林管理UI服务器。

1.用户的数据库
用户数据库将是森林管理的主要数据源,用于生成管理面板,并为其提供数据。
2.森林管理后台
当用户安装森林管理时,他们在本地机器上生成一个node.js应用程序。它包括一个RESTful API,连接到他们的数据库。我们把这个应用程序称为管理后台。它为你的管理面板界面提供所有的数据。
它做什么。
- 它将客户端请求(来自最终用户的浏览器)翻译成对用户数据库的查询。
- 它还为森林管理API服务器提供建立用户界面所需的信息。这些信息包括表名,列名和类型,以及关系。
一个名为forestadmin-schema.json 的JSON文件在管理后台内携带这些元数据。
3.森林管理API服务器
森林管理API服务器存储信息以建立用户界面。这包括数据库结构(由管理后台发送)和用户定制的用户界面。
说得更技术一点,存储的信息包括。
- 显示和顺序 - 哪些表和列应该被显示或隐藏?列应该以什么顺序出现在 "表 "视图中?
- 收集设置(权限)--这个表中的记录是只读的吗?它们可以被删除吗?它们能以.csv文件的形式导出吗?
- 小工具偏好 - 每一列的UI组件应该被呈现出来(例如,一列包含图片尿液的文件查看器)。
- 图表配置 - 仪表板的图表是如何配置的,它们应该出现在哪个位置?
森林管理API服务器还管理森林管理应用程序的逻辑,如用户认证或计费。
4.森林管理用户界面服务器
森林管理用户界面服务器存储静态资产。这些包括HTML文档、CSS样式表和JS脚本文件。它提供构建显示数据的界面所需的UI组件。
现在你已经有了一个架构的高层次概述,让我们看看不同的组件是如何相互作用的。
不同组件之间的互动
让我们来看看在操作森林管理项目时,上述每个元素之间的http调用。即所做的调用。
- 终端用户的浏览器和森林管理服务器(包括用户界面和API服务器)之间。
- 终端用户的浏览器和管理后台之间。
- 管理后台和森林管理API服务器之间。
从用户的浏览器进行的调用
下面列出了终端用户从他们的浏览器(在app.forestadmin.com)访问管理面板时,由浏览器进行的调用。
对森林管理用户界面服务器的调用

需要向森林管理用户界面服务器发出呼叫,以获取静态资产,包括。
- HTML文档
- CSS样式表
- JS脚本
- 资产的地图
到森林管理API服务器

需要向森林管理API服务器发出调用,以检索有关信息。
- 登录的终端用户。
- 他们所登录的项目。
- 他们所登录的环境。
- 要显示的渲染的配置(即用户界面的配置)。
- 小工具的配置。
- 项目的帐单信息。
- UI配置上发生的任何更新。这些都是通过websockets完成的。
到管理后台

需要调用管理后台来检索/修改数据库中的数据,包括。
- 检索记录列表、列表计数或记录的详细信息的GET调用。
- PUT调用修改一个记录。
- POST调用创建一个新记录或触发一个自定义动作。
- 删除记录的DELETE调用。
从管理后台进行的调用
到数据库

当从浏览器调用到管理后台时,后者会将调用翻译成数据库查询。
对森林管理API服务器的调用

为了确保用户界面反映数据库的结构,管理后台需要将包含信息的调用从forestadmin-schema.json 到森林管理API服务器。这个文件是在每次重启管理后台服务器时发送的。
在管理后台的启动和之后的定期启动中,也会对森林管理API服务器进行调用以检索权限。这可以保护数据不被未经授权的用户通过curl 请求而访问。
额外的考虑
灵活性和可扩展性
由于解决方案的部分逻辑驻留在用户的系统中--在Forest Admin的例子中是管理后台,供应商可以允许用户定制和扩展其解决方案,就像他们对任何其他应用程序一样,通过开放源代码和记录其内部组件。
开发工作流程、CI/CD和托管
如果供应商开源其内部组件,它还允许用户在Git中管理该组件的代码,使用Docker或Kubernetes对后端应用进行容器化,并在用户认为合适的地方进行部署。
更新内容
有了这种混合SaaS架构,用户将受益于SaaS部分的持续更新--在Forest Admin的案例中是UI--只需刷新他们的浏览器标签。
对于内部部署的部分,缺点是更新确实需要用户在他们那边安装更新,并可能设置测试,以确保更新不会在他们的特定配置上引入倒退。
总结
从引入大型更新到管理用户的认证,再到当你不托管你的解决方案的一部分时优化性能,用这种混合SaaS架构构建森林管理,引入了他们自己的各种技术挑战,我们计划在未来的更详细的帖子中介绍这些。请联系我们@ForestAdmin,让我们知道你希望我们先介绍什么。