17

如何结合 Flask Web 应用程序和 Nameko 微服务?

让我给你一些背景。我有基于烧瓶(http://flask.pocoo.org)的网络应用程序。此应用程序可以执行长时间(5-10 分钟)的任务。我希望能够在该应用程序仍在运行时编写附加模块并将其附加到该应用程序。如果我在开发中停止应用程序是可以的,但我不能在生产中停止它。

我对 Nameko ( https://nameko.readthedocs.org ) 没有任何经验,这是解决我问题的最佳方法吗?如果是这样 - 我可以混合使用 Flask 应用程序和 Nameko 微服务吗?

4

4 回答 4

14

nameko 的贡献者在这里。我同意 nathancahill 的观点,即芹菜是一个不错的选择。

你绝对可以同时使用 nameko 和 Flask。这里有一个要点的简短示例:https ://gist.github.com/mattbennett/4250ce5d56b36a99bc39

但是,在该配置中,您覆盖了 Celery 的构建目标——即在请求-响应周期之外处理长时间运行的任务。坦率地说,gist 中的示例完全作为 nameko 应用程序(使用内置的 http 入口点)会更好地实现,因为它没有使用 Flask 为您提供的任何更高级的类似 Web 框架的功能。

如果您想编写微服务,即使是主要基于 HTTP 的微服务,nameko 也提供了一些不错的工具。如果您只想向现有的 web 应用程序添加异步处理,则 celery 将是标准选择。

于 2015-10-22T11:29:17.750 回答
1

在网关导入烧瓶中

from flask import Flask
app = Flask(__name__)

例子:

import json
from nameko.rpc import RpcProxy
from nameko.web.handlers import http
from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)
于 2020-02-28T16:51:27.193 回答
0

你听说过弹球吗?它是Pinterest自己的工作流程管理器。

它允许您安排和管理跨多台机器扩展的作业,并且它是在 Python 中的。

他们吹捧以下设计原则:

  • 简单:基于易于掌握的抽象
  • 可扩展:基于组件的方法
  • 透明:以可读格式存储的状态
  • 可靠:无状态计算组件
  • 可扩展:水平扩展
  • 管理员友好:可以在不中止工作流程的情况下进行升级
  • 功能丰富:自动重试、每个作业的电子邮件、运行时交替、优先级、溢出策略等。
于 2015-05-15T10:45:00.727 回答
0

问题是你为什么要结合flask和nameko?它们都是 API 构建框架(它们都有 http 请求处理端点)。

在我们的项目中,我们从烧瓶开始。在我们进入微服务的一小段时间里,我们将flask和nameko放在一个微服务中,但这种组合带来的问题多于收益。

我的提示:您应该将 flask 和 nameko 视为 API 提供者。如果你需要 nameko 做微服务,我建议转储烧瓶。主要问题是烧瓶为您提供了 nameko 无法提供的哪些功能?也许您可以通过第一方代码或其他(比烧瓶更容易结合)库来实现它。

于 2021-11-29T16:20:44.937 回答