• GIS+=地理信息+容器技术(1)——容器技术概述


    --------------------------------------------------------------------------------------

    Blog:    http://blog.csdn.net/chinagissoft

    QQ群:16403743

    宗旨:专注于"GIS+"前沿技术的研究与交流,将云计算技术、大数据技术、容器技术、物联网与GIS进行深度融合。探讨"GIS+"技术和行业解决方式

    转载说明:文章同意转载。但必须以链接方式注明源地址,否则追究法律责任!

    --------------------------------------------------------------------------------------


    题记

    假如我们须要部署一个Webserver,我们须要做什么样的工作呢?

    1、申请、扩展、购买硬件server资源;或者租用或购买VPS(公有云虚拟云主机)

    2、安装操作系统(Windows或者Linux)

    3、部署Webserver软件(Apache或者Nginx)

    4、部署支持Web所需的开发环境(PHP、Python等)以及数据库(MySQL)

    5、有些还须要在某些框架开发(Python的Django)

    6、部署代码到Webserver软件的指定文件夹

    7、配置公网IP地址

    当然,走到这一步我们会感觉,看上去是比較麻烦。只是现实中我们有成熟的技术来解决这些问题啊,比如虚拟化镜像,可是我们仍然会有非常多问题须要解决。比如:

    • 1、同样软件环境的多个server安装(比如我们为了负载均衡)
    • 2、不同软件环境server的安装(比如我们的Python环境,有的须要2.7。但有的需求3.4)
    • 3、不同硬件环境的同样软件环境的安装(比如酷睿1的CPU不能满足需求。升级到酷睿5却没有同样的OS和软件环境)
    这些都是我们所面临的问题,而虚拟化镜像就不能解决全部问题,他能够非常好的解决1和3。可是并不能同一时候解决2的问题。那么我们就能够通过容器技术来解决全部的问题。

    容器技术



    容器技术就是一种系统主要的虚拟化(System-level virtualization),它同意在同一个硬件环境和内核环境下。同意多个独立的用户空间实例的同意,多个User Space共享操作系统的Kernal。而我们所说的User Space事实上就是一个个的容器。

    常见的SLV的解决方式包含:LXC、OpenVZ、Docker、Lmctfy。其它三个我们都有所耳闻,关于Lmctfy事实上是Google开源的容器虚拟化的实现,据说Google公司内部每周都会创建或者销毁近20亿个容器。

    容器的核心技术

    1、Cgroups限制容器的资源使用
    事实上Linux内核本身就提供限制、记录和隔离进程组所使用的资源。通过不同的子系统(blkio、CPU等)记录对不同资源使用的控制和记录。

    root@controller:/sys/fs/cgroup/cpu# ls
    cgroup.clone_children  cpu.cfs_period_us  cpu.stat           tasks
    cgroup.procs           cpu.cfs_quota_us   notify_on_release  user
    cgroup.sane_behavior   cpu.shares         release_agent
    root@controller:/sys/fs/cgroup/cpu# cat cpu.stat
    nr_periods 0
    nr_throttled 0
    throttled_time 0
    



    2、NameSpace机制,实现容器间的隔离
    因为我们能够在同一个OS上面。实现N个容器的同步执行,所以我们一般通过NameSpace机制来实现容器间的隔离。包含下面相关參数:
    •pid。容器有自己独立的进程表和1号进程
    •net,容器有独立的networkinfo
    •ipc。在ipc通信时,须要增加额外信息来标识进程
    •mnt。每一个容器都有自己唯一的文件夹挂载
    •utc。每一个容器有独立的hostname和domain


    3、Chroot。文件系统的隔离
    相同,我们知道一提起Linux操作系统。有Redhat,有Ubuntu,有Suse。有CentOS,不同Linux版本号基本上在同一Linux内核,仅仅是他们的Root file system不同,容器也是一样,他们有基于容器须要的类似于Root Fs的文件系统,能够实现基于同一个宿主机RootFS,并且还有容器自身不同的Root文件。


    容器VS.虚拟机

    不论什么提起容器的文件都不免会得到一个疑问。既然最早我们接触虚拟机的概念,如今又讲到容器,怎样来差别两者呢。两者是互相替代关系还是能够互补呢?

    虚拟机

    虚拟机是执行在物理宿主机上的软件抽象。配置一个虚拟机就像是购买一台计算机:你须要定义你想要的 CPU 数目、RAM 和磁盘存储容量。配置好了机器后,你为它载入操作系统。以及你想让虚拟机支持的不论什么server或者应用程序。

    虚拟机同意你在一台硬件主机上执行多个模拟计算机。你充分利用硬件资源。

    这是虚拟机的优势。


    可是虚拟机也有自己的不足:

    全部分配给一个虚拟机的资源,不管是什么。都是专有的。

    这里没有资源的流动。每台虚拟机拥有分配给它的全部资源。让它们跑起来须要非常长时间。假设你处于基础设施须要高速增长的情形,即使添加虚拟机是自己主动的。你仍然会发现你的非常多时间都浪费在等待机器上线。




    容器

    容器是一个Linux 进程,Linux 觉得它仅仅是一个执行中的进程。该容器进程也分配了它自己的 IP 地址。一旦给予了一个 IP地址,该进程就是宿主网络中可识别的资源。

    容器/进程以动态、合作的方式共享主机上的资源。CPU、内存和存储空间的分配是动态的,和典型虚拟机的静态方式不同。因为容器作为OS的一个进程,所以容器能很高速地启动。


    总结



    事实上如今对于两者而言,并没有绝对的替代关系。如今慢慢的把传统虚拟化当成云计算的IaaS,提供基础设施服务,容器很多其它的是在PaaS层。也就是执行在虚拟机内,提供服务。


  • 相关阅读:
    正则表达式match方法和search方法
    正则表达式(基础篇1)
    动画
    重绘和重排(回流)
    数组常用的10个方法
    css3只需一招,将网站变成灰色的
    Python-类的几种调用方法
    Codeforces Global Round 8 C. Even Picture(构造)
    Codeforces Global Round 8 D. AND, OR and square sum(位运算)
    Codeforces Round #650 (Div. 3) C. Social Distance
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7098360.html
Copyright © 2020-2023  润新知