在 Python 微服务环境中处理依赖关系
Handling dependencies in a Python micro service environment
背景:我想做很多用Python写的微服务(Django, Flask...暂时无所谓)供内网使用。假设将有一个身份验证服务、一个通知服务(电子邮件 and/or 互联网通信器集成)和某种数据资源服务。
因此,用户通过身份验证(例如获取 JWT)然后点击数据服务来更改某些内容。该更改应触发对通知服务的调用以发送通知。
问题从如何处理开始,我是否应该考虑为我的服务做一种客户?
我现在的想法是制作 Python 包或简单地使用 git 子模块来处理它,像这样:
拥有和端点 data.service.local/api/v1/food
我想(我认为)制作一个 'provider' 允许我以简单的方式使用该端点:
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
的存储库之外,并在需要使用它的任何其他服务中使用该包?
感谢任何建议。谢谢。
好的,经过一些尝试和失败后,我决定同时使用 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
维护者将该标志设置为已弃用,但它将保留在那里,直到他们找出解决这些问题的方法 'deep dependencies'.
背景:我想做很多用Python写的微服务(Django, Flask...暂时无所谓)供内网使用。假设将有一个身份验证服务、一个通知服务(电子邮件 and/or 互联网通信器集成)和某种数据资源服务。
因此,用户通过身份验证(例如获取 JWT)然后点击数据服务来更改某些内容。该更改应触发对通知服务的调用以发送通知。
问题从如何处理开始,我是否应该考虑为我的服务做一种客户?
我现在的想法是制作 Python 包或简单地使用 git 子模块来处理它,像这样:
拥有和端点 data.service.local/api/v1/food
我想(我认为)制作一个 'provider' 允许我以简单的方式使用该端点:
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
的存储库之外,并在需要使用它的任何其他服务中使用该包?
感谢任何建议。谢谢。
好的,经过一些尝试和失败后,我决定同时使用 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
维护者将该标志设置为已弃用,但它将保留在那里,直到他们找出解决这些问题的方法 'deep dependencies'.