Mik*_*vis 5 architecture service design-patterns web-services microservices
我不完全理解的一个概念是单点故障。在我看来,每当你有多个服务,比如说A
,B
和C
,涉及整个系统,那么如果其中任何一个服务关闭,整个系统就不能做任何有用的事情(如果系统在没有 的情况下也有用B
,那么为什么B
首先需要?)。
例如,假设我们有一个管道,它A
发布一个被消费的事件B
,然后B
发布一条被消费的消息C
,而这个数据流就是整个系统服务其目的的方式。
A ===> B ===> C
Run Code Online (Sandbox Code Playgroud)
也许C
是处理信用卡信息的服务:如果没有钱进来,业务就不会真正运行!
由于这是一个消息传递系统,因此这些服务是“独立的”,即如果一个服务出现故障,也不会导致另一个服务出现故障。好的,但如果B
出现故障,则C
不会收到任何新消息,并且整个系统无法达到其目的。A
那么,拥有单独的服务和B
使用C
一项服务有什么区别呢ABC
?
将服务(“B”)视为平行道路或处理通道的集合。一旦这些道路按照设计(规范)建成,它们就会在那里运行。设计没有改变,所以处理也没有改变,就按照你说的做。然而,考虑一条道路发展出一个非设计故障——硬件故障。路面实际无法通行。交通无法流动,但幸运的是我们有很多平行的道路可以吸收这些交通!如果我们只有 1 条(宽)道路,则整条道路都已关闭以重新铺设路面,因此交通无法通行。
你可以更进一步。想象一下平行道路上的交通量正在增加,并且道路已满员。修建另一条单车道道路很容易。这并不多,但一旦建成,您就可以让它以最大容量运行。但地租是要钱的!因此,当交通量减少时,我们可以轻松地停用这条小路,而无需支付租金。
您可以更进一步 - 假设您提出了一条新的道路设计,因此您将其建造在现有道路旁边。您可以允许车辆进入这条道路并测试其运行情况。如果您的设计中存在未知错误,部分流量可能会丢失。但大部分交通可以通过你现有的良好道路。现在我们要么改变设计,要么保留它并慢慢将每条小路改成新的设计。