Vert.x 3和微服务

Wie*_*eki 21 architecture vert.x microservices

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

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

当扩展到多个微服务以支持完整的应用程序时,您最终会得到许多选择.对于哪种风格最终可以支持持续交付以及最大限度地减少升级停机时间的想法?

选项

  1. 运行多个Verticle可能是一个解决方案,都包含自己的路由,因此http处理包含在Verticle中.请求/响应可以由Verticle完全处理.这可能意味着每个Verticle都在它自己的tcp端口上运行.
  2. 使用路由器,您可以在单个端口上公开所有路径,并相应地处理它们.数据将由包含路由器的Verticle处理,可能将其传递给其他Verticle.然后,这开始看起来像一个更单一的方法.
  3. 运行包含服务的vert.x的单独实例(可能是它们的集群).这样可以更容易地使用持续交付,因为整个事情是独立的.
  4. 其他可能的选择?

部署

在部署方面,需要快速部署新服务,而不会降低整个应用程序.

  • 选项3.可以为此提供一种方法,但也可能导致开销,尤其是当每个Verticle中都有一个DB Verticle运行时.
  • 选项1.可能更容易,但是如何重新加载新的和更新的Verticle.

单独的微服务提供了一种有趣的开发方式,但在编排和部署方面提出了一些挑战.

有什么想法吗?

Ber*_*ver 13

让我们从术语开始.

  • A verticle是一个Java类,通常扩展AbstractVerticle并实现一个start(..)方法.Verticle可以公开一个或多个HTTP端点并发布一个或多个eventbus端点.
  • Verticle在Vert.x内部运行application(以前称为"模块").应用程序可以包含一个或多个Verticle.我通常以1:1的比例保持小而简单.
  • Vert.x应用程序在Vert.x内运行instance.您可以运行应用程序的多个实例以增加并行化.
  • Vert.x实例在Vert.x内运行container.容器是具有应用程序的一个或多个实例的运行进程.
  • Vert.x容器在JVM内部运行.

使用Vert.x构建微服务式应用程序时,通常需要小型独立逻辑工作单元,将其称为服务.理想情况下,这样的服务应该在自己的过程中运行,是独立的并且可以独立升级.将其映射到上面的术语:将服务构建为包含带有服务逻辑的单个Verticle的Vert.x应用程序.

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

使用Vert.x构建的Web应用程序通常由一个或多个Vert.x应用程序组成,这些应用程序通过事件总线与一个或多个公开(内部)事件总线端点的Vert.x应用程序公开REST端点.

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