当前位置: 首页 > 科技观察

给大家看个相声

时间:2023-03-22 13:59:31 科技观察

A:听说我们IT界有个新词,叫什么“云原生”?云原生?B:2020年了,有新词吗?2013年,Pivotal开始拿这个词瞎搞。A:那什么是云原生?B:云原生技术有利于组织在公共云、私有云和混合云等新的动态环境中构建和运行可弹性扩展的应用程序。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API……A:等等,你会说一点人类语言吗?B:那是CNCF的权威如果你看不懂官方的定义,那只能说明你的水平太低了。A:好吧,我水平很低,请解释一下,什么是云原生?B:通俗点说,云原生就是把你的应用设计在云端执行,充分利用云计算的优势。A:嗯,我们家的应用跑在一个机房,用了几台服务器,一台做负载均衡,三台应用服务器,两台数据库服务器。按照你说的,我把他们迁移到云环境。申请几个虚拟机,那是云原生的吗?B:不不不,你这样做的话,就跟在机房跑步一样。无非就是把物理机换成虚拟机。你忘了第二部分:充分利用云计算平台的优势。A:你可以举个例子。B:嗯,假设有一天你的应用突然流行起来,而现在的服务器无法处理这么大的流量,你该怎么办?答:这并不容易。购买新服务器、配置服务器、安装应用程序并运行它。B:多费力,多长时间。如果是云原生应用,它可以自动扩展到新的运行实例。如果热度已经过去,这些正在运行的实例可以被撤销。这叫自动伸缩,弹性扩容。A:这个真的很好,还有吗?B:天下武功,唯快不破。请问你,你的app一天能发布多少次?答:一天几次?别开玩笑,我们只有几个月Post一次。B:如果是云原生应用,一天可以发布几百次(也可以回滚几百次),不宕机,轻松支持蓝绿部署。A:一天发布几百次,有必要这么变态吗?B:当然,并不是所有的应用代码都会发布上百次,一个超大的系统会拆分成小块的服务,这些服务会频繁发布,快速将新特性推向市场,并进行验证。A:它对我们的小应用程序根本不起作用。还有别的事吗?B:云原生应用具有强大的监控和自动恢复能力,可以自动进行健康检查(比如网络延迟?磁盘是否已满?),发现故障,自动恢复,重启或重新部署相关服务。A:我总结一下,无非就是实现快速发布,弹性扩展,高可用。你夸的这么好,倒是说说怎么做!B:首先,你得使用微服务架构,这样你就可以独立开发,独立部署,弹性扩展。答:我去!没有微服务就不能实现云原生吗?B:效果肯定大大降低。你有一个巨大的单体应用,启动需要几分钟,如何快速部署和发布?其次,你得用docker和k8s,再加上DevOps,这样你一天可以发布几百次应用,并且弹性扩展。A:是的,从docker镜像生成运行实例真的很简单。B:你仍然必须使用声明式API和不可变的基础设施。A:你不会说人话吗?B:比如你的系统需要一个nginx,你直接告诉云平台:我需要一个nginx,80端口,云平台可以根据你的描述生成一个nginx实例,这个是声明式的;如果是命令式,就是这样:从xxxx下载nginx安装包,解压到xxx路径,修改xxx文件...A:哎!声明式风格更简单,基础设施不可变是什么?B:你发现你的nginx配置有问题,想登录修改,这是不允许的。因为下一次部署可能会忘记这个更改。相反,您应该修改您的声明,完全销毁当前的nginx实例,并创建一个新实例。A:只有增删,没有修改!B:是的,整个系统处于已知可控状态,发布新功能或回滚旧功能都非常方便。对了,差点忘了最重要的一点,CloudNative用的是ServiceMesh(服务网格)。A:ServiceMesh我在码农公众号、《微服务之赤壁大战》上看到的,意思是现在的微服务架构需要实现服务发现、负载均衡、服务限流、降级、日志、监控等各种功能。这些功能现在都需要程序员调用相关的类库来实现。有了ServiceMesh,这些功能都可以在底层平台实现,程序员只需要关注业务逻辑。(现状)(ServiceMesh)B:是的,ServiceMesh顺应了软件发展的趋势:不断把通用的技术放到平台上。原来千辛万苦才搞定一个搜索功能,现在有了现成的ElasticSearch;以前是高科技的负载均衡,高可用,现在云平台有现成的负载均衡服务,随便用。A:微服务、docker、k8s、ServiceMesh、DevOps、声明式、不可变基础设施,我理解,云原生是一个篮子,什么都可以装在里面。但是,只要能做到快速部署、弹性扩展、高可用,为什么非要用这些时髦的东西呢?B:这些东西都是开放的标准,有现成的实现,而且有大公司的支持和背书。你不需要,但你必须自己发明轮子。答:好的,我明白了。B:云原生可能是未来的发展趋势。你想把你的家庭应用改成云原生的吗?A:拜托,我们的系统要不要拆分成微服务还不确定?B:可以想了想,云远是通过评价晋升的大杀器!A:通过评价提升?那我得好好想想了……