如何在Azure服务结构中设计层

如何在Azure服务结构中设计层,azure,architecture,microservices,azure-service-fabric,Azure,Architecture,Microservices,Azure Service Fabric,我被指派考虑Azure服务结构的分层微服务体系结构。但我的经验主要是在单片架构上,我不能想出一个具体的解决方案 我现在的想法是 数据层-这是所有代码优先实体与DBContext一起驻留的地方 业务层-这是所有服务经理执行和实施业务逻辑的地方,即UserManager(IUserManager)、OrderManager(IOrderManager)、InvoiceManager(IInvoiceManager)等 WebAPI(自热内部服务结构)尽管此WebAPI位于服务结构内部,但除了接收请求

我被指派考虑Azure服务结构的分层微服务体系结构。但我的经验主要是在单片架构上,我不能想出一个具体的解决方案

我现在的想法是

数据层-这是所有代码优先实体与DBContext一起驻留的地方

业务层-这是所有服务经理执行和实施业务逻辑的地方,即UserManager(IUserManager)、OrderManager(IOrderManager)、InvoiceManager(IInvoiceManager)等

WebAPI(自热内部服务结构)尽管此WebAPI位于服务结构内部,但除了接收请求和调用服务结构下的相应服务之外,它什么都不做。WebAPI层还将在将调用传递给其他服务之前执行任何身份验证和授权(ASP.NET标识)

服务结构服务-用户服务、订单服务、发票服务。这些服务从WebAPI层和业务层(IUserManager、IOrderManager、IInvoiceManager)调用,以执行其操作

你认为这可以继续吗

但有一个理论问题,在阅读一些微服务体系结构资源时,我发现,所有这些资源都建议在服务内部具有业务逻辑,以便可以独立地扩展特定的服务。所以我认为,我违反了微服务的基本方面

我这样做是因为,客户要求在多个项目中使用此业务层,例如批处理作业(Azure Web作业)、内部员工后端仪表板(ASP.NET MVC)等。因此,如果我不保持业务层不变,我必须再次为Web作业和后端仪表板编写相同的业务逻辑,我觉得这不是一个好主意。因为业务逻辑的简单更改需要在多个地方更改代码

还有一个问题是,在这种情况下,我必须使用ACID事务的服务对服务通信。例如,在创建订单时,必须同时创建订单和发票。因此,在这种情况下,我考虑使用事件驱动编程,即订单服务将发出发票服务可以订阅的事件,以便在创建订单时创建发票。但复杂的是,如果Invoice服务无法创建Invoice,它可以无限地继续尝试创建Invoice(我认为这是一个坏主意),或者发出另一个事件到Order服务以订阅并回滚订单。这可能会引起很多混乱

此外,我必须提到,我们目前使用的是单一数据库

所以我的问题是

  • 你认为我的方法有什么问题?可以吗
  • 如果没有,请建议我一个更好的方法。您可以引导我找到一些资源,了解实现细节或概念细节
  • 注意:客户的要求是,他们可以根据需要扩展特定模块。例如,UserService可能不会经常使用,因为每天不会有很多注册或用户配置文件的更改,但OrderService可以扩展,因为每天都会有大量订单


    我很乐意学习。因为这是我第一次接触到设计微服务体系结构的机会。

    首先,为什么客户希望使用服务结构和微服务体系结构,而同时听起来好像解决方案还有其他部分(webjobs等)这将不是塔尔建筑的一部分,而是生活在它自己的生态系统中(但共享逻辑)?我认为,首先了解应该指导体系结构的底层需求对您是有好处的。最重要的是什么

    • 可伸缩性?灵活性
    • 开发和部署?可维护性
    • 基于自主微服务构建新解决方案的模块化能力
    这个名单还可以继续下去。在你明白这一点之前,进一步的设计是没有意义的,因为你不知道自己设计的目的是什么


    至于与webjobs共享业务逻辑,没有什么可以阻止您共享包含相同BL的代码包,它不一定是一个共享服务,也不意味着它必须以与其接口或持久性相关的相同方式进行打包。另一个要考虑的问题是,为什么在SF服务中可以建立类似的功能时,WebJooWebJooWorks:

    < P>首先,为什么客户想要使用服务架构和微服务架构,同时它听起来像解决方案的其他部分(WebJOB等)。这将不是塔尔建筑的一部分,而是生活在它自己的生态系统中(但共享逻辑)?我认为,首先了解应该指导体系结构的底层需求对您是有好处的。最重要的是什么

    • 可伸缩性?灵活性
    • 开发和部署?可维护性
    • 基于自主微服务构建新解决方案的模块化能力
    这个名单还可以继续下去。在你明白这一点之前,进一步的设计是没有意义的,因为你不知道自己设计的目的是什么


    至于与webjobs共享业务逻辑,没有什么可以阻止您共享包含相同BL的代码包,它不一定是一个共享服务,也不意味着它必须以与其接口或持久性相关的相同方式进行打包。另一个要考虑的问题是,为什么在SF服务中构建类似的功能时,你不运行WebJOB?< WebJobs >我是指计划的(CRON)作业,像每周工作/每周运行的任务来生成一些报告。客户目前仅使用单片架构,但在扩展方面存在严重问题。就像我说的