Architecture Vert.x 3和微服务

Architecture Vert.x 3和微服务,architecture,vert.x,microservices,Architecture,Vert.x,Microservices,微服务作为一种软件体系结构风格正在获得越来越多的关注,它将更好地支持连续交付,为快速部署和分离关注点提供模型 Vert.x 3和Vert.x-Apex为构建微服务提供了一个有趣的模型。正如其中一个示例所示,一个简单的垂直体可以公开HTTP服务,因此可以使用REST服务。垂直绑定它自己的tcp端口 当扩展到多个微服务以支持一个完整的应用程序时,您最终会有很多选择。有没有想过什么样的风格可以最终支持连续交付,并最大限度地减少升级的停机时间 选择权 运行多个verticle可能是一个解决方案,所有这些

微服务作为一种软件体系结构风格正在获得越来越多的关注,它将更好地支持连续交付,为快速部署和分离关注点提供模型

Vert.x 3和Vert.x-Apex为构建微服务提供了一个有趣的模型。正如其中一个示例所示,一个简单的垂直体可以公开HTTP服务,因此可以使用REST服务。垂直绑定它自己的tcp端口

当扩展到多个微服务以支持一个完整的应用程序时,您最终会有很多选择。有没有想过什么样的风格可以最终支持连续交付,并最大限度地减少升级的停机时间

选择权
  • 运行多个verticle可能是一个解决方案,所有这些都包含自己的路由,因此http处理包含在verticle中。请求/响应完全可以由verticle处理。这可能意味着每个verticle都在它自己的tcp端口上运行
  • 使用路由器,您可以公开单个端口上的所有路径,并相应地处理它们。数据将由包含路由器的垂直体处理,可能会传递到其他垂直体。然后,这看起来像是一种更加单一的方法
  • 运行包含服务的vert.x的单独实例(可能会对它们进行群集)。这可以使连续交付更容易使用,因为整个过程是独立的
  • 其他可能的选择
  • 部署 在部署方面,需要快速部署新服务,而不会使整个应用程序停机

    • 备选案文3。可以提供一种方法,但也可能导致开销,特别是当每个垂直中都有一个DB垂直运行时
    • 备选案文1。可能会更容易,但是重新加载新的和更新的垂直条怎么样
    单独的微服务提供了一种有趣的开发方式,但在编排和部署方面存在一些挑战


    有什么想法吗?

    我认为对服务进行分区必须有可靠的可伸缩性理由,并且没有任何一刀切的方法来处理生命周期和解决这些服务相互交互时遇到的问题。无论是“垂直”还是其他什么东西在监听套接字,我都会认为限制端点/地址的数量会在这方面引起最少的麻烦。在任何情况下,负责将给定垂直链接与其套接字关联的代码实体都需要以某种方式将生命周期控件公开给某个编排框架。。。就像如果不是竖直的耳朵在听一样。

    让我们从术语开始

    • verticle
      是一个Java类,它通常扩展
      AbstractVerticle
      ,并实现start(..)方法。垂直链接可以公开一个或多个HTTP端点,并显示一个或多个
      eventbus
      端点
    • verticle在Vert.x
      应用程序中运行(以前称为“模块”)。一个应用程序可以包含一个或多个垂直线。我通常保持1:1的比例来保持事情的小而简单
    • Vert.x应用程序在Vert.x
      实例中运行。您可以运行一个应用程序的多个实例以提高并行性
    • Vert.x实例在Vert.x
      容器中运行。容器是具有一个或多个应用程序实例的正在运行的进程
    • Vert.x容器在JVM中运行
    当使用Vert.x构建microservices风格的应用程序时,通常需要小型独立的逻辑工作单元,称之为服务。理想情况下,这样的服务应该在自己的流程中运行,是自包含的,并且可以独立升级。将其映射到上面的术语:将服务构建为一个Vert.x应用程序,其中包含一个带有服务逻辑的Verticle

    Vert.x应用程序通过使用Hazelcast构建的分布式事件总线相互通信。这意味着在同一台服务器上,甚至在多台服务器上运行的多个JVM可以通过Vert.x eventbus相互通信

    使用Vert.x构建的web应用程序通常由一个或多个Vert.x应用程序组成,这些应用程序公开REST端点,并通过eventbus与一个或多个Vert.x应用程序公开(内部)eventbus端点进行通信


    回答您的问题:选项3是Vert.x设置中最常见的,并且最接近MicroService体系结构。您可以在这两个选项中进行选择:您可以使用REST端点运行一个应用程序,该端点处理所有HTTP调用并通过eventbus将请求处理委托给其他应用程序,或者为每个服务(或至少为最终用户提供功能的每个服务)提供自己的REST端点。后者的设置有点复杂,因为有多个HTTP端点可从前端连接,但它更具可扩展性,单点故障更少。

    Vert.x目前有许多用于创建微服务体系结构的官方模块,我认为,在你提出问题时,这一点并不存在

    这些是官方的:

    • Vert.x服务发现-发布、查找并绑定到任何类型的服务
    • 垂直x断路器-提供垂直x断路器模式的实现
    • Vert.x Config-提供一种可扩展的方式来配置Vert.x应用程序
    还有更多的官方模块派上了用场:

    • 使用Dropwizard的指标-从核心组件获取指标并发送到Dropwizard
    • 使用测微计的指标-从核心组件获取指标并发送到测微计
    • Vert.x运行状况检查提供了一种公开运行状况检查的简单方法
    • -支持Hazelcast、Zookeeper、Apache Ignite和Infinicast
    • -简单有效的方法