反对多次部署单体来模拟微服务的论点
Arguments against deploying a monolith multiple times to emulate microservices
我们的主要 API 是 GAE 上的单体节点应用程序 运行。
有少数端点很长 运行 且资源密集,可能导致整个 API 的性能下降。
我们一直在考虑将它们变成微服务,但时间紧迫,希望避免花费大量开发人员时间。
我想到了一种快速获得与微服务类似的好处的方法,但没有重新构建服务所需的工程开销,只需将应用程序部署两次作为不同的 GAE 服务(默认和次要),然后将NGINX 前面有一组静态规则,将较慢 url 的请求定向到辅助服务。
这样服务就可以独立扩展,如果辅助服务负载不足,它不会影响关键 API 的。
我能看到的反对这一点的唯一论点是它稍微占用更多资源,因为我们将部署整个代码库,而只使用它的一小部分,但这似乎是一个很小的代价,能够不必花费大量时间将这些部分提取到真正的微服务中。
谁能指出为什么这是个坏主意?
我实际上做了一点,因为对于几个端点,我需要 运行 我的主要服务作为最大的实例大小。
它确实有用,但我最终还是把它取下来了。有一些事情不那么美妙。
它最终变得有点混乱,因为我没有像我的主要服务那样经常对其进行更改(因此没有部署到它),所以它有时会出现像我的旧版本 util 函数这样的问题打了补丁,但没有意识到我的辅助服务被使用了,所以我没有在那里部署它,所以你得到了这些 dejavue 时刻。
由于我在入队时为多个任务指定了服务,因此也很容易意外 运行 云任务在错误的服务上。
您也可以使用 dispatch.yaml
进行路由
https://cloud.google.com/appengine/docs/standard/python3/reference/dispatch-yaml
我们的主要 API 是 GAE 上的单体节点应用程序 运行。
有少数端点很长 运行 且资源密集,可能导致整个 API 的性能下降。 我们一直在考虑将它们变成微服务,但时间紧迫,希望避免花费大量开发人员时间。
我想到了一种快速获得与微服务类似的好处的方法,但没有重新构建服务所需的工程开销,只需将应用程序部署两次作为不同的 GAE 服务(默认和次要),然后将NGINX 前面有一组静态规则,将较慢 url 的请求定向到辅助服务。
这样服务就可以独立扩展,如果辅助服务负载不足,它不会影响关键 API 的。
我能看到的反对这一点的唯一论点是它稍微占用更多资源,因为我们将部署整个代码库,而只使用它的一小部分,但这似乎是一个很小的代价,能够不必花费大量时间将这些部分提取到真正的微服务中。
谁能指出为什么这是个坏主意?
我实际上做了一点,因为对于几个端点,我需要 运行 我的主要服务作为最大的实例大小。
它确实有用,但我最终还是把它取下来了。有一些事情不那么美妙。
它最终变得有点混乱,因为我没有像我的主要服务那样经常对其进行更改(因此没有部署到它),所以它有时会出现像我的旧版本 util 函数这样的问题打了补丁,但没有意识到我的辅助服务被使用了,所以我没有在那里部署它,所以你得到了这些 dejavue 时刻。
由于我在入队时为多个任务指定了服务,因此也很容易意外 运行 云任务在错误的服务上。
您也可以使用 dispatch.yaml
进行路由
https://cloud.google.com/appengine/docs/standard/python3/reference/dispatch-yaml