zoukankan      html  css  js  c++  java
  • 容器技术

    Technorati 标签: 容器

    什么是容器

    在一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的网站应用,我们当然希望网站的资源相互隔离,这样一个应用崩溃了,也不会影响其他的应用的运行。

    要实现资源的隔离,最容易想到的当然是开若干虚拟机,在其上安操作系统,然后搭建应用。然而一台主机上,一般就能开10~15个虚拟机,如果在这台机器上开 500 个虚拟机,这台服务器估计早就不堪重负了。

    有没有资源隔离能力不错,而且虚拟化开销还要小的方式,虚拟机实在太重了。

    我们来看一下问题的症结,虚拟机在硬件平台上运行一层软件,抽象出CPU、内存等资源,然后可以在其上运行不同的操作系统、软件等。这种全虚拟化的形式,还有操作系统,当然很

    于是我们引入了容器,它只是把应用和运行时所需要的依赖打包为镜像,所以我们只需要开一个进程就可以运行这个镜像。

    现在容器只是创建一个容器进程无需启动操作系统,这个过程只需要秒级的时间。而且因为可以轻量,可以在非常轻松的让让几十个服务在服务器中跑起来。

    f189b80b-745b-4e9a-921d-0cee07577f91

    下图是虚拟机与容器的对比图,容器直接运行在Linux操作系统上,共享操作系统、依赖库等。
    556ef9cb-238a-4630-a1d1-22f8e10a63f5

    而且容器是直接在CPU本地运行指令,而不需要通过硬件辅助虚拟化等,所以效率会更高,启动会更快,更轻量。

    可以将容器理解为沙盒,每个容器运行一个应用,而且相互隔离,但是容器之间也可以相互通信。优点是:

    • 将应用以及运行的环境打包成镜像,所以部署更快。
    • 资源利用率高:因为不需要Hypervisor层支持,所以性能更好。
    • 便于迁移:可以在任意平台上运行。

    容器属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。

    容器带来的额外的东西

    在文章微服务里面我们讲过,所谓微服务,就是将单个功能模块做为一套小型服务进行开发,可以通过自动化部署独立部署,而且实现资源的有效隔离。

    现有的容器技术为微服务提供了很好的实现形式,微服务实例运行在容器上运行,实现了服务器资源的有效隔离。

    而且用户的应用环境非常多,很可能出现开发环境与用户实际环境版本不同,或者说依赖不同,这样应用在运行的时候会出现各种问题。所以容器可以将应用所有的依赖环境进行打包,保证开发和生产的环境一致。做到“一次封装,到处运行”,这又和DevOps结合起来了。

    当然与微服务一样,容器也有很多的缺点,比如复杂性增加了,需要Linux的支持等。

    参考

    容器技术概览

    也可以参见简书主页:https://www.jianshu.com/u/482f183ec380
  • 相关阅读:
    为什么接口类型可以直接new?
    Eclipse查看JDK源码
    模板模式与策略模式/template模式与strategy模式/行为型模式
    [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal(根据二叉树的前序和中序遍历构建二叉树)
    [LeetCode] 114. Flattern Binary Tree to Linked List(将二叉树扁平化成单链表)
    [LeetCode] 208. Implement Trie (Prefix Tree)(实现字典树)
    [LeetCode] 337. House Robber Ⅲ(偷家贼之三)
    [LeetCode] 621. Task Scheduler(任务调度器)
    [LeetCode] 394. Decode String(解码字符串)
    [LeetCode] 11. Container with Most Water(盛水量最多的容器)
  • 原文地址:https://www.cnblogs.com/dy2903/p/8331020.html
Copyright © 2011-2022 走看看