SaaS代理模式

时间:2012-02-12 16:04:21

标签: design-patterns architecture saas

我今天早上正在为一个宠物项目设置一个新工具,并意识到每个SaaS工具都有一个特定的模式:发件人代理。

即。我有我的webapp,但它无法与数据库层交谈(当然也不应该),因此有一个代理在我的门控网络中运行,并发布到webapp。

但是有一种更好的方式我缺少

编辑:让我用一个例子更好地定义我的术语。 ServerDensity是我们使用的监控工具。对于我想要监控的每个专业设备,我编写了一个发送方代理(即一个通过HTTP发布SD更新的插件脚本),因为SD无法直接与我的数据库通信。

我意识到这个问题可以归结为RPC问题。

1 个答案:

答案 0 :(得分:2)

让我先说明你所做的前提:“ ......每个SaaS工具都有一个特定的模式:发件人代理”。我很乐意邀请​​您参考本声明的来源。根据我使用SaaS的经验,我从未听说过这种模式。

嗯,老实说,“发件人代理”听起来像“业务组件”或“服务器内核”一样广泛而模糊。

  

我有我的webapp,但它无法与数据库层通信(也没有   当然不应该)

你不是在这里比较苹果和苹果。 Webapp是,数据库是层。 Webapp层必须与数据库层对话。 Webapp可能具有不同的,并且webapp中的持久层将与数据库层进行通信。

  

...所以有一个代理人在我发布的门控网络中运行   到webapp。

这使得听起来像webapp是一个没有生命的雕像,代理人是一个雕塑家,在它周围跑来跑去扔大块的粘土。 Webapp正在接收来自客户端的请求,查询持久层(它可能是缓存)并发回响应。无论您使用哪种代理,都会将数据发布到持久性或排队存储,而不是webapp本身。

阅读图层与层级,它将帮助您更好地了解Web应用程序和SaaS模型:What's the difference between "Layers" and "Tiers"?

<强>更新

感谢您的澄清,它显着改变了问题。你在做什么听起来很合理。您在特定系统的约束下工作,您必须满足插件合同。如果合同声明必须是HTTP POST,那么这就是你必须做的事情。

有很多方法可以做到这一点。这里只是几个:

  • 当事件发生时,代理将事件推送到服务器
  • 如果代理可能会对服务器施加太多压力,代理会将事件推送到队列。然后,队列将被专用和受限制的进程耗尽,这些进程将读取您的数据库并将事件推送到服务器
  • 计划进程(守护程序)以特定间隔读取数据库并将更新推送到服务器