微服务之道:度量驱动开发
上QQ阅读APP看书,第一时间看更新

1.4 微服务之道

“道”原本起源于中国,而在编程世界中,我发现一本“坐而论道”的书是外国人写的《编程之道》(The Tao of Programming)。其实,“道”已经扎根于每个中国人的内心世界,道是真理,是过程,是事物的本质,是自然的规律。

1.4.1 软件之道

早期提到软件,都是相对于硬件设备来说的,一般分为系统软件和应用软件。软件一般是装在磁盘和光盘里的,用一个漂亮的盒子包装,买回家在计算机上安装好后就可以运行了。

SaaS(Software as a Service,软件即服务)是互联网发展的产物,它是对传统软件的一场革命。从此,软件开发不再是第二产业,而是第三产业了。软件可以不再是卖的,而是租的,或者是免费使用的(条件是用户对广告的容忍)。SaaS凭借易用性和经济性,在互联网上牢牢地占据了市场,“你能为我做多少,我就付给你多少”的商业模式颇受欢迎。SaaS也为程序员带来了机会,中国的程序员创业不再困难重重,只要提供的服务好,需要花费的成本够低,就一定会有用户愿意为你提供的优良服务买单。

SaaS生存之道的关键就是服务质量和成本控制。

❑ 服务质量:简单地说就是满足用户的需求,有七大要点——功能性、稳定性、可靠性、高性能、可维护性、可移植性、灵活性。

❑ 成本控制:成本控制的关键因素在于人,由于软件本身的硬件成本所占比重越来越低,运行软件的服务器、处理器、存储器的价格越来越低,而最重要的软件开发成本是人力,时间成本多取决于软件开发人员。

所以,软件开发一定要以人为本,发挥人的主观能动性,才能提高软件开发的速度和质量,从而满足开发者自身和客户的需求。然而面对纷繁复杂的用户需求,各种新技术和理念层出不穷,如何优雅地应对变化,让工作和生活变得更简单、更从容呢?

首先,我们介绍几个软件开发的普适原则。

1.KISS

❑ Keep It Simple and Straight(保持简单和直接),适当隐藏复杂性。

❑ Keep It Simple and Stupid(保持简单,像傻瓜一样),不要让别人多加思考。

软件接口或API的设计要让人一看就明白,就能知道作者的意图和想法,以及如何使用、有什么结果、可能产生的异常及副作用。

2.DOTADIW

DOTADIW(Do One Thing and Do It Well),意思是只做一件事并做好它。

3.UNIX的哲学

Mike Gancarz(X Window的设计者之一)总结了关于UNIX的九大格言:

小就是美。

让一个程序只做一件事。

尽可能快地做一个原型。

选择可移植性胜过效率。

在纯文本文件中保存数据。

使用软件来增加你的优势。

用shell脚本来增进。

避免交互式的用户界面。

使每个程序成为过滤器。

4.Python之禅

Python所倡导的“禅”其实适用于多数编程语言,可参见The Zen of Pythonhttps://www.python.org/dev/peps/pep-0020。具体原则如下:

美比丑好,

明显比隐晦好,

简单比复杂好,

复杂比难懂好,

扁平比嵌套好,

稀疏比稠密好,

可读性很重要,

在特例中也不要打破这个原则,

尽管实践会破坏纯洁性,

还是不能让错误悄然滑过,

除非你明确声明不用理会它。

别让人来猜测不确定的可能性。

应该有一个且只有一个比较好的明显的方法来做事,

尽管那个方法可能并非一开始就显而易见。

现在就做比永远不做好,

尽管永远不做经常比马上就动手做好。

如果实现很难解释清楚,那它就不是一个好主意。

如果实现很容易说清楚,那它就是个好主意。

命名空间是个绝妙点子,让我们能做得更多。

1.4.2 关于微服务的思考

从上面诸多软件开发的原则和哲学思想来看,庞大而复杂的系统是使众多开发人员陷入软件泥潭而不能自拔的主要原因。

老子云:“图难于其易,为大于其细。天下难事必作于易,天下大事必作于细。是以圣人终不为大,故能成其大。”圣人之言不谬矣,任何一个复杂庞大的系统莫不是由一个个简单而微小的模块逐渐构建起来的,正所谓万丈高楼平地起。为了不在复杂的大系统中迷失,我们不如不做单个的大系统,只做简单的微服务,然后由这些微服务共同协作,满足用户不同的需求。所以我们所做的软件系统应该使用微服务,而我们所认为的微服务之道如下:

❑ 不要大,要小。

❑ 不要复杂,要简单。

❑ 不要松散,要紧凑。

❑ 不要过于依赖别人,要独立自主。

❑ 不要只为自己着想,要为他人服务。

下面我们先给出一个关于Todo List(待办清单)的微服务的实例,为简单起见,这个微服务初始并没有度量和测试的相关代码,仅作为一个原始的示例,等读者了解了更多度量的概念和方法之后,再想想如何通过度量驱动的方法来提高和改进这个微服务。