其他分享
首页 > 其他分享> > 春季-如何将不同的“微服务”集成到交易中?

春季-如何将不同的“微服务”集成到交易中?

作者:互联网

我们正在构建一个新的基于Web的工业应用程序,最近几天困扰我们的一个问题是有关此体系结构上不同“微服务”之间的集成.

我在使用微服务时只花了一小笔钱,因为我们没有完全接受定义真正的微服务的概念.一个(也是我认为最大的区别)取决于这样一个事实,即我们在不同的模块上使用了相同的共享数据库(我称之为“微服务”).我们系统的某种逻辑视图可以绘制为:

                  ╔══════════════╗
                  ║    Client    ║ ══╗
                  ╚══════════════╝   ║ (2)
                                     ║
                                     ▼        
        ╔══════════════╗  (1) ╔══════════════╗
        ║  Serv. Reg.  ║ <==> ║  API Gatew.  ║
        ╚══════════════╝      ╚══════════════╝
            █       █   █████████████     (4)
           █         █              ████
╔══════════════╗  ╔══════════════╗  ╔══════════════╗
║   Module A   ║  ║   Module B   ║  ║   Module C   ║  <===== "Microservices"
╚══════════════╝  ╚══════════════╝  ╚══════════════╝
        ║║ (3)           ║║ (3)            ║║ (3)
        ║║               ║║                ║║
╔══════════════════════════════════════════════════╗
║                Database Server                   ║
╚══════════════════════════════════════════════════╝

我们已经弄清楚的一些事情:

>客户端(外部系统,前端应用程序)将使用发现/路由模式访问不同的后端模块.我们正在考虑将Netflix OSS Eureka和Zuul结合使用.服务(模块A,B,C)在服务注册模块上进行自身注册(4),并通过注册向API网关坐标(1)进行注册,以找到可完全满足请求的服务实例(2).
>所有不同的模块使用相同的数据库. (3)这更多是客户的请求,而不是架构决定.

我们(或我本人)遇到的问题是如何进行不同模块之间的通信.我已经阅读了很多不同的模式和反模式来执行此操作,并且几乎每个人都会通过RestTemplate或Feign或Ribbon这样的专门客户端来告知API集成.

由于某些原因,我倾向于不喜欢这种方法,主要是HTTP请求的同步和无状态性质. HTTP的无状态本质是我最大的问题,因为不同模块的服务层可以具有一些强大的绑定.例如,在模块A上启动的操作可能会对模块B和C产生影响,并且需要从“事务”的角度协调所有内容.我真的不认为HTTP是控制此的最佳方法!

我内心的Java EE部分大喊使用某种服务集成,例如EJB或RMI或最终不使用HTTP的任何东西.对我来说,将某个服务从模块A内的模块B连接起来,并确保它们一起参与交易会更加“自然”.

需要强调的另一件事是,数据库上最终的不一致之类的范例对于我们的客户来说还不够,因为它们正在处理某种严重的数据.因此,“我保证将尽我所能地处理数据”在这里不太适合.

提问时间:

与“微服务”打交道时,这种“服务集成”真的有用吗?还是“资源整合”胜过它?

例如,似乎Spring提供了Spring Integration来实现服务之间的消息传递,就像EJB这样的技术一样.这是整合这些服务的最佳方法吗?我想念什么吗?

PS:您可以将我的“微服务”称为“微石”,我们通常在这里使用它们的名字.

标签:spring-boot,spring-cloud,microservices,spring,spring-integration
来源: https://codeday.me/bug/20191024/1923535.html