我公司的代码在过去的几年中一直是一块巨石,我的管理层希望我将项目的订单路由方面移到自己的微服务中。我成功地将其删除了,并编写了一个脚本,该程序生成该程序的.jar (SNAPSHOT),然后将其上传到Google Datastore存储桶中,然后将GCE实例指向该.jar。

如果我对docker的理解是正确的,那么这在语义上就是docker的作用,为您的应用程序提供稳定的“图像”。我知道Kubernetes在与docker一起使用时可以帮助扩展你的应用程序,但GCE的负载平衡是否也能实现这一点?

将我的解决方案转移到docker的推动力是什么?

我的PoC使用.jar和Datastore在GCE上工作

将SpringBoot与Java8和gradle一起使用。

分析解答

将Docker用于Microservices的优点

将Docker用于Microservices的优点

Google Compute Engine

想象一下,你的web开发团队中有一个使用Mac的John Doe。 Jane Doe是John的co-worker,他在Windows上工作。最后,你的团队的第三个成员 - 另一个Doe - Jason Doe已经决定他在Debian上的表现最好。这三个(令人惊讶的无关)开发人员使用三种不同的环境来开发相同的应用程序,每个环境都需要自己独特的设置。每个开发人员都会参考20页有关安装各种库和编程语言的说明,并开始运行。尽管如此,library和语言几乎不可避免地会在这三种不同的开发环境中发生冲突。再添加三个环境 - 登台,测试和生产服务器 - 您就开始了解确保开发,测试和生产环境的一致性是多么困难。

microservices和Docker与上述情况有什么关系?

当您构建单片应用程序时,我们刚刚描述的问题是相关的。如果您决定采用现代趋势并开发microservices-based应用程序,情况会更糟。由于microservices是self-contained,独立的应用程序单元,每个都只满足一个特定的业务功能,因此它们本身可以被视为小型应用程序。如果您为应用程序创建了十几个microservices,会发生什么?如果您决定使用不同的技术堆栈构建多个microservices,该怎么办?您的团队很快就会遇到麻烦,因为开发人员必须管理比传统单片应用程序更多的环境。

但是有一个解决方案:使用microservices和容器封装每个微服务。 Docker可以帮助您管理这些容器。

Docker只是一个容器化工具,最初构建在Linux容器之上,为处理容器化应用程序提供了一种更简单的方法。我们将回顾Docker的优势,并了解它如何帮助我们实施microservices。

Docker对Microservices的好处

作为虚拟化的替代方案,容器化一直有可能改变我们构建应用程序的方式。 Docker作为一种容器化工具,经常与虚拟机进行比较。

引入虚拟机(VMs)以优化计算资源的使用。您可以在单个服务器上运行多个VM,并在单独的虚拟机上部署每个应用程序实例。使用此模型,每个VM为单个应用程序实例提供稳定的环境。但遗憾的是,当我们扩展应用程序时,我们很快就会遇到性能问题,因为虚拟机仍会占用大量资源。

下图显示了虚拟机管理程序用于在同一服务器上运行多个操作系统

简而言之,虚拟机管理程序有助于减少运行多个操作系统所需的资源。

由于microservices与小型应用程序类似,因此我们必须将microservices部署到其自己的VM实例,以确保离散环境。正如您可以想象的那样,将整个虚拟机专门用于部署应用程序的一小部分并不是最有效的选择。但是,使用Docker,可以降低性能开销并在同一台服务器上部署数千个microservices,因为Docker容器比虚拟机需要的计算资源少得多。

到目前为止,我们一直在谈论管理单个应用程序的环境。但是我们假设您正在开发两个不同的项目,或者您需要测试同一个应用程序的两个不同版本。在这种情况下,应用程序版本或库(用于项目)之间的冲突是不可避免的,并且在同一个VM上支持两个不同的环境是一个真正的痛苦。

Docker如何胜过虚拟机 与虚拟机的工作方式相反,使用Docker,我们不需要不断设置干净的环境,以避免冲突。使用Docker,我们知道不存在冲突。 Docker保证应用程序microservices将在与操作系统完全独立的自己的环境中运行。

感谢Docker,团队中的每个开发人员都不需要仔细遵循20页的system-specific操作指令。相反,一个开发人员可以使用所有必需的库和语言创建一个稳定的环境,只需将此设置保存在Docker Hub中(稍后我们将详细介绍Hub)。其他开发人员只需加载设置即可拥有完全相同的环境。可以想象,Docker可以为我们节省大量时间。

如果您使用Google,您可能会发现使用Docker的其他好处,例如快速开发速度和技术堆栈方面的自由选择。但我们会说人们谈论的其他好处与Docker本身无关。实际上,microservices-based架构可以让您快速开发新功能,并为每个微服务选择您喜欢的任何技术堆栈。

我们可以总结Docker的优势如下:

更快的开始时间。 Docker容器在几秒钟内启动,因为容器只是一个操作系统进程。具有完整操作系统的虚拟机可能需要几分钟才能加载。 更快的部署。没有必要建立一个新的环境;使用Docker,web开发团队成员只需要下载Docker image即可在不同的服务器上运行它。 更容易管理和扩展容器,因为您可以比销毁和运行虚拟机更快地销毁和运行容器。 更好地使用计算资源,因为您可以在单个服务器上运行比虚拟机更多的容器。 支持各种操作系统:您可以获得适用于Windows,Mac,Debian和其他操作系统的Docker。 现在让我们来看看Docker的架构,了解它如何帮助我们开发microservices-based应用程序。

Google Compute Engine

Google Compute Engine (GCE是一种基础架构即服务(IaaS)product,允许客户在Google的物理硬件上运行工作负载。

Google Compute Engine提供了可扩展数量的虚拟机(VMs),可用作此目的的大型计算群集。可以通过RESTful API,命令行界面(CLI)或Web控制台管理 GCE。 Compute Engine是pay-per-usage服务,最小为10-minute。没有up-front费用或time-period承诺. GCE与亚马逊的Elastic Compute Cloud (EC2)和Microsoft Azure竞争。

GCE的应用程序接口(API)为管理员提供虚拟机, DNS服务器和负载均衡功能。 VM有许多CPU和RAM配置以及Linux发行版,包括Debian和CentOS。客户可以将自己的系统映像用于自定义虚拟机。静态数据使用AEC-128-CBC算法加密。

GCE允许管理员在select区域和区域中存储和使用某些数据资源。目前, GCE有三个地区:美国,欧洲和亚洲。每个区域都有两个可用区域,每个区域都支持Ivy Bridge或Sandy Bridge处理器. GCE还为管理员提供了一套工具,可以在区域级别创建高级网络。