虚拟化和容器化,大家都用错了

Posted david_lv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化和容器化,大家都用错了相关的知识,希望对你有一定的参考价值。

(1)虚拟化

如果你是在1964年睁开眼睛的,你会发现:1964年IBM开天辟地的System360大型主机已经实现了虚拟化,可以一个主机通过CPU分时机理实现多用户多环境工作。毕竟当时计算机贵啊,如果一个个用户的一个个程序都排队执行,那大型主机的利用效率就太低了。这就是虚拟化的开始。

如果你是在1989年睁开眼睛的,你会发现:1989年,微软开始研发Windows NT操作系统。当时微软还在假模做样与IBM合作研发兼容PC机的OS/2操作系统。所以当时微软的产品经理和项目经理都要求Windows NT的内核首席设计师卡特勒:你要做的这个新操作系统内核,需要支持既能跑OS/2应用,还能跑Windows应用。

卡特勒一想,我kao。于是设计了一个超牛的设想:把内核架构也设计成Client-Server模式。甭管你是OS/2,还是Windows,到了我这个内核,你们都是我的Client。这其实已经为Windows NT支持多种操作系统打下了埋伏。今年5月,鸿蒙支持AOPS智能手机和LiteOS物联网,前几天微软Windows11支持Widows应用和android应用,我想到了这个30多年前的设计,会心一笑。

如果你在1998年睁开眼睛的,你会发现:1998年,VMWare公司创立,把IBM在1965年在大型主机上实现的那套东西,在PC机上实现了。一台PC机上也能多环境工作了。这就是虚拟化的最初价值。

如果你是在2008年睁开眼睛的,你会发现,你用虚拟化主要是做应用程序环境隔离,或者为了把一台高性能服务器切成几个虚拟服务器供几个部门用。所以说,你不同时间段睁开眼睛,看到的东西和这个东西发挥的价值,是时过境迁不一样的。

再说两个八卦:

1、VMWare的创始人Greene,后来到Google担任Google云计算的掌门人去了。可惜Google内部推崇的是容器化技术,而非虚拟化技术

2、2008年,一个人担任了VMWare的CEO,这个人叫保罗马里茨。嘿嘿嘿,很不凑巧,这个人就是当年Windows NT第一个版本的项目经理,当年推进WindowsNT既要跑OS/2又要跑Windows应用的人,就是他

(2)容器化

如果你是在1998年睁开眼睛的,你搞J2EE,你写完程序,需要把程序打包成JAR或WAR包。后来2003年,开源世界打开了,出现了好多开源Java框架,把昂贵的一体整合集成化的商业J2EE应用中间件给打死了,尤其是Spring的开源出现,更是打死了需要依赖昂贵的EJB容器中间件。所以2007年BEA被Oracle并购。

但是这么多开源Java框架的出现引发了一个问题,一个应用依赖了很多框架,而且依赖的这些框架的版本还不一样。所以你打包你的应用,你还得把依赖关联的这些东西都得打包好,而且每个框架的版本得对,而且安装顺序还不能错。这怎么办?

如果你是在2010年睁开眼睛的,你会发现:2010年一个东西出现了:CloudFoundry。这个东西能够把应用以及依赖的框架都打成一个专门的格式包:BuildPack。CloudFoundry会自动根据你的依赖关系进行正确的部署安装。

嘿嘿嘿,咱们的老朋友又出现了:VMWare。它在2013年把Spring、CloudFoundry全收购了,合并成一个公司叫Pivotal。这家公司的CEO就是保罗马里茨。嘿嘿嘿,干虚拟化的开始转弯了。

如果你是在2013年睁开眼睛的,你会发现:2013年,一个公司横空出世,这就是:Docker。这家公司不用搞那种复杂的应用平台级的CloudFoundry,而是偷巧借助了Linux操作系统一个特性:LXC。LXC就是Linux Container意思。LXC技术就是Google这个公司在2008年给Linux社区开源贡献的啊。在通用操作系统级打包,那可比在特定应用平台级打包要好的多啊。所以Docker横扫市场。也就是说,容器的出现是为了现在日益依赖关联复杂的应用程序的打包和部署的。

2014年,搞虚拟化的、搞CloudFoundry全都傻眼了。当时OpenStack还主要支持虚拟化。当时开源CloudFoundry被IBM搞成Bluemix,被Salesforce搞成HeroKu,被西门子和GE搞成工业互联网平台。2014年一看,路全走错了。所以,大家近几年看到OpenStack、CloudFoundry纷纷走了下坡路。

本来落后的云计算厂商Google一看,咦,风水轮流转,真是十年河东十年河西,容器化,我会啊。于是,2015年,Google领导发起CNCF:云原生基金会。主打就是以容器和容器资源编排管理K8S为主的各种配套生态。

但是,打住。Google要容器技术干嘛?这得从Google落后的云计算开始说起。Google其实搞云挺早的,2008年就发布了一个东西叫GAE:Google应用程序引擎。也就是说,你啥也不用管,什么服务器、存储、网络、平台、打包、发布、监控等等,你都不用管,你写应用,你调用我的Open API市场里的Open API,你就可以很容易快速开发一个应用,根本不用操心啥复杂的分布式计算和分布式数据。

但是当时人们的认知水平还没那么高,AWS正卖云服务器、云存储、云网络、云CDN卖的开心着呢。Google这套原生开发在互联网、运行在互联网的哲学,在当时太让人接受不了了。所以Google的云计算业务多年营收不行。后来还在错误的时间2012年雇佣来VMWare的Diane Greene,估计想着用虚拟化技术返过头重新搞虚拟化的服务器、虚拟化的网络、虚拟化的存储吧。但其实在2015年这条路就证明是错误的啊。但Diane Greene仍然是干到2019年才下课。因为,嘿嘿嘿,2019年,Google换了新的职业经理人CEO了。

所以吃了搞GAE这种应用平台的亏,但又不甘心放弃这条路的Google,设了一个CNCF,搞IaaS+。嘿嘿嘿,这鸡贼。比应用平台PaaS要低,比IaaS要高。

但话说回来,Google和CNCF到底要容器技术干嘛?容器技术干嘛是云原生的四大要素(微服务/无服务器、容器、CI/CD、DevOps)之一呢?Google难道也是要借助容器来解决复杂应用依赖关系打包和部署的问题么?

NO,NO,NO。Google找到容器技术,不是看中容器的关联依赖打包机制,而是看中容器是在操作系统级工作,可以做到快速的启动、执行完就快速的毁灭。这样就能最小化占用计算资源。在AWS的眼里,哲学是我这里运维着几百万台服务器,你来买一台,我给你统一做基础运维。而在Google的眼里,哲学是我这里的几百万台服务器是属于全社会的资源,我给你执行完你需要的,我就赶快腾挪出来给别人服务。

所以,你到底是2010年CloudFoundry时代睁开眼的,还是2014年Docker时代睁开眼的,还是2015年CNCF云原生时代睁开眼的,你看到的同一个技术,但应用价值却不一样。

也就是说:容器技术本身和云原生没啥关系,只是云原生需要弹性伸缩(快速扩张部署/快速启动/快速销毁释放资源),正好容器技术、微服务技术/无服务器技术,恰好符合云原生的需要而已。所以现在CNCF猛推FaaS/Serverless技术,就是因为一个容器里的代码越少,弹性伸缩调度能力越强。如果一个容器里的代码高达1G,想弹性都不可能。

现在你是否还在虚拟化技术或容器化技术,当应用程序环境隔离价值用呢?嘿嘿嘿,其实这两项技术都不是为了应用程序环境隔离这个价值而产生的。

如果你的应用不是浪涌脉冲式的弹性伸缩,我奉劝你,别用云原生技术,太复杂。

当然,也有人说:我用了容器做打包、做环境隔离,我就是云原生。嘿嘿嘿,我就不兴说这类狡辩人了。这类人啊,能把老婆饼说成就是老婆。这类人啊,能把容器打包说成云原生技术,能把云原生技术说成云服务,能把云服务说成云营收,所以,我用了容器所以算我云收入。

读完这篇戏谈,再给你看一篇正谈:《什么叫云原生应用》,非常值得看。等看完那篇,你再回过头来再看一篇本文,你会更有思考余味。

以上是关于虚拟化和容器化,大家都用错了的主要内容,如果未能解决你的问题,请参考以下文章

Java 中的 BigDecimal,80% 的人竟然都用错了。。。

Java中的 BigDecimal,80%的人都用错了....

Java 中的 BigDecimal,80% 的人竟然都用错了。。。

Java中的 BigDecimal,80%的人都用错了....

缓存,原来我们一直都用错了!

Docker---大型项目容器化改造