微服务架构师和层

时间:2016-04-19 11:18:52

标签: architecture microservices

让我们讨论一下微服务环境的架构。我们正在公司内部进行讨论,我想要一些反馈意见。我正在认真思考的是编排层(代码重复,更多动态部分更改api)。

选项一 - 使用业务流程图层:

webapp - >编排 - >服务 - >持久性

api - > api gw - >编排 - >服务 - >持久性

在这种情况下,不允许服务相互通信。业务流程层中的聚合服务

选项一 - 没有编排层:

webapp - >服务 - >持久性

api - > api gw - >服务 - >持久性

这里允许服务相互通信,这里存在聚合服务。

具体问题:

  • 结算属于哪里?
  • 您更喜欢哪种解决方案?优点/缺点。
  • 其他建议?

1 个答案:

答案 0 :(得分:2)

  

webapp - >编排 - > 服务 - >坚持

     

api - > api gw - >编排 - > 服务 - >坚持(强调我的)

我们可以备份一下吗?我想问一下这里使用的术语。

对我来说,上面的堆栈在SOA的上下文中没有多大意义。

您将服务夹在称为业务流程持久性之间。但是,在SOA设计中,所有上述元素都是创建单个服务所必需的。

但是你的例子中 持久性是什么?无论是什么,它似乎都在服务之外。那么服务如何保持数据? Web应用程序/ API似乎也在服务之外。那么服务如何在屏幕上显示它的数据呢?

如果你看一下SOA的原则,特别是第二个原则:

  

服务是autonomous

如果服务应该是自治的,那么服务需要负责persisting it's own data。该服务还需要承担责任,通过UI显示其内部状态。

  

我正在认真思考的是业务流程层

应该遵循这一点,服务也应该对内部国家如何与外部世界进行沟通,包括自身与其他服务之间的关系负责。

如果服务需要使用来自其他服务的数据,则消费者服务部门有责任获取该数据。如果服务的状态发生变化,则该服务有责任让外界了解状态变化。

Orchestration是一个concern,就像持久性,检测等一样,因此在SOA的上下文中最好以分布式,自治的方式实现,而不是作为中心化的方式实现。

所以,在回答你的问题时:

  

结算属于哪里?

Billing属于它自己的垂直服务堆栈,包括UI视图,持久性,编排,通信,部署和管理。

  

您更喜欢哪种解决方案?优点/缺点。

如上所述,我认为不应该在提出问题的层面做出选择。我认为无论哪种服务需要编排都应该对它负责。

  

其他建议?

如果您还没有看过,请查看this