zoukankan      html  css  js  c++  java
  • 基因、容器和上帝

    【摘要】 搞云计算多年,什么容器、虚拟机、网络虚拟化都玩了个遍,近来恰好又因为容器技术接触到基因测序领域,发现所有这些技术其实有个一些共通点。于是总结下从程序猿角度看到的云计算和基因与上帝的关系。Ps:仅供茶余饭后讨论,不必较真,主要还是帮助大家更深入的理解云计算。

    作为程序猿,不敢保证上帝一定存在。但是if他存在,他应该是个程序猿。

    上帝编码 – 蛋白质合成

    从孟德尔种植豌豆开始,人类就一直在探寻遗传因子,并且也证实了DNA就是控制遗传信息(即基因)的载体。然而有一个问题,一直困扰着人们:就大象和老鼠2个长得差不多的基因怎么会被翻译为完全不同的2种动物呢。说程序猿理解的话:好比2个编译好的二进制程序,看着都是2进制文件嘛,怎么跑起来行为完全不一致呢?注:基因是一种4进制编码

    这就得提到后面发现的信使RNA了,整个过程大概这样:DNA→信使RNA→蛋白质。蛋白质才是大家长得不一样的表现,比如同一个人的按理细胞基因都一样,但是眼睛和鼻子却长得不一样,就是合成的蛋白质不一样。

    image.png

    顺便提一下,历史上发现信使RNA的过程非常有意思,有兴趣的可以搜一搜:-)。

    image.png

    让我们回到这个神奇的mRNA翻译蛋白质的过程。

    首先,蛋白质由一个或多个由氨基酸组成的。已发现氨基酸种类大概是20多种。

    其次,基因是4进制(ATCG),如果每2位作为氨基酸编码。那么应该有 4*4 = 16 种氨基酸(而实际氨基酸有20多种,说明2位编码不够)。

    image.png

    如果3个编码为一组对应一种氨基酸,则有 4*4*4 = 64种,比较符合实际发现。事实也是这样,3位基因编码,定义了一种氨基酸。并且还有一个编码表,一一对应这个翻译顺序。这就神奇了,这不就是我们代码时,提前定义写好的map表么~

     image.png

    通过提前定义好的map表,控制二进制程序(实际是4进制)怎么运行。至少,我们可以推断上帝应该是个程序猿。

    Ps:二进制怎么执行,我们知道了。但是二进制怎么编译出来的呢?这个我认为上帝还有一个“模型 => 二进制的编译器”,他不可能直接写二进制代码,鉴于篇幅,留待想象吧。

    现实的再现 - 造物者视角

    最早接触虚拟机VM没有什么特别的感觉,就是觉得对物理机的仿真嘛,模拟出了一个看着像物理机一样的东西,使得剩余的CPU能力可以充分利用。然而在接触到Docker容器技术之后,我发现这个事情并没有那么简单。

    image.png

    因为,Docker容器技术和VM虚拟机从技术原理上看,是完全不同的路线,连实现思路都不一样。但是,它们所达成的效果或者说是目标确是惊人的一致:即模拟一台看着像物理机一样的东西。那是不是我们可以推断:如果未来再出现一种“虚拟化技术”,它的目标依然还是创建一个看着像物理机一样的东西。好比现在的网络虚拟化,也是照着物理网络使劲的去模拟。

    那么问题来了,如果你是上帝,那么你会如何创造新的世界?我想你也是照着自己所在的世界来打造的吧。因为从上面VM和Docker发展已经看到,这个跟打造用的技术无关,不管用什么技术都是照着原来的世界去模拟而已。

    所以如果上帝存在,我们的世界和他的世界大概率是一样的。

    一切都是虚幻 - 宠物的视角

    我们再回到Docker容器和VM虚拟机里面,首先问个问题:一个程序自己是否知道自己是运行在VM里面,还是物理机里面?答案是基本无法感知。

    image.png

    也就是不管虚拟化的技术如何,最终运行的程序都是无法感知自己到底是跑在容器里面,或者是跑在VM虚机里面。因为它(指一个app程序)看到的一切都好像是真的, CPU、内存以及网络,尽管这些是使用各种不一样的技术组装起来的。意思是一个好的云计算,是不应该让程序感知到自己的世界是如何被创造的。

    image.png

    那么问题来了,当你环顾四周,你能判断出自己的世界是被上帝虚拟出来的,还是原本就是真实的吗?答案还是不能(莫非大侠你能找到内核bug,然后突破guest系统,跑到Host上面去捣乱?)。

    云世界的上帝

    那么如果上帝是存在的,跟我们程序猿又有什么关系呢,因为也许我们只是他创造的众多虚拟时空中的一个而已(平行宇宙?)。其实也不用那么悲观,我们经常会看到Docker-In-Docker或者Docker-In-VM这种技术,意思是就算你本身在VM里面了,你还是可以继续创建VM或者Docker容器的,你拥有这个Docker容器的完整控制权利。

    所以作为云计算从业者,我们自己就是云世界里的上帝。如何打造一个好的虚拟机网络或者容器网络,使它能够可以模拟各种复杂的物理组网,来满足APP的需求,就是我们的首要目标。

    你看云计算里面,计算是假的(VM),存储是假的(Volume),网络也是假的,所有看到的统统都是假的。然而程序它却跑的很欢,因为它的所有原来的知识栈都不用做任何改变。一个好的“世界”就是这样,让你的“宠物”安静地按照原来世界的方式运行着。最后,希望你能成为一个好的上帝,别让你的程序发现你:-)

    最后,私货时间:

    华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购

    来源:华为云社区  作者:tsjsdbd

  • 相关阅读:
    js用currentStyle和getComputedStyle获取css样式(非行间)
    XMLHttpRequest Level 2 使用指南
    image-set实现Retina屏幕下图片显示[转载]
    Png的秘密
    css清除&闭合浮动
    2016学习计划
    提高性能及操作硬件的能力
    新兵易学,老兵易用----C++(C++11的学习整理---如何减少代码量,加强代码的可读性)
    CV限制符--C++
    能ping通网络,也正常连接,就是打不开网页,无法访问网络
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165887.html
Copyright © 2011-2022 走看看