命令式和声明式,哪个才是你的菜

本文转自微信号EAWorld。扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!

今天的主题是讨论一下“命令式”思想和“声明式”思想在分布式系统和微服务架构运维中的应用。

主要大纲:

1. “命令式”和“声明式”的概念
2. 命令式思想在分布式系统和微服务架构中遇到的困境
3. 以Kubernetes的设计思想为例,介绍声明式思想的优势
4. 普元的实践

“命令式”和“声明式”的概念

“命令式”和“声明式”这两个概念最初来自于编程语言,这两个概念并不常见,所以我们首先将他们明确一下。

第一个是“命令式”:
命令式和声明式,哪个才是你的菜_第1张图片
“命令式”有时也被称作“指令式”,好像有一个是台湾翻译,我不确定是哪一个了。“命令式”强调的是how,如果你是在写命令式的程序,那么你将step-by-step的告诉计算机如何完成一项工作,大多数的程序都是这样的。

在命令式场景下,计算机是不具备“智能”的,只是很机械的完成你交代的事情,至于结果如何,要看你的水平。就像上图,煎饼好吃不好吃、会不会糊锅,要看厨师对原料和火候的掌握。

另一个是“声明式”:
命令式和声明式,哪个才是你的菜_第2张图片
“声明式”有时也被成为“描述式”或者“申明式”,为告诉计算机你想要什么,“声明”你想要的what,由计算机自己去设计执行路径,需要计算机或者是“运行时”具备一定的“智能”。在这种情况下,计算机显然不会实现所有你想要的what,用专业术语说就是“非图灵完备”,但是针对特定的任务,“声明式”要远比“命令式”方便,其实大多数声明式语言都是针对特定任务的领域专用语言,即DSL。当然,随着深度学习驱动的自动编程技术的兴起,我们有可能在任意领域使用“声明式”完成任务,这是后话,暂且不提。

最常见的声明式语言就是SQL—— 告诉计算机你想要的结果集,SQL语言的运行时,即数据库,帮你设计获取这个结果集的执行路径,并返回结果集。众所周知,使用SQL语言获取数据,要比自行编写处理过程去获取数据容易的多。

下面是一个最简单的例子:
命令式和声明式,哪个才是你的菜_第3张图片
在这个例子里我们可以看到,使用其他通用语言“命令式”的完成查询,要比使用SQL语言“声明式”的完成查询复杂的多。在数据量很大的时候两种方法的复杂度差距会更加明显,数据库可以帮助你收集数据分布的统计信息、维护索引和选择最佳执行路径,以保

你可能感兴趣的:(命令,声明,设计,系统,架构)