我什么时候想创建多个垂直(假设我在无状态微服务中使用非阻塞数据库客户端)



假设

  • 我正在构建一个无状态的微服务,它公开了一些简单的API端点(例如,一个read-through缓存,将一个条目保存到数据库(
  • 我使用的是非阻塞数据库客户端,例如mysql或redis和
  • 我一直希望我的微服务通过HTTP相互通信(通过将EC2实例放在负载均衡器后面(

问题

  1. 我什么时候想使用1个以上的标准verticals(即,将整个微服务写为一个vertical,并部署n个实例(n=事件循环线程数((?。增加更多的垂直领域不会只增加序列化和上下文切换成本吗
  2. 比方说,我将微服务划分为多个标准垂直领域(无论出于何种原因(。部署每个实例的n个(n=num个事件循环线程(实例不会总是比部署不同比例的实例提供更好的性能。由于每个垂直线程只是一个地址上的侦听器,这意味着每个事件循环线程都可以处理各种消息,并且它们已经实现了负载平衡
  3. 我想什么时候在集群模式下运行我的应用程序?基于文档,我觉得只有当你有多个垂直领域时,集群模式才有意义,当你有集群的实际用例时,也有意义。例如,不同的EC2实例处理不同用户的请求,以帮助实现数据本地化(比如使用点火(

p.S.,如果您能回答上述问题之一,请提供帮助。

我一直希望我的微服务通过HTTP(通过将EC2实例放在负载均衡器后面(相互通信

如果你已经采用了这种过于复杂的方法,那么使用Vertx并没有多大意义。Vertx使用事件总线进行集群内通信,消除了对HTTP和LB的需求。

答案:

  1. 为什么要这样?如果垂直线之间没有通信,那么序列化开销应该发生在哪里?

  2. 如果你的垂直应用程序使用非阻塞调用(因此是多线程的(,你不会看到同一台机器上的1个或N个实例之间有任何区别。此外,如果您的vertical在某个端口上启动了一个(HTTP(服务器,那么所有实例都将在所有线程上共享该服务器(vertx在这里进行了一些神奇的重新路由(

  3. 集群模式是我在开头提到的。这是分发和扩展微服务的正确方式。

  1. 垂直线是构建代码的一种方式。所以,当你的主垂直线变得太大时,你可能会想要另一种类型的垂直线。有多大?这取决于你的喜好。我尽量把它们保持得很小,最多200 LOC左右,做一件事。

  2. 不一定。不同的垂直行业可以以不同的速度执行非常不同的任务。拥有所有这些实例的N个实例并不一定是坏的,而是多余的。

  3. 可能永远不会。集群模式是微服务之前的事情。使用它会增加另一个级别的复杂性(集群管理器,例如Hazelcast(,这也意味着你不能像精通多种语言一样。

相关内容

最新更新