微服务为何必定要用docker

引言

早在2013年的时候,docker就已经发行,然而那会仍是不多人了解docker。一直到2014年,Martin Fowler提出了微服务的概念,两个不相干的技术终于走在了一块儿,创造了今天的辉煌!
近几年来,不少互联网关系开始跟风,构建docker+微服务的架构体系。然而,根据笔者观察发现,有些童鞋在使用过程当中,只是会用,而根本不了解为何使用docker,反正对他们来讲,公司让用就用!而某些公司呢,虽然用上了docker,然而运维方式并无发生改变,白白浪费了docker的大好性能!
所以,才有了本文的诞生。本文不会教你怎么去用什么docker的api,毕竟官网document很全面,而是去讲解docker的优势,进而说明为何适合微服务的架构!web

正文

这里必需要先说明物理机、虚拟机、容器三者的优缺点。笔者不想去列一堆的概念,直接借用知乎的一个回答,回答地址为:
https://www.zhihu.com/question/48174633/answer/229253704
这里借用一下这位大神的三张图,他的回答就三张图!sql

基本概念

所谓的物理机就是下面这样的别墅
docker

那么虚拟机机就是下面这样的套房
api

最后就是咱们的容器,就是下面这样的胶囊公寓
tomcat

那么,专业的说法就是,容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序能够在几乎任何地方以相同的方式运行。容器之间是共享同一套操做系统资源的,因为容器是共享主操做系统的内核,所以就没法在服务器上运行与主服务器不一样的操做系统,也就是说不能再Linux的服务器上运行Windows。就如上面哪一个图同样,每一个胶囊容器是公用一个厕所,厨房,每一个胶囊内没法再构建出本身的厕所和厨房!服务器

容器的优点

隔离强

过去:曾记得12年那会,部门要上一个项目。那会,我是这么干的。直接去线上服务器,拷贝一个tomcat,而后改端口号,而后部署应用到webapps文件夹下,重启就好。并且我能够摸着良心说,如今还有不少传统企业是这么作的。
那么这么作的缺点?
很明显,应用之间相互影响。一个应用出现问题,CPU100%了,这个服务器上的其余应用一块儿凉凉。一个大型应用拆分为几十个微服务,分别交由不一样的团队开发,不一样团队之间水平良莠不齐。若是还采用这种部署方式,你的应用和某个坑爹团队的应用部署在了同一台服务器上,至于结果,我相信你懂的。架构

如今:用上了docker容器后,将Docker能够将咱们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源。容器之间达到进程级别的隔离,在容器中的操做,不会影响道宿主机和其余容器,这样就不会出现应用之间相互影响的情形!并发

可移植性

过去:曾几什么时候咱们和测试MM之间聊天内容是这样的app

开发:"你去测试环境上,按照开发环境同样,再去搭三套同样的测试环境!"
测试:"我....."
几个小时过去了...
测试:"你帮我看看,为何启动报错,是否是漏配了什么参数?"
开发:"我...."
运维

因而接下来几个小时就这么愉快的和测试mm一块儿聊天中过去了!!嗯,我相信有些公司是为了解决开发的单身问题,才不使用docker,用心良苦!

然而,和运维GG之间聊天通常是这样的

运维:"开发这群脑残,发布的新war包,又把生产搞挂了!"
开发:"这帮运维傻叉么,我本地好好的,怎么一上生产就不行了!"
...

因而接下来的几个小时,就在和运维之间的撕逼中过去了!嗯,最终苦的是用户啊!

如今:自从用上docker容器后,能够实现开发、测试和生产环境的统一化和标准化。镜像做为标准的交付件,可在开发、测试和生产环境上以容器来运行,最终实现三套环境上的应用以及运行所依赖内容的彻底一致。
在如今微服务的架构中,一个应用拆成几十个微服务,每一个微服务都对应有开发、测试、生产三套环境须要搭建。本身算算,若是采用传统的部署方式,有多少环境须要部署。曾听闻某公司在新建一个项目的时候,要花整整一个礼拜来搭建环境,简直是惨不忍睹!

什么,你和我说,大家用上了docker,却还存在这些问题?
笔者曾见过某些公司是这么用docker的。确实虚拟化出容器了,而后在容器上创建ssh server。接下来就厉害了,部署方式彻底没变,直接连上容器,一切部署照旧!对此,我也是一言难尽啊!大家这是给领导搭的docker么?

轻量和高效

过去:在2016年的时候,那会在另外一家大厂工做。这家稍微规范一点了,一个应用部署在一个虚拟机上!当时最大的体会就是一个,虚拟机很是重,构建速度慢,且占用资源多,一台物理机上只能起十来个虚拟机!

如今:
和虚拟机相比,容器仅须要封装应用和应用须要的依赖文件,实现轻量的应用运行环境,且拥有比虚拟机更高的硬件资源利用率。在微服务架构中,有些服务负载压力大,须要以集群部署,可能要部署几十台机器上,对于某些中小型公司来讲,使用虚拟机,代价太大。若是用容器,一样的物理机则能支持上千个容器,对中小型公司来讲,省钱!

笔者注:笔者一直以为这个特性只是一个障眼法。
好比,你说容器启动速度快?难道你工做中吃饱了撑着没事干,一直重启虚拟机么?
你说虚拟机消耗资源多?绝大部分公司的服务器资源利用率应该都不到 50%,大量的CPU、内存、本地磁盘都是常年浪费的,因此 虚拟机 的额外开销不过是浪费了本来就在浪费的资源罢了。因此笔者认为,对于传统应用来讲,使用和不使用Docker可能并不能直接给企业带来好处,相反使用中遇到了问题确定会给企业带来麻烦,对于传统企业来讲,不要盲目跟风,VM虚拟机其实够用了!。

总结

在技术演进中,docker只是趋势,并非结果。相信在将来,必定有更高大上的部署架构出现!


欢迎工做一到五年的Java工程师朋友们加入Java架构开发:760940986 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用本身每一分每一秒的时间来学习提高本身,不要再用"没有时间“来掩饰本身思想上的懒惰!趁年轻,使劲拼,给将来的本身一个交代!

相关文章
相关标签/搜索