微服务和“单点故障”概念

Mik*_*vis 5 architecture service design-patterns web-services microservices

我不完全理解的一个概念是单点故障。在我看来,每当你有多个服务,比如说ABC,涉及整个系统,那么如果其中任何一个服务关闭,整个系统就不能做任何有用的事情(如果系统在没有 的情况下也有用B,那么为什么B首先需要?)。

例如,假设我们有一个管道,它A发布一个被消费的事件B,然后B发布一条被消费的消息C,而这个数据流就是整个系统服务其目的的方式。

A ===> B ===> C
Run Code Online (Sandbox Code Playgroud)

也许C是处理信用卡信息的服务:如果没有钱进来,业务就不会真正运行!

由于这是一个消息传递系统,因此这些服务是“独立的”,即如果一个服务出现故障,也不会导致另一个服务出现故障。好的,但如果B出现故障,则C不会收到任何新消息,并且整个系统无法达到其目的。A那么,拥有单独的服务和B使用C一项服务有什么区别呢ABC

Tob*_*bin 0

将服务(“B”)视为平行道路或处理通道的集合。一旦这些道路按照设计(规范)建成,它们就会在那里运行。设计没有改变,所以处理也没有改变,就按照你说的做。然而,考虑一条道路发展出一个非设计故障——硬件故障。路面实际无法通行。交通无法流动,但幸运的是我们有很多平行的道路可以吸收这些交通!如果我们只有 1 条(宽)道路,则整条道路都已关闭以重新铺设路面,因此交通无法通行。

你可以更进一步。想象一下平行道路上的交通量正在增加,并且道路已满员。修建另一条单车道道路很容易。这并不多,但一旦建成,您就可以让它以最大容量运行。但地租是要钱的!因此,当交通量减少时,我们可以轻松地停用这条小路,而无需支付租金。

您可以更进一步 - 假设您提出了一条新的道路设计,因此您将其建造在现有道路旁边您可以允许车辆进入这条道路并测试其运行情况。如果您的设计中存在未知错误,部分流量可能会丢失。但大部分交通可以通过你现有的良好道路。现在我们要么改变设计,要么保留它并慢慢将每条小路改成新的设计。