Docker和微服务的崛起

做为一名软件开发者或技术爱好者,像“微服务”和“Docker”这样的术语已经不绝于耳,但你是否仍然不明白为何会有这么多相关的炒做?数据库

若是是,那就应该看看这篇文章!编程

SOA“简史”

在2000年初,咱们目击了面向服务架构(Service Oriented Architecture,SOA)的崛起,这是一种很是流行的软件架构设计范式。简而言之,SOA是一种软件架构模式,用于构建大型的企业应用程序,这些应用程序一般要求集成多种服务,而每种服务使用不一样的平台和编程语言来构建,并经过通用的通讯机制进行交互。性能优化

如下是面向服务架构(SOA)的简单图示:服务器

架构

关键点

  1. SOA是大型软件产品(如企业应用程序)的首选。
  2. SOA侧重于将多个服务集成到单个应用程序中,而不是强调模块化应用程序。
  3. 在SOA中,用于服务间交互的通用通讯机制被称为企业服务总线(Enterprise Service Bus,ESB)。
  4. 基于SOA的应用程序本质是单体。也就是说,单个应用程序层包含了用户界面或表示层、业务逻辑或应用程序层,以及数据库层,这些所有都集成到一个平台中。

关于“单体架构”

让咱们以网店为例。咱们知道,不少电商网站均可以经过多种设备访问,因此这些网站一般都为笔记本电脑和移动设备提供了不一样的用户界面。并发

咱们也知道,多个操做或服务彼此依赖,以确保应用程序的正常运行。其中一些服务负责建立帐号、显示产品目录、创建和验证购物车、生成帐单、确认订单、完成支付等。负载均衡

在单体应用程序中,全部这些服务都在同一个应用程序层上运行,所以这个电子商务网站的软件架构以下所示:编程语言

缺点

  1. 很显然,随着服务数量的增长,应用程序的规模将不断增加。这可能会让构建和维护应用程序代码库的开发人员不堪重负。
  2. 难以更新当前的技术栈,即便是在当前技术栈中修改一点内容也会是一场噩梦。
  3. 每一项变动都要求开发人员重建整个应用程序,十分浪费资源。
  4. 随着客户群的增长,咱们将有更多的请求须要,这将须要更多的资源。所以,创建可扩展的产品时相当重要的。对于单体应用程序,咱们只能在一个方向上进行伸缩,即垂直伸缩,而不是水平伸缩。这意味着咱们能够经过添加更多硬件资源(如内存和CPU)在单台计算机上扩展应用程序,但横向扩展(跨多台计算机)仍然是一项挑战。

救星“微服务”来了!

微服务架构能够被认为是对SOA的特殊化,也是一种能够克服单体架构缺陷的替代模式。分布式

在微服务架构中,咱们专一于将应用程序模块化,将其分解成较小的独立服务,这些服务可独立于其余服务或整个应用程序自己而构建、部署、伸缩和维护。这些独立服务被称为微服务,所以这种架构被称为微服务架构。模块化



关键点

  1. 微服务架构和SOA虽然不同,但它们确实存在一些类似之处。微服务架构被称为SOA的变体,甚至是SOA的一种特殊化。换句话说,SOA能够被认为是微服务架构的超集。
  2. 人们之因此可以在这些架构之间找到类似性,主要是由于它们都专一于构建具备松散耦合的服务。这些服务具备明确的界限,而且每一个服务都具备独立的功能集。
  3. 不一样之处在于,SOA可能意味着其余不少东西。例如,SOA适用于单体架构,重点是将系统集成在一个应用程序中,并确保代码的可复用性。但对微服务架构来讲并非这样的,微服务架构的重点是经过构建独立服务和确保产品的可伸缩性来模块化应用程序。

优势

  1. 引入关注点分离的理念,在软件应用程序开发中实现敏捷,无论是在简单的仍是复杂的领域。
  2. 微服务的独立能力或独立性带来了如下好处:
    • 将开发人员分红小团队来下降复杂性,每一个小团队负责构建和维护一个或多个服务。
    • 容许部署分块,而不是每次发生变动都要从新构建整个应用程序,以此来下降风险。
    • 增量更新或升级一个或多个服务的技术栈,而不是在一个时间点更新整个应用程序,以此下降维护难度。
    • 可使用任意的编程语言来构建服务,除此以外,还能够为每一个给定服务维护单独的数据模型。
  1. 能够构建全自动的部署机制,确保个体服务的部署、服务管理和自动伸缩。

技术的演变

除了软件架构模式的发展以外,咱们还看到Docker和Kubernetes等新技术的出现,用于支持咱们的软件基础设施,实现对可伸缩产品和服务的高效管理。咱们已经从硬件虚拟化发展到容器化。

或许你会想,这意味着什么?

让咱们借助下图来理解IT基础设施领域的发展:

第一张图显示的是一台物理机器或一台硬件服务器。一般,咱们在构建应用程序时使用的是宿主操做系统提供的资源,在部署应用程序时也使用了相同的模式。但若是你想扩展应用程序该怎么办呢?在某些时候,你可能须要另外一台硬件服务器。而随着数量不断增长,成本和其余资源(如硬件和能源消耗)也会随之增长。

此外,你可能会想,是否有必要在任什么时候候都使用全部的硬件资源和操做系统?固然不是。既然这样,那么为何还须要这么庞大的基础设施呢?

这个问题促成了硬件虚拟化的发展,因而虚拟机(VM)出现了,咱们经过虚拟机来优化IT基础设施。如你在第二张图中看到的,虚拟机具备本身的客户操做系统,运行在单个物理机或宿主操做系统中。咱们所以可以运行多个应用程序,而无需安装大量物理机。宿主操做系统能够确保在不一样虚拟机之间进行系统性的资源分配和负载均衡。

虚拟机下降了软件维护的难度和成本,不过仍然能够进一步优化。例如,并不是全部的应用程序在客户操做系统环境中都会按预期运行。此外,即便是运行简单的进程,客户操做系统也须要大量资源。

这些问题促成了下一个创新:容器化。与特定于操做系统的虚拟机不一样,容器特定于应用程序,由于更加轻量级。此外,虚拟机能够运行多个进程,而容器做为单个进程运行。因而:

  1. 咱们能够在物理机上运行多个容器,或者甚至能够考虑在单个虚拟机上运行容器。不管是哪一种状况,它均可以解决应用程序相关的问题。
  2. 容器化与虚拟化之间并非竞争关系,而是一种互补,用以进一步优化IT软件基础设施。

Docker

咱们已经了解了IT软件基础设施的演变,接下来可能想知道如何实现以前讨论过的微服务架构和容器化?答案是:Docker。

Docker是全球领先的软件容器化平台,它将微服务封装进咱们所说的Docker容器,而后进行独立的维护和部署。每一个容器都将负责一个特定的业务功能。

为了更深刻了解Docker,让咱们之前面讨论过的电子商务网站为例。咱们知道它拥有多项业务和服务,例如建立帐号、显示产品目录、创建和验证购物车等。在微服务架构中,全部这些均可以视为微服务并封装在Docker容器中。可是,为何要这样作?

其中一个缘由是为了确保开发和生产环境之间的一致性。例如,假设有三位开发人员正在开发此应用程序,他们每一个人都有本身的开发环境。其中一个开发人员可能在他的机器上运行Windows操做系统,而第二个开发人员可能运行Mac OS,第三个开发人员会更喜欢基于Linux的操做系统。他们每一个人都须要花费数小时的时间将应用程序安装到各自的开发环境中,而且须要作额外的工做将它们部署到云端。这一过程并不那么顺畅,在将这些应用程序部署到云基础设施上时,他们之间老是会发生摩擦。

借助Docker,可使应用程序独立于主机环境。由于采用了微服务架构,因此如今能够将每一个服务封装到Docker容器中。Docker容器是轻量级的,而且资源是隔离的,经过它能够构建、维护、发布和部署应用程序。

优势

  1. Docker是一款很是流行的软件,有强大的社区支持,并专门为微服务而构建。
  2. 与虚拟机相比,它是轻量级的,在成本和资源消耗方面颇具优点。
  3. 它为开发和生产环境提供了一致性,很是适合用于构建云原生应用程序。
  4. 它为持续集成和部署提供了便利。
  5. Docker可与AWS、Microsoft Azure、Ansible、Kubernetes、Istio这些流行的工具和服务集成。

在此我向你们推荐一个Java高级群 :725633148 里面会分享一些资深架构师录制的视频录像:(有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构)等这些成为架构师必备的知识体系 进群立刻免费领取,目前受益良多!

相关文章
相关标签/搜索