在Vertx中创建新Verticals的最佳实践

时间:2016-12-29 09:37:30

标签: java vert.x

当我需要在Vertx中创建新的Verticals时,有没有人能给我最佳实践。我知道每个垂直可以远程部署并放入集群。但是,我仍然有一个问题如何设计我的应用程序。好吧,我的问题是:

  1. 是否可以拥有大量的垂直线?
  2. 例如我创建了一个HttpServer,其中有很多服务端点。我想根据启用的功能(服务)制作不同的子路由并进行设置。其中一些将启动长期流程,并将使用事件总线在系统中生成新事件。这里最好的方法是什么?
  3. 例如,我可以将vertx作为参数传递到每个端点,并使用它来创建路由器:

    getVertx().createHttpServer() .requestHandler(router::accept) .listen(Config.GetEVotePort(), startedEvent -> {..}); ... router.mountSubRouter("/api",HttpEndpoint.createHttpRoutes( getVertx(), in.getType()));

    或者我可以将每个新的端点服务创建为垂直而不是传递Vertx。我的问题主要是关于将vertx作为参数传递还是当我需要这样做时我应该实现新的Vertical?

2 个答案:

答案 0 :(得分:1)

我的10美分:

  1. 是的,关键是可能有成千上万的Verticle,因为我理解它的名字来自“粒子”这个词,整个想法是JVM上的一种UNIX哲学。所以写每个粒子/垂直做一件事并做得好。使用文本流在粒子之间进行通信,因为这是一个通用接口。
  2. 然后您的问题的答案是您有多少台服务器?你要为每台服务器启动多少个JVM?您希望每个JVM使用什么内存?在内存限制内,每个JVM可以运行多少个Verticle?你的邮件大小有多大?什么是网络带宽限制?你的系统有多少邮件?并且,事件总线可以处理此流量吗?

    1. 然后就是Verticle如何协同工作,这基本上就是事件总线。我认为你想要的是你的HttpServer将消息路由到事件总线,其中不同的Verticle被配置为侦听不同的“主题”(不同的文本流)。如果1个verticle启动一个长期过程,它由总线上的事件触发,那么它会将输出放回到下一个Verticle / response Verticle的主题上。
    2. 同样,这取决于您拥有多少台服务器/ JVM以及您是否拥有集群事件总线。

      所以1个verticle应该服务多个端点,例如使用路由器,是的,将来自HttpServer的给定请求与Route匹配,然后Route选择一个Handler,并且Handler在给定的Verticle中。

答案 1 :(得分:0)

拥有大量的Verticle是最好的。这样,您的应用程序就可以松散耦合,并且可以轻松实现负载均衡。例如,如果您的负载很高,您可能需要1-3个路由Verticle,但需要更多工作者Verticle。这样,您只需增加工人数量,而不会改变路由Verticle的数量。

我不建议将vertx作为参数传递。正如@rupweb已经建议的那样使用EventBus。将路由Verticle之间的消息传递给工作人员并返回。这是您正在寻找的最佳做法: http://vertx.io/docs/vertx-core/java/#event_bus