【问题标题】:Best practice to create new Verticals in Vertx在 Vertx 中创建新垂直的最佳实践
【发布时间】:2016-12-29 09:37:29
【问题描述】:

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

  1. 可以有很多垂直行业吗?
  2. 例如,我创建了一个 HttpServer,其中有很多服务端点。我想制作不同的子路由并根据启用的功能(服务)设置它们。他们中的一些人会启动一个长期的流程,并会使用事件总线在系统中生成新的事件。这里最好的方法是什么?

例如,我可以将 vertx 作为参数传递到每个端点并使用它来创建路由器:

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

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

【问题讨论】:

    标签: java vert.x


    【解决方案1】:

    我的 10 美分:

    1. 是的,关键是可以有数千个顶点,因为据我了解,这个名字来自“粒子”这个词,整个想法是对 JVM 的一种 UNIX 哲学赌注。所以写每个粒子/verticle 做 1 件事并做好。使用文本流在粒子之间进行通信,因为这是一个通用接口。

    那么您的问题的答案是您拥有多少台服务器?每台服务器要启动多少个 JVM?您希望每个 JVM 使用什么内存?在内存限制内,每个 JVM 可以运行多少个 Verticle?您的消息大小有多大?网络带宽限制是多少?有多少消息正在通过您的系统?而且,事件总线可以处理这种流量吗?

    1. 然后就是verticles如何协同工作,这基本上就是事件总线。我认为您想要的是您的 HttpServer 将消息路由到事件总线,其中不同的 Verticle 被配置为侦听不同的“主题”(不同的文本流)。如果 1 个 Verticle 启动了一个长期过程,则它由总线上的事件触发,然后它将输出放回下一个 Verticle/响应 Verticle 的主题。

    同样,这取决于您拥有多少服务器/JVM,以及您是否拥有集群事件总线。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 2018-07-07
        相关资源
        最近更新 更多