最近有朋友问我:“为啥你写的东西我都看不懂,也不是我平时用的。”我不禁哑口无言。就像今天要说的云计算,其实已经覆盖了日常生活的不少场景,像检票一类的人脸识别,智慧城市的红绿灯等等,都是云计算应用的产物。这次把云计算、容器、容器云三者放到一起来说,因为这三个现在非常非常的火,它们之间互有关联,一般谈云计算时也会提到容器,提到容器就更无可避免的提到容器云。接下来就先从云计算开始说起。
从云计算到容器
云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。一般的云计算架构涵盖三层服务:IaaS、PaaS 和 SaaS。
IaaS(基础设施即服务),主要包括计算机服务器、通信设备、存储设备等为用户提供计算、存储、网络等基础设施服务。比如大家耳熟能详的 AWS、阿里云、腾讯云等,以及又拍云提供的 CDN、云存储、云安全等服务。
PaaS(平台即服务),简单理解就是提供类似操作系统(涵盖数据库、日志、监控等服务)和开发工具的功能。
SaaS(软件即服务),通过互联网提供软件服务的应用,用户不用搭建环境,只需要付费就可以享受的云服务。这类服务大家接触到比较多,比如 Google Docs、石墨文档、上直播、亿方云,以及又拍云的 WebP 自适应、窄带高清等多媒体云处理服务。
总的来说,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。简而言之,云计算是网络资源配置的一种方式。
随着云计算的发展,计算机技术也跟着推陈出新,应用的规模愈发庞大,逻辑愈发复杂,迭代更新愈发频繁,应用开发所需的统一规范和原有开发模式杂乱无章成立追求进步的主要障碍。
IaaS 的弹性计算性价比低,资源利用率低,需要考虑特定场景,PaaS 则可以利用容器技术,不依赖虚拟机、维护成本低另外具有高可扩展性。但无论 IaaS 或者 PaaS 在资源利用率、应用架构选择、支持的软件环境方面都有一定的局限性,而容器技术的发展弥补了 IaaS 以及 PaaS 的不足。
谈谈容器技术
说到容器技术,就不得不提一下 DevOps。DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。其理念和方法已经为许多团队所采纳。
2014 年 11 月,Docker 作为有潜在趋势的容器技术进入了 DevOps 的世界。它通过简单的包装和应用程序运输加快了持续部署的能力,进而得到了普及。Docker 作为一项开源工具,可以将应用程序及其依赖(如配置文件等)打包到容器中,就可以在任何 Linux 服务器上运行该容器,而不会出现任何兼容性问题。
容器化是一个相当古老的概念,但 Docker 带来了一些全新的东西。
Docker 旨在整合大多数最近时期常用的 DevOps 工具,如 Puppet,Ansible,Jenkins等。
有了 Docker ,开发人员可以轻松地将其生产环境复制为可立即运行的容器应用程序,让工作更有效率。
Docker 允许应用程序在笔记本电脑,内部服务器,公共云或私有云等上运行,从而实现灵活性和可移植性。管理和部署应用程序要容易得多。
Docker 实现了一个高级 API ,以提供单独运行进程的轻量级容器。
如今,Docker 的主要用户是开发人员和系统管理员,应用于DevOps 相关联的构建和运行分布式应用程序。
为什么现在 Docker 那么火,它究竟有哪些优点?
Docker 轻量级,容器可以秒级启动;
Docker 对系统资源的使用率很高;
Docker 容器的执行不需要额外的虚拟化支援,它是核心层级的虚拟化,因此可以实作更高的效能和效率;
Docker 几乎可以在任意平台上执行,包括实体机、公有云或者个人电脑;
Docker 管理简单,只需要小小更改,就可以替代以往大量的更新工作。
Docker 的应用场景主要涵盖以下几种:
Web 应用的自动化打包和发布;
快速搭建开发和运行环境,并且该环境可以直接传递给测试和产品部署;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用。
从容器技术到容器云
Docker 只是打开互联网新世界的一把钥匙,对于企业或者个人复杂的项目来说,面临的问题更多:
应用迭代缓慢,业务交付经常推迟;
传统的单体架构应用难以维护和扩展;
随着应用的使用,运维管理变得越来越复杂;
开发需求变化,开发或测试人员不遵守流程等。
在此背景下容器云的出现,成为解决这些复杂场景项目的救星。容器云其实是按照容器为资源分割,封装整个软件运行时环境,为开发者和系统管理员提供用于构建,发布和运行分布式应用的平台。当容器云专注于资源共享与隔离、容器编排与部署,它更接近 IaaS 的概念;当容器云渗透到应用支撑与运行时环境时,它更接近于 PaaS。
在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备 DevOps 能力的组织中,应用程序发布的风险很低。因为与传统的瀑布式开发模型相比,迭代式开发更加便捷。
我们假设一种场景,部署在物理机上的业务突然出现问题,该如何应对?普通客户是更换物理机设备,部署环境,然后再部署业务,作为一个娴熟的老司机,至少也需要耗费 1 小时 以上。之前又拍云容器云的一个客户就遇到了类似的情况。客户同时在容器云和物理机上在跑业务,容器云上运行的业务大概有十几个,一次遇到了物理机故障的情况,如果把原有业务迁移到物理机上,需要短时间内寻找替代设备、设置生产环境,难度颇高;此时的解决方案是把物理机的流量切换到容器云,不到10秒的时间就完成了业务切换,避免了故障导致的业务中断,容器云的好处显而易见。
由此可见,容器云为开发者进行构建发布应用的平台,使得企业交付集成能力更强。