networking - 微服务扩展/插件架构

标签 networking design-patterns architecture microservices architectural-patterns

我们正在构建一个基于微服务的平台。该平台将提供许多将用于各种独立项目的基本功能。
我们需要提出这样一种架构,使我们能够扩展基本功能并与现有服务进行交互。主要任务是确保主要服务的代码保持不变,并且基于平台的自定义解决方案可以轻松复用。
我们正在考虑几种选择。例如,有一个服务“foo”提供了函数 foo1 和 foo2。为了扩展功能,我们可以创建一个独立的“foobar”服务,放在foo服务前面,接受API请求,执行自定义函数,然后将请求重定向到foo。它是一种中介服务,它充当特定项目和主平台特定功能实现的主要环节。这种方法的优势可以归因于完全独立于基本服务的代码库。而主要的缺点是实现的复杂性和需要对主要服务的功能进行极大的碎片化。
enter image description here
正在考虑的第二个选项类似于单体应用程序中经常使用的方法 - 钩子(Hook)系统,它允许您覆盖系统的行为。例如,您可以创建一个独立的服务来连接事件和订阅者。
这种方式比较灵活,但同时实现起来还是比较困难的。这种方法的主要缺点是同步阻塞网络调用。
enter image description here
我们正在考虑的第三个选项是构建微服务本身,这样可以向其中添加额外的模块,以便可以在构建阶段自定义服务。主要代码保持不变,但在流程内部,实现了已经提到的钩子(Hook)和事件方案(在单个服务的代码级别)。好处是易于实现。在缺点中,在涉及多个服务的情况下很难实现定制。
enter image description here
也许我们正在尝试发明一辆自行车,并且有很好的解决方案。如果您知道这样,或者您对解决此问题的可能方法有很好的想法,请分享。

最佳答案

我认为这个通用问题没有答案。第三种解决方案似乎很不错。您可以利用责任链或请求-响应管道范式来轻松实现开放/封闭原则。这应该确保您可以在不触及现有代码的情况下向 foo 服务添加/修改功能。
如果您正在寻找解决整个架构而不是单个微服务的问题,您可能需要查看事件驱动的微服务设计。
这种设计方法类似于您的选项 2,不同之处在于它使用消息代理和异步通信来让微服务进行通信。
有很多优点,比如更高的弹性和服务的解耦。

关于networking - 微服务扩展/插件架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62956789/

相关文章:

android - 将 Retrofit 与 RoboSpice 一起使用是否有意义?

c++ - 虚拟处理器和高级网络 linux 和 windows

C# - 流读取器问题

design-patterns - 您想在哪里捕捉异常,为什么?

database-design - Trello 如何如此快速地显示历史?

c# - 一个数据访问层服务于多个业务层?或不?

java - Android项目可以嵌套在另一个项目中吗

c - 发现网络上的设备

java - 实例化抽象类的模式?

java - 在 Java 中动态创建对象