load-balancing - 微服务和负载均衡器的区别?

标签 load-balancing microservices

我是微服务领域的新手,但了解有关负载平衡的基础知识。我最近读了一篇关于微服务的文章:Enough with the microservices .

其中提到微服务和负载均衡器都有集群/不同的 VM 用于部署许多应用程序副本,但在微服务的情况下,我们有一个单独的数据库,这与支持的负载均衡器形成对比一个单一的数据库。这是它们之间唯一的区别吗?

这是引用的文本:

"multiple copies of the same microservice can be deployed in order to achieve a form of scalability. However, most companies that adopt microservices too early will use the same storage subsystem (most often a database) to back all of their microservices. What that means is that you don’t really have horizontal scalability for your application, only for your service. If this is the scalability method you plan to use, why not just deploy more copies of your monolith behind a load balancer? You’ll accomplish the same goal with less complexity."

最佳答案

您不能将微服务与负载均衡器进行比较...您应该将其与单体架构或 SOA 架构进行比较。

在单体方法中,您主要只有一个数据库用于整个系统和一个单体应用程序作为您业务的单个项目。

monolithic 是单个单元,但是 SOA 是一种粗粒度方法,微服务是细粒度方法。在微服务架构中,您不是设计一个整体系统,而是围绕您的业务能力并基于您的领域和限界上下文设计不同的微服务。

每个微服务都可能有自己的数据库。例如订单微服务可能有mysql数据库,推荐微服务可能有Cassandra数据库,用户搜索微服务可能有Elasticsearch或SOLR数据库。

在微服务中,每个微服务可以基于两种不同的通信方式与另一个微服务通信:

  1. 同步(建议休息)
  2. 异步(通过 Kafka、RabbitMQ、ActiveMQ 或 NATS 等消息代理 等等)

在微服务架构中向上向下扩展比单体系统要容易得多,您甚至可以更改系统的一部分并独立重新部署它,而不会影响整个系统。

此外,微服务遵循任其崩溃模式,通过使用断路器等 EIP 模式,您可以让用户认为系统始终正常运行,并且基于 CAP 定理,您可以通过补偿一致性和根据 BASE 而不是 ACID

的最终一致性

对于负载平衡,Netflix 设计的Ribbon 客户端负载平衡是非常可行的方法。

您还可以使用 NginX、Docker Swarm 和 kubernetes 实现负载平衡。

简而言之,将微服务与负载均衡器进行比较没有什么可做的。

关于load-balancing - 微服务和负载均衡器的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44181863/

相关文章:

linux - linux内核是否为实时任务执行负载平衡或任务迁移?

node.js - 你可以使用 Hapi.JS 作为微服务框架吗?

java - 如何在 Java 中为套接字连接创建软件负载平衡器

postgresql - Pgpool 对某些更复杂的查询打印 "unable to parse query"

python - 在单个 docker 容器或连接到同一个数据库的两个容器中运行两个进程?

docker - 微服务中的服务发现与docker中的服务发现

apache-kafka - 微服务之间的通信 : Apache Kafka vs Hazelcast's Topic

java - 将所有微服务的 Swagger 集中在一个地方

https - 如何在HTTPS和负载平衡上获取用户ip地址(REMOTE_ADDR/HTTP_X_FORWARDED_FOR)

networking - 如何将网络请求分派(dispatch)到(地理上)最近的服务器