Python PHP SOA设计

1 投票
1 回答
991 浏览
提问于 2025-04-16 21:42

我正在规划一个中等规模的应用程序,经过一些讨论和会议,我和我的同事们决定使用服务导向架构(SOA)来构建这个应用。以下是我们的简要计划……

我们将采用四层架构……

|-------- 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的机器,一台是用于实时协作的Tornado服务器,另一台则处理非实时的业务逻辑。
  • PHP将通过明确的RESTful接口与非实时的机器进行通信。
  • 实时协作的机器将直接与浏览器中的JavaScript客户端进行对话。

我有几个问题……

  • 你觉得这个设计有没有明显的缺陷?
  • 你推荐使用什么最好的传输方式进行RESTful通信——XML、JSON,还是protobuf(protobuf是谷歌使用的)?
  • 你认为在Python和PHP层之间使用缓存是个好主意吗?PHP不会直接与数据库通信——只会通过Python。
  • 还有其他需要指出的地方吗?

--- 更新 ---

虽然我不能透露这个应用的具体细节,但我想说这个应用本质上是高度协作的,涉及到很多在浏览器中编辑文本的工作。可以想象成类似于Google Docs,但又不完全一样。

PHP层很重要的原因是……

我们需要让Python层完全独立于HTML模板。这个层级甚至不应该知道我们在构建一个Web应用。这样做的原因是我们有多个模板。高级浏览器的HTML相对复杂,有很多控件、鼠标手势事件和AJAX交互。而老旧浏览器(如IE-6、7,FF-2、3等)的模板则简单得多,基本上是“只读”的——没有AJAX交互。

我们还需要为应用的Adobe AIR组件使用第三套模板。如果这个应用成功,公司还计划推出移动和桌面版本。

因此,我们不能在Python层引入HTML。我们可以考虑用另一个Python层(比如Django之类的)来处理模板,但我们认为在PHP中处理模板会更好——因为PHP在模板处理方面非常出色。我们不会添加任何复杂的逻辑——只处理展示的部分。

1 个回答

3

关于你的想法,我有几点看法:正如Mikko的评论提到的,PHP这一层似乎多余。现在不太清楚它到底能实现什么功能,特别是在它为服务层提供的抽象方面。现代应用设计越来越倾向于用JavaScript和HTML来实现用户界面。既然你已经决定通过HTTP来暴露业务逻辑,那么它也应该负责所有的输入验证和身份验证,所以PHP中间件的工作就不多了。

一个真正的RESTful服务并不限制它支持的输出格式,而是尽量满足请求中的Accept-Content-Type。至少在Python中,通常支持JSON是最简单的。Protobuf还比较年轻,所以除非你真的需要它提供的严格类型,不然我建议你不要用它。XML从自描述的角度来看是有用的,如果前端和后端是独立开发的,可能会更受欢迎。

撰写回答