Service Mesh的前世今生

在前面,我们提出了一个问题:随着模块和节点的增多,微服务之间难免会遇到各种网络问题。为了解决这些问题,目前有一个解决方案,即使用Spring Cloud中的各个组件。然而,这种解决方案不仅需要更多的学习成本,而且对代码有一些要求,比如必须使用Java开发。这就导致了系统的单一性。因此,今天我们将讨论一下服务网格Service Mesh。

Service Mesh的演进

第一阶段:控制逻辑和业务逻辑耦合

在这个阶段,逻辑控制和业务逻辑的实现是紧密结合在一起的,缺乏明确的分离和解耦。

这种耦合会导致一些问题。首先,逻辑控制的变更会直接影响业务逻辑的实现,增加了代码的复杂性和维护的难度。其次,不同的业务逻辑可能需要不同的逻辑控制方式,但由于耦合在一起,无法灵活地应对变化。此外,难以实现对逻辑控制的统一管理和监控,影响了系统的可维护性和可扩展性。

第二阶段:公共库

在Service Mesh的演进过程中,第二阶段是引入公共库的阶段,旨在解耦逻辑控制和业务逻辑,消除重复代码,并降低开发和维护成本。然而,尽管公共库的引入在一定程度上实现了解耦,但它仍然存在一些问题和侵入性。比如Spring Cloud各个组件

首先,公共库的使用需要对特定的语言进行绑定,这限制了开发团队的选择和灵活性。如果系统中有多种语言的组件,就需要为每种语言编写对应的公共库,增加了开发和维护的复杂度。

其次,尽管公共库可以消除一些重复的代码,但仍然需要开发人员手动调用和集成公共库的功能。这种侵入性可能导致开发人员需要了解和掌握公共库的使用方式,增加了学习成本和开发时间。

此外,公共库的引入并没有完全解决控制逻辑和业务逻辑之间的耦合问题。虽然它提供了一种解耦的方式,但仍然需要开发人员在业务逻辑中显式调用公共库的功能,这仍然存在一定的依赖关系。

第三阶段:代理

代理作为一个中间层,位于应用程序和网络之间,负责处理网络通信逻辑。当应用程序需要发送HTTP请求时,它只需要将请求发送给代理,然后代理负责处理与服务器的通信。这样,应用程序的代码不再需要关注网络通信细节,可以更专注于业务逻辑的实现。尽管这个阶段的代理功能可能仍然比较简陋,但它的思路是正确的。

第四阶段:边车模式(Sidecar)

在第四阶段,Service Mesh的优化演进进入了边车模式(Sidecar)的阶段。边车模式是一种架构模式,它将代理作为一个独立的进程部署到应用程序旁边,形成一个边车,负责处理与网络通信相关的任务。

边车模式的优势在于进一步解耦了逻辑控制和业务逻辑,使得应用程序只需要关注自身的业务逻辑,而将网络通信逻辑交给边车来处理。边车通过与应用程序进行交互,拦截和处理所有的网络请求和响应,从而提供了更高级别的控制和管理能力。

边车模式的实现通常使用了轻量级容器技术,如Docker等,使得边车可以独立地部署和扩展。每个应用程序都有一个独立的边车,它们可以通过一个共享的Service Mesh控制平面进行协调和管理。

第五阶段:Service Mesh 的出现

在这个阶段,Service Mesh成为了一个独立的基础设施层,为应用程序提供了完整的服务通信管理解决方案。它通过在整个服务间通信路径上插入代理,实现了对通信的全面控制和管理。Service Mesh的出现使得服务间通信的管理变得更加简单和可靠,开发人员可以专注于业务逻辑的开发,而不必关注底层的网络通信细节。同时,Service Mesh还提供了强大的安全性、监控和追踪能力,可以帮助运维人员更好地监控和管理服务的运行状态。总之,Service Mesh的出现为服务通信带来了一场革命,极大地提升了应用程序的可靠性和可维护性。

Service Mesh的主要功能

Service Mesh的主要功能包括:

  1. 服务发现和负载均衡:Service Mesh可以自动发现和管理所有服务实例,并通过负载均衡策略将流量分配到不同的实例上,以提高可用性和性能。
  2. 智能路由和流量控制:Service Mesh可以基于各种条件和规则对流量进行智能路由和控制,例如根据请求头、路径、用户等进行流量划分和限制,从而实现A/B测试、灰度发布等功能。
  3. 链路追踪和监控:Service Mesh可以对整个服务调用链进行跟踪和监控,记录每个请求的详细信息,包括请求时间、耗时、错误等,以帮助开发人员快速定位和解决问题。
  4. 安全认证和授权:Service Mesh可以提供强大的安全机制,包括身份认证、访问控制、数据加密等,以保护服务之间的通信安全,并防止未经授权的访问。
  5. 故障恢复和容错:Service Mesh可以自动监测和检测服务实例的健康状态,并在出现故障时自动进行故障恢复和容错处理,以提高服务的可靠性和稳定性。
  6. 可观察性和调试能力:Service Mesh可以提供丰富的监控指标和日志,帮助开发人员深入了解系统的运行情况,并通过可视化界面和工具进行调试和排查问题。

ServiceMesh和Kubernetes关系

Kubernetes是一个开源的容器编排和调度平台,它的主要目标是解决容器化应用的管理和调度问题。Kubernetes提供了各种功能,例如自动化部署、弹性扩缩容、服务发现和负载均衡等,以帮助开发人员更好地管理和运行容器化应用。Kubernetes通过使用调度器来管理应用的生命周期,确保应用始终处于预期的状态。

Service Mesh则是专注于解决微服务架构中的服务间网络通信问题的一种架构模式。它通过在应用程序旁边引入代理(通常称为边车)来管理服务之间的通信。代理负责处理请求的转发、负载均衡、智能路由、安全认证等功能。Service Mesh为微服务架构提供了更强大的功能和管理能力,使得开发人员可以更好地管理和监控服务之间的通信,同时也提供了更高的可观察性、安全性和可靠性。

在实践中,Kubernetes和Service Mesh可以结合使用,相互增强。Kubernetes提供了强大的容器编排和调度功能,使得微服务应用可以在容器环境中高效运行。而Service Mesh作为对Kubernetes网络功能的扩展和延伸,可以进一步提供服务间的流量管理、安全认证、故障恢复等功能,以满足微服务架构中更复杂的需求。

Service Mesh 产品

Istio:Istio是由Google、IBM联合开源的Service Mesh平台,它提供了丰富的功能,包括流量管理、安全认证、故障注入等。它与Kubernetes紧密集成,可以通过Kubernetes的资源对象进行配置和管理。也是我们本系列的主角。

Envoy:Envoy是一个高性能的代理服务器,可以作为Service Mesh的核心组件。它被广泛应用于多个Service Mesh平台中,包括Istio

Linkerd:Linkerd是另一个流行的Service Mesh平台,它专注于简化和加速服务间通信。它提供了可观察性、故障注入、负载均衡等功能,并与Kubernetes无缝集成。但是没有强大的背景背书,比如:Google、IBM

总结

Service Mesh是一种用于解决微服务架构中服务间通信问题的架构模式。在过去的几年里,Service Mesh经历了演进的过程,从控制逻辑和业务逻辑耦合到引入公共库,再到代理和边车模式,最终发展成为独立的基础设施层。Service Mesh的出现极大地简化了服务通信的管理,提供了服务发现和负载均衡、智能路由和流量控制、链路追踪和监控、安全认证和授权、故障恢复和容错、可观察性和调试能力等功能。Service Mesh和Kubernetes可以结合使用,相互增强,提供更强大和可靠的微服务架构解决方案。当前比较流行的Service Mesh产品包括Istio、Envoy和Linkerd等。

Service Mesh:微服务架构的救世主还是多余的花招?的更多相关文章

  1. 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代

    Linkerd 提供了许多功能,如:自动 mTLS.自动代理注入.分布式追踪.故障注入.高可用性.HTTP/2 和 gRPC 代理.负载均衡.多集群通信.重试和超时.遥测和监控.流量拆分(金丝雀.蓝/ ...

  2. Service Mesh——微服务中的流量管理中间件

    Service Mesh--微服务中的流量管理中间件 摘自-https://zhuanlan.zhihu.com/p/28794062 Service mesh 与 Cloud Native Kube ...

  3. 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh

    微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构   本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...

  4. 在微服务架构中service mesh是什么?

    在微服务架构中service mesh是什么 什么是 service mesh ? 微服务架构将软件功能隔离为多个独立的服务,这些服务可独立部署,高度可维护和可测试,并围绕特定业务功能进行组织. 这些 ...

  5. 大规模微服务架构下的Service Mesh探索之路

    小结: 1. 第一.二代Service Mesh meetup-slides/敖小剑-蚂蚁金服-大规模微服务架构下的Service Mesh探索之路.pdf https://github.com/se ...

  6. 微服务架构基础之Service Mesh

    ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...

  7. 唯品会的Service Mesh三年进化史 2018 年 Service Mesh 元年,被誉为是下一代微服务架构

    2018 年 Service Mesh 元年,被誉为是下一代微服务架构 https://www.sohu.com/a/225324586_465914 唯品会的Service Mesh三年进化史 - ...

  8. 微服务架构之「 下一代微服务 Service Mesh 」

    Service Mesh 被大家称为下一代的微服务,是微服务领域的一颗新星,被大家讨论的非常多. 我在大家的讨论中,还看到有人说 “目前的微服务架构我都没学会呢,现在又来一个下一代微服务,真学不动了” ...

  9. 微服务(Microservices)和服务网格(Service Mesh)的架构概念

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  10. Spring Cloud 微服务架构学习笔记与示例

    本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...

随机推荐

  1. 【WebGL系列-04】清除缓冲区并绘制图形

    清除缓冲区并绘制图形 前文中已经准备好了webgl程序和绘制所用的数据,但是在绘制图像之前,还要对画布进行处理. 清除缓冲区 由于图像的绘制是一帧一帧绘制,每一帧针对当前的状态,计算屏幕上每个像素的颜 ...

  2. 通配符SSL证书自动续签自动部署方案

    最开始接触 https 的时候一直是使用的 阿里云和腾讯云的免费 SSL证书,免费的SSL证书用了几年后,慢慢的部署https证书的项目越来越多,时间久了发现每个网站都需要一个 SSL证书,每个SSL ...

  3. 《敏捷无敌之DevOps时代》读后感

    背景: 2020年基于我司业务形态,我开始实行敏捷项目管理.以敏捷为道,Scrum为法,迭代为术,禅道作器,大张旗鼓的搞了2年敏捷开发.随着时间推移,问题出现在2022年,当时我们已经完全按照Scru ...

  4. 用 Rust 生成 Ant-Design Table Columns

    经常开发表格,是不是已经被手写Ant-Design Table的Columns整烦了? 尤其是ToB项目,表格经常动不动就几十列.每次照着后端给的接口文档一个个配置,太头疼了,主要是有时还会粘错就尴尬 ...

  5. Inpaint Anything:一键进行多种图像修补

    本文分享自华为云社区<绘制一切>,作者: 雨落无痕 . 绘制一切-Inpaint Anything 相关链接: Notebook案例地址:绘制一切 AI Gallery:https://d ...

  6. 【动画进阶】有意思的 Emoji 3D 表情切换效果

    最近,群里面的同学发了这么一个非常有意思是动画效果: 原效果地址 -- CodePen Demo -- Letter Hop 当然,原效果,主要使用了 GSAP 动画库以及一个 3D 文字 JavaS ...

  7. [kubernetes]集群中部署CoreDNS服务

    前言 从k8s 1.11版本开始,k8s集群的dns服务由CoreDNS提供.之前已经使用二进制文件部署了一个三master三node的k8s集群,现在需要在集群内部部署DNS服务. 环境信息 IP ...

  8. javescript入门

    js组成和基本结构 javascript缘由:可以实现html,css初级验证实现不了的复杂的验证 减轻服务器压力(在发送请求到服务器之前用javescript验证客户端) w3c标准:结构化(htm ...

  9. do_fork(一)

    fork 是linux创建进程的系统调用,相关的函数(不只是系统调用)还有 vfork,clone,sys_frok等.这些函数会整理不同参数,再调用到 do_fork 中. 本篇文章主要介绍do_f ...

  10. 领域驱动设计(DDD):三层架构到DDD架构演化

    三层架构的问题 在前文中,我从基础代码的角度探讨了如何运用领域驱动设计(DDD)来实现高内聚低耦合的代码.本篇文章将从项目架构的角度,继续探讨三层架构与DDD之间的演化过程,以及DDD如何优化架构的问 ...