【问题标题】:Python Backend Design PatternsPython 后端设计模式
【发布时间】:2011-04-15 11:38:22
【问题描述】:

我现在正在开发一个用于实时和历史跟踪 Web 服务的大型后端系统。
我在 Python 方面经验丰富,并打算将它与 sqlalchemy (MySQL) 一起使用来开发后端。
我没有任何开发强大且可持续的后端系统的主要经验,我想知道你们是否可以向我指出一些有关后端设计模式的文档/书籍?我基本上需要通过实时查询不同的服务(通过 HTML / SOAP / JSON)将数据提供给数据库,并保留该数据的历史记录。

谢谢!

【问题讨论】:

    标签: python backend


    【解决方案1】:

    你能更准确地定义“后端”吗?通常,在 web 开发中,我遵循 MVC 结构,其中我的“前端”、html/css/js 和处理显示的代码与我的“后端”模型(业务对象和数据持久性;即数据库)。

    我喜欢 Django 的模型/视图/模板方法:

    http://docs.djangoproject.com/en/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names

    但是,您还没有真正定义“后端”的含义,因此很难就设计模式提供建议。您说您在 Python 方面经验丰富,您之前是否开发过数据库驱动的 Web 应用程序?

    更新

    根据您的评论,我无法提供太多帮助,因为我没有太多做这样的“后端”的经验。然而,看看你是如何从网络上获取资源的,你的延迟/吞吐量将会非常高。因此,为了提高整体效率,您将需要能够以相当高的并发性运行多个线程或进程的东西。我建议您查看此线程上的答案(并搜索类似的答案):

    Concurrent downloads - Python

    具体来说,我发现递归 Web 服务器的示例及其后面的示例可能是您解决方案的一个很好的开始:

    http://eventlet.net/doc/examples.html#recursive-web-crawler

    至于采用该想法,然后将其转变为稳健/持续的流程,这在很大程度上取决于您的平台以及您的错误处理能力。基本上:

    • 在循环中运行它并确保处理任何可能引发的错误
    • 有某种进程监控您的工作进程,以便在它挂起或死亡时杀死/重新启动它
    • 确保您有一个监控解决方案,以便在它停止工作时通知您(nagios 等)

    保持事物“健壮”的最佳方法之一是使它们尽可能简单(而不是简单化)。如果您所做的只是从网络中提取信息,以某种方式对其进行解析,然后将该信息存储在数据库中,那么请尽量保持过程简单。不要为了使其更健壮而增加不必要的复杂性。如果你最终得到一个 200 行的脚本来做你想做的事,那就太好了!

    【讨论】:

    • 感谢您的回复!我的系统由 3 个组成:前端、数据库和后端。数据由后端不断获取并插入到数据库中,数据正在由前端同时显示。所以后端是一个无限脚本,它从互联网上提取数据并将其写入数据库。我开发了写入数据库的 Python 脚本,但没有什么可以无限运行,也没有什么必须设计得非常好和健壮。谢谢!
    • @Raiders:不要在评论中发布这样的事实。请用相关信息更新问题。
    【解决方案2】:

    使用 Apache、Django 和 Piston。

    使用 REST 作为协议。

    尽可能少地编写代码。

    Django 模型、表单和管理界面。

    您的资源的活塞包装器。

    【讨论】:

    • 非常感谢!你能澄清一下 django 将如何在这里发挥作用吗?我过去用它来写实际的网站,但它有自己的数据模型,我需要使用 MySQL。这可能吗?关于活塞,那将是我系统中运行 API 的独立部分,对吗?
    • @Raiders:“它有自己的数据模型,我需要使用 MySQL”?我不明白这个问题。 Django 使用 MySQL 作为后端。 Piston 是 Django 的一部分——它支持对 Django 模型对象的 RESTful 访问。
    • 阅读更多,我现在明白了。但是我真的不知道如何使用 django 作为一个持续运行的后端框架——我需要我的系统实时运行 24/7。阅读有关 django 的信息,我看不到表单在我的系统中的作用,也不了解如何编写非请求服务 django 系统。再次感谢!
    • @Raiders:Apache + mod_wsgi 是你用来运行 24/7 的工具。 “实时”没有任何意义。 Django 表单用于输入验证。请阅读 Django 文档。
    • 感谢您的回复。我花了很多时间阅读这些框架,我认为我对如何处理问题有了更好的了解。我将使用 django 和 Apache 与 mod_wsgi,但我需要一些东西来连续运行任务。芹菜是这里的正确选择吗?此外,我还研究了 Piston,它只是为我的网站提供 API 的一种方式。太好了,因为我需要它,但我不知道如何包装我的“数据获取器”——也就是从网络获取数据的脚本。那部分会在哪里?
    猜你喜欢
    • 2016-10-10
    • 2010-10-11
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多