江帅帅:一盏茶的时间初探网格服务架构 Istio

简介: 江帅帅:一盏茶的时间初探网格服务架构 Istio

本文作者:孙玄、吴守星

孙玄 :【架构之美】微信公众号作者,毕业于浙江大学,前转转公司首席架构师,大中后台技术负责人;前58集团技术委员会主席,高级系统架构师;前百度资深研发工程师;

江帅帅:【江帅帅】微信公众号作者,擅长系统架构设计,大数据,运维等技术领域;对大中后台技术有丰富经验;曾担任怀致科技 CTO,并还在东软集团、中国移动、多迪集团等企业中任职过相关技术负责人。


1、前言

通上文讲到《微服务架构何去何从》,如果暂时没有理解 ServiceMesh 存在解决什么问题,建议先从从上文看起。微服务架构 2.0 Service Mesh 架构框架方面,业内陆续开源了不少优秀框架,主流两个:Service Mesh 产品 Istio 和 AWS App Mesh,我们将从多角度探索与实践Istio。

2、什么是 Istio?

由官网定义如下:云平台令使用它们的公司受益匪浅。但不可否认的是,上云会给 DevOps 团队带来压力。为了可移植性,开发人员必须使用微服务来构建应用,同时运维人员也正在管理着极端庞大的混合云和多云的部署环境。Istio 允许您连接、保护、控制和观察服务。

我们可以看到Istio主要做微服务治理,并且主要分为四个功能:

  1. 服务之间建立一个连接
  2. 连接通信之间整数等安全性
  3. 连接进行流量管理等控制
  4. 服务连接监控、日志等观察服务

为了保证数据不丢,我们尽可能的设置较大的重试次数(参数是 retries),如果重试失败了,对异常进行处理,可以把消息保存到另外安全到地方。

3、k8s、Istio 相辅相成

下图可以看出,Istio 可以解决 Kubernetes 的服务治理缺陷,功能上两者进行了一个互补的结合,解决了云原生服务治理、云原生基础设施。

3.1 Istio 的架构

网格服务,通常和一系列网络代理组成,其主要在于代码无侵入、网络代理,与应用程序部署在一起,但是应用程序却不知情。

主要架构在于数据平面(Data Plane)和控制平面(Control Plane),

  • 数据平面:由一组和业务服务(如下图 ServiceA 和 ServceB)成对出现的 Sidecar 代理(Envoy)构成,它的主要功能是接管服务的进出流量或服务转发,并且与控制平面的 Mixer 通讯,接受调度策略。
  • 控制平面:主要包括了 Pilot、Mixer、Citadel 和 Galley 共 4 个组件,主要功能是通过管理和配置 Envoy 来管理流量,此外,控制平面配置 Mixers 来实施路由策略并收集检测到的监控数据。

3.2 Istio 核心组件

  • Envoy
    是一个用 C ++开发的高性能代理、CNCF第三个毕业项目,所以性能和可用性都是比较好的,对于Envoy有四个概念【LDS(监听器发现服务)、RDS(路由发现服务)、CDS(集群发现服务)、EDS(服务发现服务)】,每一个 pod 中都必须要部署一个 Sidecar。

ps: 之后会在代码配置中重新标志这块知识点。

  • Pilot
    主要的作用是配置和管理Envoy代理,为高级路由(例如,A / B 测试,金丝雀部署等)提供流量管理功能,以及异常控制,如:超时,重试,断路器等。下图是Pilot的原理图,主要的规则数据来源于用户手动配置(路由规则)以及k8s(pod等信息)、Mesos来的一些元数据,通过proxy(Envoy)进行流量转发。
  • Mixer
    是一个独立于平台的组件,负责在整个 Service Mesh 中执行访问控制和使用策略,并从 Envoy 代理和其他服务收集监控到的数据。
    提供 API 服务,可以自研监控分析 PAM 平台对接 Mixer。
  • Citadel
    通过内置身份和凭证管理,提供强大的服务到服务和最终用户身份验证。我们可以使用 Citadel 升级 Service Mesh 中的未加密流量。我们可以使用 Istio 的授权功能来控制谁可以访问服务。
  • Galley
    负责配置的获取、处理和分发。Gally使用了一种叫作MCP(Mesh Configuration Protocol,网格配置协议)的协议与其他组件进行通信。

4、Bookinfo 微服务源码分析

理解上述概念后,大家可以拿 Istio 官网提供的一个微服务Book项目进行上手操作,项目地址:https://istio.io/zh/docs/examples/bookinfo

bookinfo 应用一共包含四个微服务:Productpage、Details、Reviews、Ratings。

  • Productpage 使用 Python 开发,负责展示书籍的名称和书籍的简介。
  • Details 使用 Ruby 开发,负责展示书籍的详细信息。
  • Reviews 使用 Java 开发,负责显示书评。
  • Ratings 使用 Node.js 开发,负责显示书籍的评星。

5、Service Mesh 的应用难点

企业是在原有技术栈的基础上引入 Service Mesh,从实际的应用实践情况来看,往往会存在以下 4 种问题:

1、Service Mesh 模式在业务每次远程调用,通信链路会变长,必将增加请求的响应延迟,性能损耗会被明显放大。

2、基础设施与业务解耦带来的复杂性对运营系统的易用性和 Service Mesh 的稳定性要求极高,否则排查问题时很可能会面临根本无从下手的情况。

3、服务通信框架及治理系统技术栈往往不是云原生优先支持的 GRPC 和 HTTP,在 RPC 框架不兼容的背景下改造成本和挑战非常大。

4、增加基础设施团队的运维成本,并且遇到业务问题,定位问题涉及到业务研发团队和基础设施研发团队频繁沟通交互,自然成本也会相应增加。

6、小结及预告

通过本文,相信读者对微服务的概念和 Istio 的架构有了一定程度的理解。在微服务领域,它最大的优势是解耦应用业务,企业能够彻底从业务角度考虑问题,同时还可以与容器编排部署平台的集成,成为企业级应用编排部署和服务治理的标准形态。

读者有兴趣可持续关注,后面将持续更新 Istio 应用及剖析。

目录
相关文章
|
1月前
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
2月前
|
存储 Linux KVM
Proxmox VE (PVE) 主要架构和重要服务介绍
Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。
1005 7
|
4月前
|
安全 前端开发 JavaScript
逆向海淘代购集运系统:sugargoo的技术架构与创新服务解读
逆向海淘代购集运系统整合中国电商资源,为海外用户提供便捷购物及物流服务,降低购物成本。sugargoo系统搭建攻略包括: - **需求分析与规划**: 深入了解目标市场需求,明确服务特色。 - **平台开发**: 选用合适技术栈,开发关键功能模块,集成电商数据。 - **物流合作**: 建立物流合作关系,集成物流API提升自动化。 - **支付解决方案**: 支持多种支付方式,保障支付安全。 - **客户服务**: 提供多语言支持,建设专业客服团队。 - **营销与推广**: 优化SEO,利用社交媒体扩大品牌影响。
|
16天前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
38 2
|
27天前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性?
微服务架构中,如何确保服务之间的数据一致性?
|
1月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
53 8
|
1月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
52 3
|
2月前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性
微服务架构中,如何确保服务之间的数据一致性
|
2月前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
43 5
|
2月前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
50 3