微服务作为一种软件架构风格正在获得关注,它将更好地支持持续交付,提供快速部署和关注点分离的模型。
Vert.x 3 和 Vert.x-Apex 为构建微服务提供了一个有趣的模型。如其中一个示例所示,一个简单的 Verticle 可以公开 HTTP 服务,因此可以使用 REST 服务。verticle 绑定了自己的 tcp 端口。
当扩展到多个微服务以支持完整的应用程序时,您最终会有很多选择。关于哪种风格最终可以支持持续交付并最大程度地减少升级停机时间的任何想法?
选项
- 运行多个 verticles 可能是一个解决方案,它们都包含自己的路由,因此 http 处理包含在 verticle 中。请求/响应可以完全由 Verticle 处理。这可能意味着每个 Verticle 在它自己的 tcp 端口上运行。
- 使用路由器,您可以在单个端口上公开所有路径,并相应地处理它们。数据将由包含路由器的 Verticle 处理,可能会将其传递给其他 Verticle。然后这开始看起来像一个更单一的方法。
- 运行包含服务的单独的 vert.x 实例(可能对它们进行集群)。这可以更容易地使用持续交付,因为整个事情是独立的。
- 其他可能的选择?
部署
在部署方面,需要快速部署新服务,而不会使整个应用程序瘫痪。
- 选项 3. 可以为此提供一种方法,但也可能导致开销,尤其是当每个 Verticle 中都有一个 DB Verticle 运行时。
- 选项 1. 可能更容易,但是重新加载新的和更新的 Verticle 怎么样。
单独的微服务提供了一种有趣的开发方式,但在编排和部署方面存在一些挑战。
有什么想法吗?