/ 从“微服务”说起 /
随着微服务架构应用开发的大量应用,很多IT公司纷纷推出了基于微服务架构的新产品,最开始微服务提供商把微服务部署在虚拟机里,实现微服务的隔离性。
随着IT行业高速发展,虚拟机不能进行快速扩展,无法立即对瞬时突增的负载或者流量做出反应。并且从成本考虑,使用传统的虚拟机技术,为了实现隔离性,每个应用或者微服务都必须运行在一个虚拟机里,这是操作系统和资源的重复和浪费,传统的虚拟机技术渐渐不能满足市场的需要,而容器技术开始成为市场新宠儿。
容 器
容器技术*:有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。
*来源:百度百科
通俗来讲,一个容器包含一个镜像,镜像是将应用程序本身和其需要的其他资源(如类库、其他二进制文件、配置文件等)进行打包的集合,
容器是操作系统级虚拟化的轻量级技术。
它运行在一个隔离环境中,通过宿主机的内核,独立使用宿主机的内存、CPU 以及磁盘。
/ 容器的作用 /
容器的作用是为了解决“同样代码,环境改变,无法运行”的问题,达到随时、随地、快速开展业务:
1、“运行环境改变”无影响
例如开发用的ubuntu,生产机用的redhat;
2、“软件架构改变”无影响
例如开发时用的python2.7, 但生产机上用的python3;
3、“物理设备改变”无影响
例如笔记本电脑切换到测试服务器,物理服务器切换到公有云/私有云;
容器与虚拟机关系
1、目标相同
容器与虚拟机都是通过隔离技术,构建起一套能够不依赖于具体环境而运行的应用单元;
2、实现手段不同,如图:
a、虚拟机是在物理服务器的上层用软件来模拟特定的硬件系统,虚拟机软件必须使用Hypervisor作为一个中间层;
b、容器化是共享宿主机操作系统的内核,因而不需要虚拟机技术的hypervisor中间层;
3、量级不同
a、虚拟机包括操作系统,大小一般是几个G,启动操作系统以及初始化托管应用会花费几分钟的时间;
b、容器是轻量级的,大小在M以内;性能方面,与VM相比,容器表现更加出色,并且几乎可以秒启动;
容器的优缺点
优点
1、快速:容器技术最大的优点是创建容器实例比创建虚拟机实例快得多;
2、独立:每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心同步问题;
3、版本控制:镜像中打包了版本,一个容器即可以实现自身的版本控制;
4、运行环境可移植:容器封装了所有运行应用程序所必需的相关细节,比如应用依赖以及操作系统;这就使得镜像从一个环境移植到另外一个环境更加灵活;
5、标准化: 大多数容器基于开放标准,可以运行在所有主流 Linux 发行版、Microsoft 平台等等;
6、安全:容器之间的进程是相互隔离的,这样其中一个容器的升级或者变化不会影响其他容器;
缺 点
1、庞大数量带来的复杂性
随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器;
2、资源竞争问题明显
容器共享宿主机内核,使用硬件资源,同一宿主机的多个容器之间是资源间相互竞争的关系。资源合理评估和调度非常重要;
3、基于 Linux Namespace 的机制隔离不彻底
容器技术基于Linux Namespace,在linux系统中并不是所有资源和对象都能Namespace化的,例如时间,如果在虚机修改时间,会发现宿主机的也会改变;