一些历史

不久之前,开发,部署和运维还相当复杂。在一开始,运维不仅需要修补程序代码,还要支持物理机器。保持服务器,硬件与软件处于最新状态也是一项艰巨的任务。

在2000年代,一个新的模型——架构即服务(IaaS)很快流行起来。IaaS提供了从第三方租用远程服务器与虚拟机的可能性。这些提供商负责管理硬件,网络以及预留空间。

在IaaS出现之后,为开发者减负,让他们卸下所有非开发任务的想法推动了新方法,模型和服务的创新。

什么是容器?

Docker官方给出了如下简短而优雅的定义:“容器是一个标准软件单元,它将代码及其依赖打包到一起,因而应用可以快速稳定地运行在不同的计算环境中。”换句话来说,使用容器,开发者能确保应用能运行在任何云平台上或本地服务器上。在某些方面,容器与虚拟机相类似,都是独立的资源。然而,虚拟机模仿物理机,而容器创建了软件层的抽象。

什么是无服务器计算?

在无服务器计算中,整个应用或应用的一部分被分成多个功能,每个都会被一个事件触发,例如HTTP请求,新消息到达消息队列,或保存和修改数据。也能够在某个特定时间或周期性地执行,这个特性对计划任务很有用。

对于这样的系统,开发者只需要写功能代码,将它与它的依赖一起打包到一个压缩文件,并将压缩文件发到无服务的终端。供应商负责配置和扩展。

无服务器的一个关键特性是“即用即付”模型,企业只需要为他们功能的实际执行时间付费。如今,AWS Lambda是最流行的无服务器供应商。

容器与无服务器有共通之处吗?

是的!如今,无服务器与容器都很流行,因为他们能让开发者专注于代码而不是基础设施。这提高了开发速度。容器与无服务器都能与微服务及基于组件的开发完美契合。相对于经典的一体化架构,使用无服务与容器,开发部署都会更快,性价比也更高,因为你在操作应用的小部分,而不是整体。尽管有这些共性,两个技术都有各自的优劣以及各自的使用场景。

容器的优势

容器的第一大优势就是可移植性。由于容器包含了运行所需的一切依赖,只需要一个安装有容器引擎的机器就可以运行。容器是平台无关的,它可以运行在Linux, Windows, macOS, Mesos, Docker, Swarm, 或 Kubernetes,甚至可以运行在其他容器内部。

容器比虚拟机性能更好。虽然容器与虚拟机都是虚拟化的,虚拟机消耗更多的资源,因为他们运行着整个操作系统来模拟完整的机器。而容器可以共享同一个操作系统,这使它们更小,启停速度更快。

容器的另一个好处是运行开发者获得程序的完全控制。虽然这意味着系统设置必须手动配置,但这也意味着你拥有真正的灵活性。这一点无服务器是做不到的,因为几乎所有的管理都由云供应商负责。

容器的使用场景

如果你想重构一些大的一体化应用到微服务架构,并获得更好的性能,可测试性,以及扩展速度,容器非常有用。将过去的大应用分成几个小服务——一个负责用户管理,一个负责转换媒体文件等等。每个服务都可以在负载提高时轻易地扩展来提供更好的性能。这些一体化应用就办不到,除非像整个系统添加一个新实例,这样既不经济,又耗时间。

总的来说,容器适合于长期运行的程序,以及对系统有特殊要求的应用。

无服务器的优势

由于“即用即付”模式,使用无服务器的花费会大大降低。在应用的空闲时间你不必付费,因此如果没有流量,你就不用交月费。几乎所有的无服务供应商都有免费使用,包含一个按月的固定请求数和执行时间。通常提供的数值对一个小型网站来说已经足够了。

使用容器,将应用分成微服务是关键的一步。而使用无服务器,是将应用分成单个的功能,每个复杂一个特定的逻辑。这大大降低了开发和部署的速度,因为对于工程师来说这更容易理解。部署功能块也比部署整个应用所冒的风险更小。

无服务的另一个好处是爆发自动伸缩。无服务器的功能运行在小的,无状态的,短暂存在的容器中。供应商负责扩展应用来应对负载高峰,可以在几秒钟之内运行起来成百上千个实例。记住,你只需要为你的功能的执行时间付费。

什么时候使用无服务器?

事件驱动的无服务器对于那些不需要一直运行的应用很有用。

假设你在为一个已有应用开发一个媒体处理功能。新的模块不经常使用,但是也需要足够的计算能力完成它的任务。将它放在应用里需要迁移到一个性能更强的实例——一个冒险的举动,因为,如果一些繁重的任务一起运行,会给所有的用户带来延迟,这时你就需要性能更好的机器,而这同样会带来风险。

如果你选择无服务器,媒体处理模块会与应用的其余部分隔离。在不用时你不需要付费并且不会影响你程序的其余部分。

无服务器,不是你不需要服务器,而是供应商为你提供服务器,这个服务器在你用的时候就存在,不用的时候就不存在(不收费),这简直就是薛定谔的服务器。

容器的缺点

即使程序没人使用,也至少有一个承载容器的虚拟机实例在运行。因此,容器比无服务器更贵。

即使容器可以在共享的机器上快速扩展,额外扩展并不快,因为机器自身也需要扩展。不过,利用容器协调系统例如Kubernetes,AWS ECS...使扩展更容易。

无服务器的缺点

对于大部分开发者,最可怕的事是厂商绑定。使用无服务器,你不可避免地要选择一个云供应商,不同供应商之间使用的架构与API都不相同,如果要改变供应商或其他的解决方案,代价有些高昂。不过,也有一些专家不同意,声称厂商绑定不成问题。

使用无服务器,观测,监控与调试都不容易。因为程序可能被分成了多个部分,每一部分都有各自的bug与错误,掌控全局变得很重要。幸运的是,现在可以使用Thundra,一个为无服务器提供了完整可观测性的工具,聚合了性能指标和日志。

容器和无服务器可以一起使用吗?

令人惊讶的是,是的!让主程序功能作为容器化的微服务运行,而对于一些后台操作或很少使用但是消耗CPU的功能使用无服务器。

另一种又去的结合方式是使用AWS Fargate。这个服务结合了无服务器与容器的优点,运行你更好地控制你的程序而不用担心扩展——AWS负责。如果你对此感兴趣,查看关于AWS Fargate的这篇文章。

总结

容器与无服务器通常被认为是相互竞争的技术。通过进一步的观察,发现他们只是不同的技术而已——在同一个项目中一起使用可以优势互补。记住“旧的”不意味着是“死的”,“新的”不代表“更好”。哪种方案有效取决于你的使用场合,项目需求,团队经验以及团队偏好。

容器性能比无容器服务器,【译】容器 vs 无服务器(Serverless)相关推荐

  1. 容器服务器_容器与无服务器计算之间正在进行一场战争

    容器服务器 What's the job of a developer? Writing software, of course. But that wasn't always the case. 开 ...

  2. 微服务化之前需要先无状态化和容器化

    作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作.在工作中积累了大量运营商系统,互联网金融系统,电商系统等 ...

  3. Web服务器 Web容器 Servlet容器

    WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是 ...

  4. 彻底吃透Web服务器、容器、应用程序服务器与反向代理

    出处:cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是 Web 服务器/Web 容器/Web 应用程序服务器 ...

  5. Docker在服务器之间怎样导入导出镜像(服务器之间容器复制)

    场景 Docker+Tomcat+geoserver+shp发布地图服务: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1191 ...

  6. 服务器运行容器工具大盘点!

    服务器到底是什么? 服务器的硬件好理解,其实就是一台性能.稳定性.扩展性等等比我们普通个人PC强的一台机器而已,它也需要搭载操作系统,比如有专门的Windows Server或者各种Linux发行版系 ...

  7. 微服务化之无状态化和容器化

    文章转自网易云架构师刘超的个人微信公众号 本文章为<互联网高并发微服务化架构实践>系列课程的第四篇 前三篇为: 微服务化的基石–持续集成 微服务的接入层设计与动静资源隔离 微服务化的数据库 ...

  8. 搭建GPU服务器(容器篇)

    搭建GPU服务器(容器篇) VNC服务器 安装vncserver 首先更新源 sudo apt update 然后安装Xfce sudo apt install xfce4 xfce4-goodies ...

  9. 2021 阿里云容器服务年度盘点:企业级容器应用变化和技术趋势观察

    作者:溪洋 在云原生浪潮的推动下,容器和 Kubernetes 技术和应用发展迅猛.最近,云原生计算基金会 CNCF 发布了与 SlashData 联手撰写的 最新版<云原生开发现状报告> ...

最新文章

  1. 使用JDK自带jvisualvm监控tomcat
  2. 2022年全球及中国户外电源产品行业容量前景与运营动态分析报告
  3. CVPR2019最全整理:全部论文下载,Github源码汇总、直播视频、论文解读等
  4. ansible(5)——使用通配符操作ansible命令
  5. 电纸书kindle相关产品调研(没搞完)
  6. Python中操控ssh和sftp
  7. ajax请求到参数太大获取参数失败问题,Ajax请求参数较长导致请求失败
  8. STM32工作笔记0067---SPI接口原理与配置
  9. 【蓝桥杯】历届试题 分糖果
  10. 关于PostgreSQL空间膨胀的研究
  11. tornado websocket
  12. 泰山游记:绝顶海拔1525米
  13. 5 断点无效_JTO|应建明团队揭示罕见ALK/ROS1/RET基因组断点的分子病理学特点及靶向治疗疗效...
  14. CF 1260 D 题解
  15. csharp基础练习题:卡塔劳尔【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  16. springBoot企业微信引入会话存档SDK
  17. javafx实现钢笔效果,钢笔笔锋,基于bezier曲线
  18. 女星长发如雪 上演现代版白发魔女传(组图)
  19. 一步一步 copy163: 网易严选 ---- vue-cli
  20. 基于Java毕业设计智慧茶园综合管理系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. java web filter链_filter过滤链:Filter链是如何构建的?
  2. php 零宽断言,正则表达式之零宽断言实例详解【基于PHP】
  3. linux几秒钟同步一次,Linux时间同步配置方法
  4. python递归 数字全排列_利用递归实现全排列(python)
  5. linux后台启动脚本nohup,linux下后台执行shell脚本nohup
  6. 使用ogg实现oracle到kafka的增量数据实时同步
  7. 148. Sort List 1
  8. 如何识别“答非所问”?使用gensim进行文本相似度计算
  9. OpenCart 之 CSV 格式商品导入 – 如何导入商品主图片和附加图片?
  10. arm-hisiv100nptl-linux-gcc编译boa和移植