Loading... > 转载文章,排版可能出现错误,建议到原文阅读:[什么是容器技术,它解决了什么问题? - 知乎 (zhihu.com)](https://www.zhihu.com/question/267624901) **(一)容器解决了啥问题** 打个比方吧。 你开了一家卖手机的商场,搞了10个机器人服务员帮你卖货。 眼看生意越来越火,服务员不够用了。你需要把“10个服务员”变成“10万个服务员”。 这时候,你能把“机器人服务员”的代码直接复制10万份吗? 你不能。原因就是“超大规模”。 **超大规模至少带来两个问题:** **1、10个机器人你能管得过来,10万个机器人你管不过来——这是管理难度。** **2、大部分时间你不需要10万个机器人同时工作,但机器人闲着也要吃饭——这是资源开销。** 这里,你就需要“容器技术”。 **容器是啥呢?** **它就像一个玻璃瓶,套在每个“机器人”外面。机器人的吃喝拉撒都在瓶子里完成。**  仅仅有容器还不够,更厉害的是上方的“容器调度系统”。这套调度系统主要做两件事: 1、资源编排。它可以决定为哪个容器分配多少计算、存储、网络资源,相当于决定给每个机器人多少“口粮”。 2、生杀予夺。如果忙起来,可以几秒钟之内复制出成千上万个包含机器人的容器,马上投入工作;如果闲下来,可以几秒钟之内“消灭”成千上万个容器,容器里的机器人也随之灰飞烟灭。  怎么样,有没有[黑客帝国](https://www.zhihu.com/search?q=黑客帝国&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})的感觉了? 每个“人”都被装进容器,给它们营养,然后他们负责在一个“共同的梦”里为服务更高级的存在而思考和工作。 不过你不需要怜悯它们,它们实际上只是程序——如果没有容器,机器人们只能各自为战,一盘散沙;有了容器,机器人立刻被整编成为纪律严明的军队,战力飙升。 通常,一台服务器上一般只能跑几个程序,多了的话它们之间就会相互干扰。但使用容器做隔离的话,一台服务器上跑几十个程序都很轻松。 你可能会说,不就是把机器人塞在罐子里嘛,听上去也不怎么难。。。 其实不然。把机器人装在容器里,难度和把大象装冰箱里类似。内行三步搞定,外行“一看就会,一干就废”。 **第一,集群规模越大,就越难。** 最流行的容器管理平台是开源平台 kubernetes,简称“K8S”。标准的一个 K8S 集群最多可以管理大概5000台服务器,平均每台服务器上跑着30-40个容器,算下来差不多20万个容器。 当然,为了支撑更大的业务,你也可以对开源的 K8S 进行“加固”,这就考验技术水平和代码经验了。  **第二,[管理容器](https://www.zhihu.com/search?q=管理容器&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})考验“微操”。** 容器管理中,有很多精细的动作。比如,一个常见动作叫“容器驱逐”。大概就是:如果发现某个机器人死机了,管理系统就会把它“杀死”,再换个地方重建一个新容器和机器人。 按理说,这一系列动作都是 K8S 自动完成的,不用人操心。 可是,这里就有很多细节需要考虑。假如这个机器人“生前”连着一个固定 IP,这个 IP 就相当于它的身份证号。换个地方重建之后,身份证号也变了,原来的组织就不认识它,相当于把它弄丢了。。。 为了防止这种“丢人”的情况发生,就需要在重建机器人的过程中,用一系列机制保证原来的 IP 地址不被别人抢走,还要给这个“[转世机器人](https://www.zhihu.com/search?q=转世机器人&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})”用。  hBnAv4"> 再举一个细节的例子。 原来这个容器跑在性能好的服务器上,相当于这个机器人每天都吃自助餐,结果“转世投胎”之后,换到了性能较差的服务器上,相当于只给机器人一个馒头。饿得头昏眼花,自然干活质量就下降了,影响整体的性能。 这时候,就要给这个机器人多吃点儿口粮,让它恢复到和之前一样的工作性能。 这个动作就叫“[算力拉平](https://www.zhihu.com/search?q=算力拉平&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})”。 类似这样的细节还有很多,就不一一列举了。总之,容器之间要想配合默契,“微操”必须到位。 **第三,“压榨”机器人要讲究技巧。** 刚才说过,容器的好处之一就是,可以让很多程序跑在一台服务器上,这就相当于很多机器人分食一份套餐。 正常情况下:吃的一点儿不浪费,干活一点儿也不少。  但是,假如要支持“618”“双11”这样的大促,很多程序都会满负荷工作,相当于好多机器人变胖了,那么一台服务器提供的“套餐”(计算资源)就不够分了。 争抢资源,工作效率就会大打折扣。  怎么办呢?那就得提前做预测。 大促时,有些种类的机器人会变胖,另外一些种类的机器人身材不会大幅变化。只要能把它们提前预测出来,[容器管理平台](https://www.zhihu.com/search?q=容器管理平台&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})就把可能变胖的机器人和不会变胖的机器人“混部”在同一个服务器里。 怎么预测哪些机器人会变胖呢?这就要靠人工智能了。例如,根据这些机器人去年“618”的历史工作数据,人工智能就能八九不离十地预测出今年“618”的“变胖”情况。(说到这中哥忍不住吐槽,很多人都以为人工智能的最大用处就是做一个像大白那样的通用智能机器人,其实人工智能最大的用处恰恰是在这种普通人压根不会注意到的地方润物细无声地做某项专门的工作。)  人工智能正在:—\_\_— 看到这,我猜你已经发现了,容器管理平台的权力其实非常大,所有机器人的生死命运都在它的一念之间。 但是[周光](https://www.zhihu.com/search?q=周光&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})告诉我,其实权力越大,责任也就越大——有的机器人可以随便杀死和重生,但有的机器人就不能随便杀死,一旦“错杀”,可能酿成大祸。 这种不能错杀的机器人就是:“有状态的机器人”。 我们不妨再深入一步,看看机器人之间的细微区别。 **(二)有状态的机器人** 机器人分为“没状态”和“有状态”两种。 比如,“服务员”就是没有状态的机器人。因为它只负责接待顾客。这一秒是A服务员给你服务,下一秒A服务员已经被[容器调度系统](https://www.zhihu.com/search?q=容器调度系统&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"answer","sourceId":2304178483})“杀死”了,换成B服务员给你服务,你不会觉得有什么不妥。 反正你去商场也不会注意是哪个服务员接待你,它们在你看来都一样。 “收银员”就是有状态的机器人。因为它脑子里记着你的账。上一秒是A收银员收了你100块,你等着找零,下一秒A收银员被“杀死”,换成了B收银员,它就不知道该给你找多少钱了。。。 所以,长久以来业内存在一个共识:有状态的机器人很难被放在容器里。 但是,有状态的机器人就像很难收服的宠物小精灵,一旦成功装进容器以后,那可是呼风唤雨,相当能打。 比如,数据库就是典型的“有状态的机器人”。 这些机器人在容器里活着并不难,难的是它们不能随便“死”——具体说是,在死之前必须留下“遗言”。 留“遗言”的过程是这样的。调度系统告诉容器:亲,你10秒钟以后要去死哦。容器马上行动起来,把暂时存在机器人体内的数据状态“落盘”——存储到硬盘里。然后才能安详赴死。 这个机器人转世托生后,需要再从硬盘里取回数据状态,然后继续为客人服务。 这中间的难度就在于:机器人的存取“交接”不仅要完全自动化,还不能出任何疏漏,并且还要像马戏团的杂技演员一样流畅。  多说一句,虽然很多应用都用到容器技术,但是人们使用容器的技术不同,效率也不同。 用得不好,就需要好几十号技术宅来维护提供,手动处理系统的隔离性问题和备份。 但如果有一整套自动化工具来运维容器服务,三四个运维人员就能搞定几百万个容器的日常服务。 这也是很多科技公司的核心竞争力所在。 \--- 本段内容节选自我的文章,感兴趣的朋友可以去看完整版。 [史中:云计算的屠龙者不能成为恶龙29 赞同 · 3 评论文章](https://zhuanlan.zhihu.com/p/395384475) 最后修改:2022 年 11 月 17 日 09 : 28 AM © 转载自他站 赞赏 要多恰饭才能长胖 赞赏作者 支付宝微信