处理Python微服务环境中的依赖项

时间:2016-03-05 22:37:48

标签: python dependencies microservices

背景:我想用内部网使用大量用Python编写的微服务(Django,Flask ......现在无关紧要)。假设将有一个身份验证服务,一个通知服务(电子邮件和/或互联网通信器集成)和某种数据资源服务。 因此,用户通过auth(例如,获取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的存储库外部,并在需要使用它的任何其他服务中使用该包?

欣赏任何建议。谢谢。

1 个答案:

答案 0 :(得分:0)

好的,经过一些试验和失败,我决定使用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存储库,链接为主repo下的子模块。对于Django项目中的客户来说也是如此。我以可编辑模式在其服务中安装客户端只是为了简化我的开发。一旦我开始上演/推销,我将使用git +链接。

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

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