基因、容器和上帝
作为程序猿,不敢保证上帝一定存在。但是if他存在,他应该是个程序猿。
上帝编码 – 蛋白质合成
从孟德尔种植豌豆开始,人类就一直在探寻遗传因子,并且也证实了DNA就是控制遗传信息(即基因)的载体。然而有一个问题,一直困扰着人们:就大象和老鼠2个长得差不多的基因怎么会被翻译为完全不同的2种动物呢。说程序猿理解的话:好比2个编译好的二进制程序,看着都是2进制文件嘛,怎么跑起来行为完全不一致呢?注:基因是一种4进制编码
这就得提到后面发现的信使RNA了,整个过程大概这样:DNA→信使RNA→蛋白质。蛋白质才是大家长得不一样的表现,比如同一个人的按理细胞基因都一样,但是眼睛和鼻子却长得不一样,就是合成的蛋白质不一样。
顺便提一下,历史上发现信使RNA的过程非常有意思,有兴趣的可以搜一搜:-)。
让我们回到这个神奇的mRNA翻译蛋白质的过程。
首先,蛋白质由一个或多个由氨基酸组成的。已发现氨基酸种类大概是20多种。
其次,基因是4进制(ATCG),如果每2位作为氨基酸编码。那么应该有 4*4 = 16 种氨基酸(而实际氨基酸有20多种,说明2位编码不够)。
如果3个编码为一组对应一种氨基酸,则有 4*4*4 = 64种,比较符合实际发现。事实也是这样,3位基因编码,定义了一种氨基酸。并且还有一个编码表,一一对应这个翻译顺序。这就神奇了,这不就是我们代码时,提前定义写好的map表么~
通过提前定义好的map表,控制二进制程序(实际是4进制)怎么运行。至少,我们可以推断上帝应该是个程序猿。
Ps:二进制怎么执行,我们知道了。但是二进制怎么编译出来的呢?这个我认为上帝还有一个“模型 => 二进制的编译器”,他不可能直接写二进制代码,鉴于篇幅,留待想象吧。
现实的再现 - 造物者视角
最早接触虚拟机VM没有什么特别的感觉,就是觉得对物理机的仿真嘛,模拟出了一个看着像物理机一样的东西,使得剩余的CPU能力可以充分利用。然而在接触到Docker容器技术之后,我发现这个事情并没有那么简单。
因为,Docker容器技术和VM虚拟机从技术原理上看,是完全不同的路线,连实现思路都不一样。但是,它们所达成的效果或者说是目标确是惊人的一致:即模拟一台看着像物理机一样的东西。那是不是我们可以推断:如果未来再出现一种“虚拟化技术”,它的目标依然还是创建一个看着像物理机一样的东西。好比现在的网络虚拟化,也是照着物理网络使劲的去模拟。
那么问题来了,如果你是上帝,那么你会如何创造新的世界?我想你也是照着自己所在的世界来打造的吧。因为从上面VM和Docker发展已经看到,这个跟打造用的技术无关,不管用什么技术都是照着原来的世界去模拟而已。
所以如果上帝存在,我们的世界和他的世界大概率是一样的。
一切都是虚幻 - 宠物的视角
我们再回到Docker容器和VM虚拟机里面,首先问个问题:一个程序自己是否知道自己是运行在VM里面,还是物理机里面?答案是基本无法感知。
也就是不管虚拟化的技术如何,最终运行的程序都是无法感知自己到底是跑在容器里面,或者是跑在VM虚机里面。因为它(指一个app程序)看到的一切都好像是真的, CPU、内存以及网络,尽管这些是使用各种不一样的技术组装起来的。意思是一个好的云计算,是不应该让程序感知到自己的世界是如何被创造的。
那么问题来了,当你环顾四周,你能判断出自己的世界是被上帝虚拟出来的,还是原本就是真实的吗?答案还是不能(莫非大侠你能找到内核bug,然后突破guest系统,跑到Host上面去捣乱?)。
云世界的上帝
那么如果上帝是存在的,跟我们程序猿又有什么关系呢,因为也许我们只是他创造的众多虚拟时空中的一个而已(平行宇宙?)。其实也不用那么悲观,我们经常会看到Docker-In-Docker或者Docker-In-VM这种技术,意思是就算你本身在VM里面了,你还是可以继续创建VM或者Docker容器的,你拥有这个Docker容器的完整控制权利。
所以作为云计算从业者,我们自己就是云世界里的上帝。如何打造一个好的虚拟机网络或者容器网络,使它能够可以模拟各种复杂的物理组网,来满足APP的需求,就是我们的首要目标。
你看云计算里面,计算是假的(VM),存储是假的(Volume),网络也是假的,所有看到的统统都是假的。然而程序它却跑的很欢,因为它的所有原来的知识栈都不用做任何改变。一个好的“世界”就是这样,让你的“宠物”安静地按照原来世界的方式运行着。最后,希望你能成为一个好的上帝,别让你的程序发现你:-)
- 点赞
- 收藏
- 关注作者
评论(0)