热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务2.0时代:SpringCloudNetflix与Kubernetes&Istio比较

自微服务架构开始兴起已近三年多了,早期的SpringCloudNetflix架构已经成熟,并已被Sp

自微服务架构开始兴起已近三年多了,早期的Spring Cloud Netflix架构已经成熟,并已被Spring Cloud整合到解决通常云问题的新解决方案中,例如, Sleuth,Zipkin , Contract 等就是这种情况。

但是现在架构趋向于朝着不同的方向发展。在这篇文章中,我们将分析迄今为止微服务架构的路径以及未来将伴随我们的 工具 和技术。

第1集:微服务的诞生

回到起源,我们必须回到2015年初,当时“微服务”的概念在西班牙开始变得强劲。微服务的第一个开发堆栈被发布,也就是取得了相对普及的Netflix堆栈,在 第一2015年3月发布 。

今天它仍然是云计算的所有解决方案包括Spring中最受关注和最受欢迎的:

微服务2.0时代:Spring Cloud Netflix与 Kubernetes&Istio比较

另外两个解决方案( Consul 和Zookeeper)使用了与Netflix堆栈的不同组件,Netflix组件包括Zuul ,Ribbon 和Hystrix 。 最初,该架构由以下部分组成:

微服务2.0时代:Spring Cloud Netflix与 Kubernetes&Istio比较

  • 配置服务器:外部化配置服务器,允许我们集中生态系统的所有配置。它不是Netflix的一部分(因为Netflix使用的是Archaius),但它是由Spring开发的。
  • Eureka :服务器,用于注册微服务和有关它们的元数据。
  • Ribbon: 用于在客户端中平衡请求的库 。它与Eureka通信以获得每个微服务的可用实例的寄存器。
  • Hystrix :使用 断路器 模式进行级联错误管理的库。
  • Zuul :将作为API网关/边缘服务的服务器,作为微服务生态系统的入口点。

如果现在我们看惯了单体巨石架构,这组架构似乎变大了,但是解决了分布式架构的主要需求:注册,集中配置,负载平衡,抵御失败...

在部署逻辑上,与微服务的使用相关联,我们使用容器解决方案进行部署,在这种情况下,我们都知道并且是市场上最受欢迎的解决方案: Docker 。

另一个问题是容器编排解决方案。我们是一个少数早期采用的 OpenShift 3 ,红帽解决方案基于Kubernetes,这是在推出 2015年6月 。

但实际情况是,当时已经有各种容器编排解决方案。当然,没有一个是非常成熟的,它们在市场上也没有多少占有率。

第2集:建立

自2015年问世以来,微服务架构迅速变得非常重要,并且随着时间的推移而逐渐增加。在云解决方案成功的推动下,作为他们的主要架构解决方案,两者都在这里相辅相成。

与任何取得成功的架构或工具一样,一系列应用程序和其他库涵盖了最初未被考虑的功能区域。这就是请求的可追溯性,这是分布式系统中的一种常见需求,它最初没有超出手动实现的解决方案。

这些和其他需求反映在完成我们生态系统的新库包中,其中一些是:

  • Sleuth:库允许我们根据标头的组合在不同的应用程序/微服务之间分布可请求的请求。
  • Zipkin :存储临时数据的服务器,引用分布式请求进行相关性和延迟研究。
  • Contract合同:库允许我们实施 消费者驱动的合同模式, 以增加我们的更改不会导致任何API条件中断的信心。

此外,演变也随之而来,不仅仅是一部分了,他们开始为其他功能定义标准堆栈,比如对记录和监控至关重要的组件也开始涌现出来。

这时,用于记录监控这些用途的工具比如(Elasticsearch - Logstash或FluentD - Kibana)成为了这些新的架构中不可或缺的部分,增加了它的受欢迎程度。

通过所有这些新工具/库包,我们享受了一个更完整的生态系统,同时比现在更加复杂,它实际上涵盖了我们所拥有的所有需求。

另一方面,在微服务架构设计中出现了非堵塞的通信需要,当时在没有一个纯粹的完整性解决办法的情况下使用Vert.x,后来Spring 5的React提供了支持。

第3集:Kubernetes的崛起

正如我们之前评论的那样,当这些新架构出现时,市场上确实没有很多容器编排解决方案。

Kubernetes,Openshift,Docker Swarm,都在2015年的1.0.0版本中出现,2016年的Mesos ...... 在市场上没有主导解决方案。

随着时间的推移,我们看起来似乎是一个明显的支配者,那就是Kubernetes,或者基于Kubernetes的 Openshift 的解决方案。

正因如此,我们已经可以发现管理解决方案Kubernetes 实现在不同的平台:谷歌的 Kubernetes引擎 ,亚马逊 AWS EKS 等。

同样,在帖子开头讨论的一些功能,例如由Ribbon,Eureka和Config Server执行的负载平衡,注册,集中配置也可由PaaS提供。那么为什么要使用Spring Cloud Netflix提供的这些功能呢?

这是几个客户经常询问我们的问题。答案很简单:在该架构的初始阶段,市场上没有建立编排解决方案。

在软件架构中包含这些部分(Eureka,Ribbon ......)使其更加便携。由于这些服务包含在工件本身中,因此可以在不同的云解决方案之间移动应用程序,而无需担心这些横向服务的耗尽。

同样,Spring Cloud Netflix提供的解决方案比云解决方案通常提供的解决方案具有更强大的功能。这些是一些额外的功能,提供:

  • Ribbon 除了允许我们实现自己的平衡算法之外,还提供不同的平衡算法,这比包含PaaS的典型Round Robin或Random提供了更多的灵活性。
  • Eureka允许我们 在注册表中包含和查阅有关实例的其他信息:网址,元数据......在PaaS解决方案中,我们通常无法选择合并到注册表中的信息。
  • Config Server为我们提供了一个分层的属性系统,允许我们查阅git存储库的各个分支和/或标签。

我们拥有一个具有所有这些可能性的架构,但我们没有充分利用它们,这通常发生在大多数客户端中:它们不需要这种高级架构功能,因为他们认为可以通过PaaS实现这些功能。

今天,Kubernetes云解决方案是在市场上占主导地位的PaaS,如果我们想想PaaS理念,那它的目的就是:从较低级别的功能/资源中抽象出来,以便应用程序可以专注于业务逻辑。所有这些功能都很清楚,它们不属于业务范围。

这让我们分离我们的应用程序,也就是我们的业务逻辑,这使得系统的各个层之间更明确的分离性质。

这些是Kubernetes可以吸收的Spring Cloud Netflix的结构特征有:

1.注册,负载平衡和健康检查(eureka和Ribbon)

Kubernetes系统中会出现的一个新Pod装载一个微服务,但与Eureka + Ribbon组合不同,负载平衡不是在客户端完成的,因此在Kubernetes中应用程序不必知道服务的所有现有实例(这是通过Eureka客户端完成的)。

在pod中的应用程序知道的是Kubernetes 服务 层,这是一个凝聚服务实例的抽象。通过这种方式,客户端调用这个服务层,该服务层将维护一个恒定的地址,并且该地址将执行特定目标实例的平衡。

Kubernetes还将负责定期进行健康检查,以检查实例的健康状况,反过来在Eureka的情况下,是由实例通知服务器是否具有正确的可用性。

2.集中配置(配置服务器)

由于Kubernetes的最新版本有可用的 configmaps 。这些允许我们将属性作为环境变量单独存储为属性文件(本地或远程)。

但是,Kubernetes仍然有一些功能无法覆盖Spring Cloud Netflix所做的功能,这将无法让我们完全分离。这些功能是级联错误管理,网关API,请求可追溯性......这就是我们进入微服务架构的下一个重要步骤。

第4集:街区新生儿

如果我们考虑微服务架构中给我们带来最多问题的那部分,大多数人都同意这些问题都与网络有关。具体而言,一切都与延迟,远程调用失败的管理,平衡,请求的可追溯性,对不存在的实例的调用或下降有关...

这些情况下的责任分为不同的层次。例如,PaaS(或注册服务)负责向我们提供健康实例列表。Hystrix负责管理外部呼叫以控制超时和管理故障情况......

在这个灰色区域,嵌套在应用层和PaaS之间,在出现更多问题的时刻,我们将在这里找到微服务架构的新革命。

Istio

Istio 是一种服务网络解决方案,基于Google在执行大规模服务方面的经验和良好实践。它与IBM和Lift共同开发,于2017年5月作为Opensource发布,他们计划每个月发布一个版本。

对于那些不熟悉服务网格概念的人来说,这里的定义似乎是最好的:

“服务网格是一个专用的基础设施层,用于使服务到服务通信安全,快速和可靠。如果您正在构建云本机应用程序,则需要一个服务网格“,Blog Buoyant: 什么是服务网格?为什么我需要一个呢?

Service Mesh 是一个在去年开始大量 涌现 的概念。这方面的证据就是Paypal或Ticketmaster这样拥有大量流量的大公司已经在使用它,而且 Envoy 和 Linkerd 已经是 Cloud Native Computing Foundation的一部分 。

在讨论为什么微服务世界将要发生这些大的变化之前,让我们看看它将如何实现。

Istio是一种工具,可以收集我们在其下层(PaaS)和紧接上方(应用程序)中放置的功能,以负责管理与网络通信相关的所有内容。

实际上,Istio并没有引入新的功能,而是将现有的功能移动到将要放置的中间层。

为此,它所做的是在我们的应用程序旁边放置一个代理,它将拦截它们的所有网络通信,管理它们以提供可靠性,弹性和安全性。

在我们的应用程序旁边放置此代理称为sidecar-proxy边车代理模式。在Kubernetes中,在我们的应用程序的容器部署的pod中,部署了一个带有这种代理的附加容器,如下图所示:

微服务2.0时代:Spring Cloud Netflix与 Kubernetes&Istio比较

Istio 默认使用Envoy 作为sidecar-proxy,它将伴随我们所有的微服务。还可以 将Linkerd用于数据平面 。

Istio在我们的应用程序的单独容器中运行的事实导致服务网格本身和应用程序之间的更大分离

此外,在从Ribbon和Hystrix等库中实现收集功能时,它可以完全免除应用程序对架构复杂性的管理。

在处理与网络通信相关的所有事情时,Istio为我们提供了大量功能,其中包括:

  • 路由请求:我们可以根据不同的标准,如源应用程序,目的,应用程序版本,请求头路由请求......此外,我们可以按百分比获得的流量或重复什么可以让我们 金丝雀部署 和 A / B测试 。
  • 运行状况检查和负载平衡:控制健康实例并使用不同的可用算法进行平衡。
  • 管理超时和断路:我们可以配置不同服务的超时以及断路,重试的配置......
  • 故障注入:为了测试我们应用程序的弹性,我们可以插入两种类型的故障:延迟和取消请求。
  • 配额管理:允许您设置呼叫限制。
  • 安全性:各种服务之间的安全通信,基于验证通信两部分的角色的访问,白名单和黑名单......
  • 监控和记录:记录,捕获服务网格指标,分布式可追溯性......

它可以部署在不同的基础架构上:Kubernetes,基于Eureka或Consul注册的环境以及很快在CloudFoundry和Mesos中注册的环境。

如果我们仔细研究它的功能,我们会发现它收集了Netflix套件的许多职责:断路和Hystrix超时管理,负载平衡Ribbon区请求......

此外,Istio与Spring Cloud已经使用的一些解决方案集成在一起,就像Zipkin的情况一样,它可以在使用Eureka作为记录的环境中工作。

它还与市场上的其他现有解决方案集成,用于公制存储,日志记录,配额管理......例如Prometheus,FluentD,Redis ......


以上所述就是小编给大家介绍的《微服务2.0时代:Spring Cloud Netflix与 Kubernetes&Istio比较》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文详细探讨了 Vue Router 和 React Router DOM 之间的主要区别,以及它们在不同框架中的适用场景。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
煙獨享寂寞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有