伪二元论导致单体和微服务的对立

         
banq 18-04-14

本文从单体和微服务这两个名词引申出二元论。二元论是一种非黑即白的对立思维,这种二分法会把现实问题扭曲。

当我们在学习微服务时,几乎总是会引入单体(巨石monolith)的概念。这里面存在一个伪装二分法(矛盾论):如果你用的不是微服务,那你就是在用单体;如果你没用单体,那么你一定在用微服务。

这种二分法困扰着每个初次接触微服务的人。关于单体的讨论几乎总是集中在这些问题上:难以拓展、难以部署、难以伸缩。

如果我们构建一个不是微服务的应用程序,但是没有这些问题,那么它们之间有什么区别?

重新定义微服务和单体

所有的问题在于,单体和微服务的二分法是一种虚伪的、假的二分法,是一种错误的二分法。这里不存在非黑即白的选择。我们可以通过改进我们对微服务的定义(在维基百科已经表明,对这个术语的含义是没有一致意见的),我们可以摆脱这种错误的二分法。

微服务新的定义:

微服务是一种设计重点聚焦于最小自治边界的服务。

单体:

单体是一种软件,这种软件的设计、信息模型和界面会将多个相互竞争的、且相互干扰的领域僵硬地拼凑成一个单一应用程序和数据模型。软件的用户和设计人员无法在具体业务边界、建模、数据信息设计或界面上达成共识。相互竞争的模型之间的耦合使得系统的未来变化变得很困难甚至无法变化。


从以上两个定义中会发现,在微服务和单体之间存在灰色地带,我们仍然可以建立一种不是争取最小自治边界的服务。我们可以用分布式组件构建单体。如果我们的微服务不能满足标准所定义的运营,业务和交付目标,那么我们的微服务也可能还是一种单体。

因此,当我们看到诸如“如何开始实现微服务”之类问题时,我们的答案是:Mu,Mu是日语中否定二分法的一种用语,因为你之所以问出这样问题,你的先验之中已经采取二分法或矛盾论,将微服务和单体变成非黑即白的对立两种选项,你的问题本身就有问题。

Mu的意思是“no thing、no class: not one, not zero, not yes, not no.”,当提出一个问题的语境对于回答这个问题变得太小时,这时就适合使用Mu。。当禅宗僧人被问到一只狗是否有佛性时,他说“Mu”,这意味着如果他回答了是与否中任何一种方式,他的回答都是不正确的。佛陀的本性不能通过是或否的问题来捕捉的。

Mu存在于自然科学中是证据的,二元论思想倾向于将自然界中Mu的发生想象为一种与上下文、语境和背景无关的事情,这是一种作弊手法,但Mu是通过所有科学研究发现的,自然界并不是这样作弊的,自然界的答案从来都不是不变的,不与上下文或场景或背景有关的。因此,二元论、矛盾论、对立论是一个极大的错误,一种不诚实的态度,是在自欺欺人的掩盖下无视大自然的Mu的答案。[...]

当你在被测试或考试时,如果对试题的回答不确定时,它意味着两件事之一:试题不是你认为的那样;或者你需要对试题的上下文的理解需要扩大。检查你的试题并重新研究这个问题。

不要扔掉那些Mu答案!它们与“是或否”答案一样重要。而且它们更重要。他们才是是帮助你真正成长成熟。

没有人想要一个单体架构,但是如果他们没有足够了解业务边界,也就无法清楚划分服务边界,那么他们就可能会得到一个单体系统。

The False Dichotomy of Monoliths and Microservices

[该贴被admin于2018-04-15 20:54修改过]

4