【问题标题】:Python PHP SOA designPython PHP SOA 设计
【发布时间】: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 交互。

我们还需要将第三组模板用于应用程序的 Adob​​e AIR 组件。 该公司还计划发布该应用程序的移动和桌面版本,如果它变成 成功。

因此,我们无法在 python 层引入 HTML。 我们可以做的是用另一个 python 层(用 django 或其他东西)替换 PHP 层 处理模板。但是我们认为我们可以在 PHP 中更好地处理模板—— 因为它对模板非常有用。我们不会添加任何复杂的逻辑——只是 演示机制。

【问题讨论】:

  • 不是一个“缺陷”,但你能在前端不混合 Python 和 PHP 吗?有几个 Python 模板引擎具有比 PHP 更高的性能和安全记录,例如Jinja 2. 没有 PHP 将简化技术堆栈并使其更易于维护。
  • 所有基于 XML 的通信协议往往会增加膨胀和延迟 - 如果可能,请避免它们。
  • 我们不能放弃 PHP 层——原因请参阅更新的问题 :) 谢谢

标签: php python soa


【解决方案1】:

关于您的想法的一些想法:正如 Mikko 的评论所提到的,PHP 层似乎是多余的。目前尚不清楚它将实际实现什么功能,特别是在它在服务层之上提供的抽象方面。现代应用程序设计倾向于在 javascript+html 中实现 UI。由于您已经承诺通过 http 公开业务逻辑,它还必须已经完成所有输入验证和 auth/auth,因此 php 中间件将没有太多工作要做。

实际的 RESTful 服务并不规定它支持的输出,而是尽最大努力满足请求中的 Accept-Content-Type。至少在 Python 中,通常最容易支持 json。 Protobuf 还很年轻,所以除非你真的需要它提供的严格类型,否则我会远离它。不过,从自我描述的角度来看,XML 很有用,如果前端和后端是独立开发的,那么它可能是首选。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2012-05-16
    • 2012-09-24
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多