做为一名软件开发者或技术爱好者,像“微服务”和“Docker”这样的术语已经不绝于耳,但你是否仍然不明白为何会有这么多相关的炒做?数据库
若是是,那就应该看看这篇文章!编程
在2000年初,咱们目击了面向服务架构(Service Oriented Architecture,SOA)的崛起,这是一种很是流行的软件架构设计范式。简而言之,SOA是一种软件架构模式,用于构建大型的企业应用程序,这些应用程序一般要求集成多种服务,而每种服务使用不一样的平台和编程语言来构建,并经过通用的通讯机制进行交互。性能优化
如下是面向服务架构(SOA)的简单图示:服务器
架构
让咱们以网店为例。咱们知道,不少电商网站均可以经过多种设备访问,因此这些网站一般都为笔记本电脑和移动设备提供了不一样的用户界面。并发
咱们也知道,多个操做或服务彼此依赖,以确保应用程序的正常运行。其中一些服务负责建立帐号、显示产品目录、创建和验证购物车、生成帐单、确认订单、完成支付等。负载均衡
在单体应用程序中,全部这些服务都在同一个应用程序层上运行,所以这个电子商务网站的软件架构以下所示:编程语言
微服务架构能够被认为是对SOA的特殊化,也是一种能够克服单体架构缺陷的替代模式。分布式
在微服务架构中,咱们专一于将应用程序模块化,将其分解成较小的独立服务,这些服务可独立于其余服务或整个应用程序自己而构建、部署、伸缩和维护。这些独立服务被称为微服务,所以这种架构被称为微服务架构。模块化
除了软件架构模式的发展以外,咱们还看到Docker和Kubernetes等新技术的出现,用于支持咱们的软件基础设施,实现对可伸缩产品和服务的高效管理。咱们已经从硬件虚拟化发展到容器化。
或许你会想,这意味着什么?
让咱们借助下图来理解IT基础设施领域的发展:
第一张图显示的是一台物理机器或一台硬件服务器。一般,咱们在构建应用程序时使用的是宿主操做系统提供的资源,在部署应用程序时也使用了相同的模式。但若是你想扩展应用程序该怎么办呢?在某些时候,你可能须要另外一台硬件服务器。而随着数量不断增长,成本和其余资源(如硬件和能源消耗)也会随之增长。
此外,你可能会想,是否有必要在任什么时候候都使用全部的硬件资源和操做系统?固然不是。既然这样,那么为何还须要这么庞大的基础设施呢?
这个问题促成了硬件虚拟化的发展,因而虚拟机(VM)出现了,咱们经过虚拟机来优化IT基础设施。如你在第二张图中看到的,虚拟机具备本身的客户操做系统,运行在单个物理机或宿主操做系统中。咱们所以可以运行多个应用程序,而无需安装大量物理机。宿主操做系统能够确保在不一样虚拟机之间进行系统性的资源分配和负载均衡。
虚拟机下降了软件维护的难度和成本,不过仍然能够进一步优化。例如,并不是全部的应用程序在客户操做系统环境中都会按预期运行。此外,即便是运行简单的进程,客户操做系统也须要大量资源。
这些问题促成了下一个创新:容器化。与特定于操做系统的虚拟机不一样,容器特定于应用程序,由于更加轻量级。此外,虚拟机能够运行多个进程,而容器做为单个进程运行。因而:
咱们已经了解了IT软件基础设施的演变,接下来可能想知道如何实现以前讨论过的微服务架构和容器化?答案是:Docker。
Docker是全球领先的软件容器化平台,它将微服务封装进咱们所说的Docker容器,而后进行独立的维护和部署。每一个容器都将负责一个特定的业务功能。
为了更深刻了解Docker,让咱们之前面讨论过的电子商务网站为例。咱们知道它拥有多项业务和服务,例如建立帐号、显示产品目录、创建和验证购物车等。在微服务架构中,全部这些均可以视为微服务并封装在Docker容器中。可是,为何要这样作?
其中一个缘由是为了确保开发和生产环境之间的一致性。例如,假设有三位开发人员正在开发此应用程序,他们每一个人都有本身的开发环境。其中一个开发人员可能在他的机器上运行Windows操做系统,而第二个开发人员可能运行Mac OS,第三个开发人员会更喜欢基于Linux的操做系统。他们每一个人都须要花费数小时的时间将应用程序安装到各自的开发环境中,而且须要作额外的工做将它们部署到云端。这一过程并不那么顺畅,在将这些应用程序部署到云基础设施上时,他们之间老是会发生摩擦。
借助Docker,可使应用程序独立于主机环境。由于采用了微服务架构,因此如今能够将每一个服务封装到Docker容器中。Docker容器是轻量级的,而且资源是隔离的,经过它能够构建、维护、发布和部署应用程序。
在此我向你们推荐一个Java高级群 :725633148 里面会分享一些资深架构师录制的视频录像:(有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构)等这些成为架构师必备的知识体系 进群立刻免费领取,目前受益良多!