【发布时间】:2011-10-07 03:07:08
【问题描述】:
我正处于一个中等规模的应用程序的规划阶段——经过一些讨论和会议,我和我的大学已经得出结论,我们将在这个应用程序中使用 SOA。这是简要计划...
4 层架构..
|-------- database (NoSQL + SQL polyglot store) --------|
|-------- python for all the heavy business logic --------|
|-------- php would talk to python using SOA and render HTML --------|
|-------- front-end (html+css+js) --------|
- 我们将有两个 python 实例(2 台机器),一个将作为 tornado 服务器用于实时协作,另一个将服务于非实时业务逻辑。
- PHP 将通过定义良好的 RESTful 接口与非实时机器对话。
- 实时协作机将直接在浏览器中与JS客户端对话
我的问题是……
- 您是否发现设计中有任何直接的缺陷?
- 您推荐用于 RESTful 通信的最佳传输介质是什么——XML、JSON 或 protobuf(google 使用 protobuf)
- 您认为在 Python 和 PHP 层之间进行缓存是个好主意吗? PHP 不会进行任何直接的 DB 通信——只能通过 Python。
- 还有什么需要指出的吗?
--- 更新 ---
虽然我不能透露应用程序的具体细节,但我想告诉你,该应用程序是一个高度 本质上是协作的,并处理浏览器中的大量文本编辑。类似于 Google Docs 的东西——但不完全是。
PHP 层之所以重要是因为...
我们需要让 Python 层完全独立于 HTML 模板。那层不应该 甚至知道我们正在构建一个 Web 应用程序。 原因是我们有多个模板。高级浏览器的 html 相当复杂 有很多控件、鼠标手势事件和 ajax。 旧浏览器的模板(IE-6,7 FF-2,3等) 简单且“只读”——没有 ajax 交互。
我们还需要将第三组模板用于应用程序的 Adobe AIR 组件。 该公司还计划发布该应用程序的移动和桌面版本,如果它变成 成功。
因此,我们无法在 python 层引入 HTML。 我们可以做的是用另一个 python 层(用 django 或其他东西)替换 PHP 层 处理模板。但是我们认为我们可以在 PHP 中更好地处理模板—— 因为它对模板非常有用。我们不会添加任何复杂的逻辑——只是 演示机制。
【问题讨论】:
-
不是一个“缺陷”,但你能在前端不混合 Python 和 PHP 吗?有几个 Python 模板引擎具有比 PHP 更高的性能和安全记录,例如Jinja 2. 没有 PHP 将简化技术堆栈并使其更易于维护。
-
所有基于 XML 的通信协议往往会增加膨胀和延迟 - 如果可能,请避免它们。
-
我们不能放弃 PHP 层——原因请参阅更新的问题 :) 谢谢