【问题标题】:Handling dependencies in a Python micro service environment在 Python 微服务环境中处理依赖关系
【发布时间】:2016-03-16 03:03:11
【问题描述】:

背景:我想制作大量用 Python 编写的微服务(Django、Flask……暂时不重要)供 Intranet 使用。假设将有一个身份验证服务、一个通知服务(电子邮件和/或互联网通信器集成)和某种数据资源服务。 因此,用户通过身份验证(例如获取 JWT)然后点击数据服务来更改某些内容。该更改应触发对通知服务的调用以发送通知。
问题从如何处理开始,我是否应该考虑为我的服务做一种客户? 我现在想到的是制作 Python 包或简单地使用 git 子模块来处理它,如下所示:
拥有和端点data.service.local/api/v1/food 我想(我认为)制作一个“提供者”,让我可以轻松地使用该端点:

class DataServiceProvider(object):

    BASE_URL = settings.DATA_SERVICE_URL

    def create_food(self, name):
        return requests.post(BASE_URL + 'food', {'name': name})

我应该打扰吗?我的目标是让我的几十个其他服务达到这一点(尤其是通知服务),所以我想我应该这样做。但是在哪里存储这些提供程序?在另一个名为{service_name}-client 的存储库之外,并在需要使用它的任何其他服务中使用该包?

感谢任何建议。谢谢。

【问题讨论】:

    标签: python dependencies microservices


    【解决方案1】:

    好的,经过一些试验和失败后,我决定同时使用 git 子模块和 python 包。目录树如下所示:

    main (repo)
    ├── auth (repo)
    │   ├── auth-cleint (repo)
    │   │   └── setup.py
    │   └── requirements (contains an editable entry to ./auth-client)
    ├── notify (repo)
    │   ├── notify-client (repo)
    │   │   └── setup.py
    │   └── requirements (-e ./notify-client and git+auth-client)
    ├── docker-compose.yml
    └── data (repo)
        └── requirements (git+notify-client and git+auth-client)
    

    auth、notify、data 是独立的 git 存储库,它们作为子模块链接到主存储库下。他们的服务 Django 项目中的客户也是如此。我以可编辑模式在他们的服务中安装客户端只是为了让我的开发变得容易。一旦我开始 staging/prod,我将使用 git+ 链接。

    如果有人有兴趣深入研究,这在https://github.com/PyPila/amok(不是商业项目 - 用于学习)现在有效。

    此时有一个提示,我在使用pip 时必须使用已弃用的--process-dependency-links 标志,因为我的客户端包依赖于其他一些私有包。 pip 维护者将该标志设置为已弃用,但它会一直保留在那里,直到他们弄清楚如何解决那些“深度依赖”。

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2017-11-09
      • 2018-08-21
      • 1970-01-01
      • 2014-11-25
      • 2015-05-11
      • 2019-05-05
      • 2020-06-14
      • 2021-01-04
      相关资源
      最近更新 更多