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. 【博客索引】Welcome!!

    欢迎来到 Daniel_yzy 的博客园 个人简介 初二,男,就读于长沙市一中双语实验学校. 爱好 OI,一生讨厌文化课. 当然,也是唯物主义无神论者. 已有 npy,要问是谁的话可以私下问. 博客索 ...

  2. 本地连接阿里云上的mysql centos

    首先写下原因: 未让3306端口通过防火墙 1.  检查端口是否被防火墙挡住 telnet ip地址 3306 在windows中打开telnet应用, 参考:https://www.cnblogs. ...

  3. Bootstrap使用方法

    中文文档:https://www.bootcss.com/ 使用方式: 1.选择对应的文档:  2.网站会自动跳转,一般选择Bootstrap3中文文档:  3.点击入门,下拉找到基础模板,复制代码到 ...

  4. 关于Tensorflow!目标检测预训练模型的迁移学习

    ​ 前言 关于TF的目标检测迁移学习,我一开始是想通过Tensorflow提供的API,用JS来实现的.但是官方不但没有案例,网上也没有踩坑的博客,加之我又着急要弄水印检测. 于是就在网上看了很多人用 ...

  5. Tcpdump 使用指南

    论网络数据包的分析,我首选wireshark,因为图形化界面直观明了.但如果遇到没有图形化显示的Linux环境,那么此时会使用tcpdump该是一件多么美好的事情. 网上关于tcpdump的介绍很多, ...

  6. 基于Linux的三种防火墙(IPtables、Firewall、UFW)

    学而不思则罔,思而不学则殆. 导航 IPtables Firewall UFW 对比总结 IPtables部分 1.IPtables 四表五链. 四表:filter.nat.raw.mangle. 五 ...

  7. C#的重载决策

    重载是许多编程语言支持的特性.所谓重载,就是指可以定义多个名称相同但参数(个数.类型和顺序)不同的方法(函数).先来看一个例子: void Main() { char cvalue = 'a'; ma ...

  8. 3.你所不知道的go语言控制语句——Leetcode习题69

    目录 本篇前瞻 Leetcode习题9 题目描述 代码编写 控制结构 顺序结构(Sequence) 声明和赋值 多返回值赋值 运算符 算术运算符 位运算符 逻辑运算 分支结构 if 语句 switch ...

  9. P1551 亲戚 && #569. 【例4-7】亲戚(并查集)

    P1551 亲戚 题目链接:落谷 题目链接:TFLS OJ 落谷题解(具体分析见慎入潜出P239) #include<bits/stdc++.h> using namespace std; ...

  10. 一台服务器上部署 Redis 伪集群

    哈喽大家好,我是咸鱼 今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从) redis-trib.r ...