【问题标题】:Implementing a SOA in Django using celery使用 celery 在 Django 中实现 SOA
【发布时间】:2012-04-29 00:10:59
【问题描述】:

我想实现一个采用 SOA 设计的 Web 应用程序。我正在考虑将 celery 与 Django 结合使用来做到这一点。但我有一些问题:

  1. 这是为 Django 实现 SOA 设计的正确方法吗
  2. 假设这是要走的路,我将如何在 Django 框架内完成身份验证。具体来说,我希望身份验证与生产者和消费者模式分离。这样,可以使用 REST api(或任何相关的东西)来生成身份验证凭据,并且可以使用消费者(在 Django 框架内)来读取凭据并对其进行操作。

再次,我应该在 Django 中使用 Celery 执行上述操作吗?

【问题讨论】:

  • 似乎 Ruby 社区(特别是 Rails)更擅长构建和使用 SOA。我刚刚买了一本书,名为使用 Ruby 和 Rails 进行面向服务的设计,它将阐明如何在 Rails 中实现 SOA 范例。比起 Rails,我更喜欢 Python,所以我想用 Django 来完成同样的事情。所以我要看看这本书中提到的概念是否可以转化为 Django。我会在这里报告。但如果迫在眉睫,我会使用 Rails(我认为这也是一种非常漂亮的语言)。

标签: django celery django-celery


【解决方案1】:

消息队列(例如由 celery 代理的 rabbitmq)是处理 SOA 组件之间通信的完美方式。此外,如果您需要在服务之间不共享数据库的情况下进行实时通信,REST 基本上就是为此而生的。在 Django 之上实现 REST 服务有多种选择,其中 Tastypie 和 Django-Rest-Framework 是流行的选择。

关于在组件之间传递身份验证,Django 有几个选项。与流行的观点相反,Django 身份验证框架非常灵活,支持针对您可以为其编写后端的任何内容进行授权/身份验证。有关这方面的文档,请参阅 https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend

已经有很多这样的例子了:

至于发布身份验证,选项较少,但包括:

我强烈建议使用已经构建并测试过的提供程序包,而不是滚动您自己的包。实施 SSO 看似很棘手。

【讨论】:

    【解决方案2】:

    Django 并不是真正为 SOA 构建的。在身份验证的情况下,Django 有一个定义良好的身份验证框架,可以轻松地让您跨 Web、API 等重用它。

    一般来说,如果您想要灵活地定义自己的架构,Django 可能不适合您。您可能需要考虑更简约的东西,例如 web.py

    【讨论】:

    • 我知道 Django 内置了自己的身份验证模块,但如果可以在 DJango 中使用 celery,为什么不能使用 SOA 方法将这些进程分开?
    • 当然可以,但是如果您打算以这种方式处理问题,那么您并没有真正充分利用该框架。如果是这样的话,更轻量级的框架似乎更合适。
    猜你喜欢
    • 1970-01-01
    • 2013-04-13
    • 2018-06-11
    • 1970-01-01
    • 2011-03-19
    • 2011-05-11
    • 2011-06-19
    • 2020-03-24
    • 1970-01-01
    相关资源
    最近更新 更多