什么是容器服务_您为什么应该使用微服务和容器?

0635b346ec9f6ab06ac231d2bc90878e.gif

什么是微服务和容器?

首先,什么是微服务?微服务是将应用程序拆分为多个服务的一种架构类型,这些服务具备构成整个应用程序的细粒度功能。每个微服务将具备针对您的应用程序的不同逻辑功能。与应用程序的所有组件和功能都在单个实例中的单体架构相比,微服务是应用程序架构领域一种更为现代的方法。您可以参考下图中单体架构与微服务架构的比较情况。

07f1c63ad89ed59011990045e464681c.png

07f1c63ad89ed59011990045e464681c.png

我们要将微服务放置在哪里?在容器中。容器是存放软件的包,里面包含运行软件所需的一切内容,比如代码、依赖关系、库、二进制文件等等。 Docker 是一种构建和运行容器的流行工具,但是 Kubernetes 正快速成为行业标准,用于编排企业环境中的多个容器。与虚拟机相比,容器可以共享操作系统内核,而不是像在一个主机上构建多个虚拟机那样拥有完整的副本。虽然可以将微服务放置在多个虚拟机中,但在这种情况下通常会使用容器,因为容器占用的空间更少,启动速度也更快。

为什么使用微服务架构?

微服务架构是为解决人们在单体应用程序中遇到的问题而创造的。微服务已被广泛使用,一些大型网站已将他们的单体应用程序转变为微服务。使用微服务架构的一些好处是:

  • 与单体应用程序中的大型代码库相比,开发人员只需处理小型代码库。  当应用程序组件松散耦合时,开发人员可以轻松理解源代码,而不会减慢开发速度。如果使用的代码行数更少,您的 IDE 的速度显然会更快。开发人员无需处理各种功能的复杂性和依赖关系,这种情况只会在单体应用程序中出现。

  • 开发人员的职责将会更加明确。  可以按照应用程序的组件或微服务来分配团队工作。代码复查速度将会加快。与单体应用程序相比,更新速度将会加快,而且无需构建和部署一切内容。

  • 应用程序的技术堆栈可以通过微服务有所不同。 应用程序不再需要依赖一种语言或库。只要开发人员认为合适,微服务就可以利用多种不同编程语言。可以使用如下图所示的多语言微服务。b0d871485b5385fba63abc146ae7cbb7.png

    b0d871485b5385fba63abc146ae7cbb7.png

  • 持续交付将变得更加容易。  对于简单变更,使用微服务就无需像单体应用程序那样再次重新部署一切。您可以选择仅重新构建和部署需要更新的微服务。频繁更新的速度将会加快。

  • 可扩展性与每个微服务无关。 您可以选择根据应用程序所需的资源扩展它的每个组件。无需像单体应用程序那样为一切内容构建多个实例。扩展微服务将会有效利用可用资源,而不是像在单体应用程序中那样拥有整个应用程序的多个副本。589fc8668eb9cc4f08e4ed1e45f6f07c.png

    589fc8668eb9cc4f08e4ed1e45f6f07c.png

  • 数据可以分散化处理。 您可以选择为微服务使用不同的数据库/存储器。如果比起关系数据库,您的微服务更适合使用非关系型数据库,那么就可以选择这种数据库。微服务也可能只需要简单的密钥存储数据库,比如 Redis。如下图所示,您可以选择组合使用 Cloudant、MySQL 和 MongoDB。您可以利用不同的数据库来存储不同的数据类型。2308f97f504dc98d9ac0a8b8c2ce5d34.png

    2308f97f504dc98d9ac0a8b8c2ce5d34.png

  • 隔离故障。  一个微服务中的错误或缺陷不会使整个系统宕机。如果采用松散耦合的组件,您的应用程序中的微服务出现错误时,其他微服务不太可能受到影响,因为它们都在自己的容器中,不会完全依赖彼此。而对于单体应用程序,如果没有正确找出缺陷或错误,就会使整个应用程序流程宕机。

存在哪些弊端?

在使用微服务解决单体架构的一些问题时,每种微服务都存在一系列问题。如果您试图将单体应用程序拆分为微服务,那么第一个挑战就是如何拆分。您可以选择将它们拆分为多个业务功能,比如一个微服务处理批次,另一个微服务处理支付服务。最后,您的组件应该只具有一小部分的功能或责任。

我在微服务架构中看到的一些问题如下:

  • 一旦微服务数量增长, 就会难以进行跟踪 。持续集成和持续交付的初始设置工作也并非易事,因为您需要处理拥有多个微服务所带来的额外复杂性。

  • 复杂性 。微服务需要加强协作,尤其是在有多个团队参与的时候。如果需要与其他微服务交互,那么微服务还会引进更多的网络调用,而在单体应用程序中则不会出现这种情况。部署微服务并不像部署应用程序的一个实例那样简单。您还需要考虑其他很多问题:如何处理各个微服务之间的通信,解决错误以避免中断其他微服务,以及在每个组件中添加更多测试用例。

  • 找到并跟踪应用程序中的缺陷/错误。如果您的微服务只有一条路径,那么查找起来会比较容易,但如果一个微服务与其他多个微服务进行通信,仅查找错误就会耗费大量时间。6dc9a7df15136616c4411345da60e3f4.png

    6dc9a7df15136616c4411345da60e3f4.png

  • 进行微服务路由需要完成更多工作。 您需要花时间来配置和控制微服务的流动。您还需要持续跟踪微服务的版本,并解决其路由问题。9e9b5de1c37e39b9e94f1a036e06c4e0.png

    9e9b5de1c37e39b9e94f1a036e06c4e0.png

  • 微服务会消耗比单体应用程序更多的资源。 虽然我提到的优点之一就是可以更出色、更有效地利用可扩展性和资源,但是所有组件都需要有自己的实例和容器,这可能就会导致内存和 CPU 使用量增多。

可帮助您使用微服务的工具

Kubernetes

免费试用 IBM Cloud

利用IBM Cloud Lite 快速轻松地构建您的下一个应用程序。您的免费帐户从不过期,而且您会获得 256 MB 的 Cloud Foundry 运行时内存和包含 Kubernetes 集群的 2 GB 存储空间。了解所有细节并确定如何开始。如果您不熟悉 IBM Cloud,请查阅 developerWorks 上的 IBM Cloud Essentials 课程 。

Kubernetes 是一个容器编排平台,支持部署、扩展和管理所有容器。它可以自动部署容器化的微服务。这就更便于管理应用程序的所有组件和微服务。您可能会希望了解 Docker 如何实现微服务容器化。IBM 公开发布了产品 IBM Cloud Kubernetes Service ,可以为您管理集群。

Istio

Istio 能够解决微服务中的一些弊端。Istio 是一种服务网格,可进一步帮助您管理微服务。Istio 可以安装在 Kubernetes 之上,帮助您跟踪和监控微服务。同时,还可以帮助您快速跟踪应用程序中可能存在的错误和缺陷。Istio 还可以管理微服务的流量,比如管理和控制流动。可以轻松配置路由。Istio 也可以在微服务中提供安全保障,比如采用相互 TLS,或限制它访问外部服务。您也可以将 Istio 安装到 IBM Cloud Kubernetes Service 上。

总结

根据我的个人经验,使用容器编排平台是通过微服务构建应用程序的必要条件。Kubernetes 是广受开发人员欢迎的一种平台,因为它可以快速将应用程序从开发阶段带入生产环境。更棒的是,它是开源的!

对于开始构建自己的应用程序的开发人员来说,他们应该确定使用微服务是否比使用单体应用程序对他们更有利。他们应该考虑应用程序的长期易用性和可扩展性。从单体架构着手完全没有问题,但是一旦应用程序规模扩大,将它们拆分为微服务的难度只会更大。在这种情况下,在初期开发阶段就从微服务开始显然会更加有利。对于现有的单体应用程序,开发人员应该考虑以何种方式分离应用程序中的哪些组件。

尽管存在一些弊端,但微服务在开发人员和企业中仍然很受欢迎,因为微服务对于应用程序和满足用户需求都极为有利。一旦使用了合适级别的微服务,借助它的灵活性,开发人员和企业就可以快速开发或更新应用程序。

本文翻译自: Why should you use microservices and containers? (2018-11-01)

参考资源

  • 查看 IBM Cloud Container Registry 入门 ,了解更多

  • 相关文章: 快速创建并部署 Spring 微服务

  • Code Pattern: 使用 Istio 管理微服务流量

  • Code Pattern: 在 Kubernetes 上部署 Spring Boot 微服务

19067d8561a3c2131554fa96ff75a487.png

目前100000+人已关注加入我们

11b3f28b8a2354f3dbde4e4540417482.gif 357fd4eadca78ac47c611db80940a680.gif c9507f82f79c83f8d4055ba48f4d00b2.gif 72d81066abcfd65bb9bf9d53013b4ef0.gif d965dcc5d6aed33af0df5e745ef68b98.gif f79f5da5223fa8b6dd0026133c46821a.gif 25cd19f947572dda4f1ed58db877e052.gif 11adf7cdfd7cd850ab3528b82e99e694.gif

0852a62558ba0e3b563224f8dedbf748.gif 36bcfd9f2779d3c76cf4c73ac2d6ec14.gif e0181478565fbb64016e45d4a8b966d9.gif d5c36bb3318365ef015ae5cc8e5d9723.gif dcd629575251d3137e503e0ca7933f23.gif b1acf002e3925b74983686347a33b8da.gif cafdea0444d6b6139a3192f591e4e1c0.gif d965dcc5d6aed33af0df5e745ef68b98.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
容器化和微服务是两个不同但相互关联的概念。 容器化是一种将应用程序及其所有依赖项打包到独立、可移植的容器中的技术。容器化技术(如Docker)可以将应用程序和其依赖项(例如库、配置文件等)打包为一个整体,并在不同的环境中运行,而无需担心环境之间的差异。这使得应用程序更易于部署、管理和迁移。 微服务是一种以小型、独立的服务单元来构建应用程序的架构风格。每个微服务都运行在自己的进程中,并通过轻量级的通信机制(如HTTP或消息队列)进行交互。每个微服务都负责特定的业务功能,可以独立开发、部署、扩展和维护。微服务架构可以提高系统的灵活性、可扩展性和可维护性。 容器化和微服务之间存在紧密的关系,主要体现在以下几个方面: 1. 部署和管理:容器化技术可以将每个微服务打包为独立的容器,使得微服务的部署和管理更加简单和灵活。每个容器可以独立运行,并可以按需扩展和更新。 2. 独立性和隔离性:通过容器化,每个微服务可以在自己的容器中运行,并且相互之间存在隔离。这使得微服务之间的变更、故障和资源使用可以相互独立,不会对其他微服务产生影响。 3. 弹性和可扩展性:容器化和微服务架构使得系统更具弹性和可扩展性。每个微服务可以根据需求进行独立的水平扩展,而不会对其他微服务产生影响。容器化还可以自动化地进行扩展和缩减容器实例的数量。 4. 环境一致性:通过容器化,可以确保每个微服务在不同环境中具有相同的运行环境,避免了环境之间的差异导致的问题。这使得微服务的迁移和部署更加简单和可靠。 综上所述,容器化和微服务是一对互相促进的概念,容器化技术可以为微服务架构提供更好的部署、管理和扩展能力,而微服务架构则可以充分发挥容器化技术的优势,实现系统的弹性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值