8.1 Service Mesh 概述

  新兴的下一代微服务架构,被称为下一代微服务,同时也是云原生技术栈的代表技术之一。

  8.1.1 Service Mesh的由来

    从2016年到2018年,service mesh经历了从无到有的过程

  8.1.2 Service Mesh的定义

    服务网格是一个基础设施层,用于处理服务间通信。现代云原生应用有着复杂的服务拓扑结构,服务网格负责在这些拓扑结构中实现请求的可靠传递。实践中,服务网格通常被实现为一组轻量级网络代理,它们与应用程序部署在一起,对应用程序透明。

  8.1.3 Service Mesh详解

  • 单个服务调用:应用实例和Service mesh 代理实例是两个独立的进程,它们之间的通信时远程调用,而不是代码层面的方法调用。客户端的请求会先到Service Mesh代理实例,代理实例表现为Sidecar,完成服务发现、负载均衡等基本功能,熔断、限流、重试等容错功能,路由功能,以及认证、授权、加密等,最后将请求发送给应用服务。
  • 多个服务调用:Service mesh负责所有服务间请求转发,服务只负责发送和处理请求,不必再负责传递请求的具体逻辑。
  • 大量服务调用:当系统存在大量服务时,服务间调用关系表现为网状。Sidecar之间的服务调用关系形成一个网络,这就是Service Mesh(服务网格)名字的由来。
  • Service Mesh定义回顾:抽象:Service mesh是一个抽象层,负责王完成服务间通信。并且将这些功能从应用中剥离出来,形成一个单独的通信层,并将其下沉到基础设施层。    功能:请求的可靠传递。        部署:轻量级网络代理,以sidecar的模式和应用程序一对一部署,两者之间的通信时远程调用。    透明:Service mesh对应用程序是透明的。Service Mesh可以独立部署升级、扩展功能、修复缺陷,而不必改动应用程序。                                    

8.2 Service Mesh演进历程

  下面讲述Service Mesh技术的起源、发展、以及一步一步的演进历程。

  8.2.1 远古时代的案例

    在应用代码中处理网络通信细节,比如数据包顺序、流量控制等。后来TCP/IP协议栈负责这些功能。

  8.2.2 微服务时代的现状

    服务发现、负载均衡、熔断、重试。

  8.2.3 侵入式框架的痛点

    Spring Cloud和Dubbo这些传统的微服务治理框架都是侵入式的微服务框架。

    痛点1:门槛高。

    痛点2:功能不全。  Istio的路由功能比Spring Cloud强大。

    痛点3: 无法跨语言。微服务有跨语言的优点。

    痛点4:升级困难。

  8.2.4 解决问题的思路

  8.2.5 Proxy模式的探索

    为了解决客户端和服务端直接耦合的问题,尝试使用Proxy模式来隔离客户端和服务端,典型的如Nginx、HAProxy、Apache等HTTP反向代理。Proxy转发所有流量,而Proxy需要为代理的流量实现基本功能,如负载均衡。

  8.2.6 Sidecar模式的出现

    SiderCar在Proxy上发展起来,功能更加全面。

  8.2.7 第一代的service Mesh

    Linkerd、Envoy

  8.2.8 第二代的Service Mesh

  Istio

  Istio最大的创新在于,它为Service Mesh带来了前所未有的控制力:

  • 以Sidecar方式部署的Service Mesh控制了服务间所有的流量
  • Istio增加了控制面板来控制系统中所有的Sidecar
  • Istio能够控制所有的流量,即控制系统中所有请求的发送。

8.3 Service Mesh市场竞争

  8.3.1 Service Mesh的萌芽期

  8.3.2 急转直下的Linkerd

  8.3.3 波澜不惊的Envoy

  8.3.4 背负使命的Istio

  8.3.5 背水一战的Buoyant

  8.3.6 其他参与者

  8.3.7 Service  Mesh的国内发展情况

8.4 Istio

  8.4.1 Istio概述

    一个连接,管理和保护微服务的开放平台。

    功能:

      连接:智能控制服务之间的流量和API调用。

      保护:身份验证、授权和服务之间通信加密,保护服务。

      控制:

      观测:自动跟踪、监控和记录所有服务。

        Istio设计目标:

      最大化透明度:

      增量

      可移植性

      策略一致性     

  8.4.2 架构和核心组件

    Istio分为数据平面控制平面两个部分:

    数据平面:是以Sidecar方式部署的智能代理,Istio默认集成的是Envoy,控制微服务之间的网络通信,已经和Mixer模块的通信。

    控制平面:管理和配置数据平面,控制数据平面的行为,如代理路由流量、实施策略、收集遥测数据、加密认证等。控制平面包含Pilot、Mixer、Citadel三个主要组件。

    Envoy: 用于调节服务网格中所有的服务的入站、出站流量。具体如下HTTP、gRPC、TCP Proxy、Thrift

      另外,Enovy还提供了和网络通信直接相关的各种功能:

           服务发现: 从Pilot得到服务发现信息。

      负载均衡

         健康检查:

       熔断:

       高级路由:

       基于百分比的流量拆分:

       加密和认证:

       故障注入: 

      此外,Envoy还要完成对请求属性的提取,这些属性可以通过Istio Proxy的Mixer Filter发送给Mixer,用于执行策略决策、配额检查等行为。

      Mixer:负责提供策略控制和遥测收集的组件,在istio中的职责如下三点:

        Check: 前置条件检查。认证、黑白名单、ACL检查。

        Quota: 比如限速。

        Report: 遥测报告。

      Citadel: 加密、访问控制、审计。

    

第八章 跨语言服务治理方案 Service Mesh的更多相关文章

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

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

  2. Apache Thrift 跨语言服务开发框架

    Apache Thrift 是一种支持多种编程语言的远程服务调用框架,由 Facebook 于 2007 年开发,并于 2008 年进入 Apache 开源项目管理.Apache Thrift 通过 ...

  3. Apache Thrift - 可伸缩的跨语言服务开发框架

    To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...

  4. thrift框架总结,可伸缩的跨语言服务开发框架

    thrift框架总结,可伸缩的跨语言服务开发框架 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其 ...

  5. 【转】Apache Thrift - 可伸缩的跨语言服务开发框架

    Apache Thrift - 可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详 ...

  6. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

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

  7. 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录

    小蚂蚁说: 本文是基于在 Service Mesher Meetup 上海站的主题分享<蚂蚁金服 Service Mesh 渐进式迁移方案>内容整理,完整的分享 PPT 获取方式见文章底部 ...

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

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

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

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

随机推荐

  1. js使用WebUploader做大文件的分块和断点续传

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...

  2. javaweb上传文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  3. __property 关键字的使用

    https://blog.csdn.net/lixingshi/article/details/41277577 __property是属性关键字,用来定义类的某种属性. 给类定义属性,是BCB的扩展 ...

  4. Codeforces 1137F Matches Are Not a Child's Play [LCT]

    Codeforces 很好,通过这题对LCT的理解又深了一层. 思路 (有人说这是套路题,然而我没有见过/kk) 首先发现,删点可以从根那里往下删,非常难受,所以把权值最大的点提为根. 然后考虑\(x ...

  5. 安装vs code之后,win+e快捷键打开的是vs code,而不是文件管理器,解决方法

    安装vs code之后,win+e快捷键打开的是vs code,而不是文件管理器,解决方法 xdg-mime default dde-file-manager.desktop inode/direct ...

  6. 《挑战30天C++入门极限》C++中利用构造函数与无名对象简化运算符重载函数

        C++中利用构造函数与无名对象简化运算符重载函数 在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁  //站点:www.cn ...

  7. Oracle,regexp_replace函数,replace函数

    replace函数(不知支持正则表达式)语法: replace(原字段,“原字段旧内容“,“原字段新内容“,) select replace(原字段,'原字段旧内容','原字段新内容') from T ...

  8. getchar与putchar缓冲区以及字符串数组、指针

    getchar与putchar缓冲区 有下面的语句段: while ((s = getchar()) != '\n'){ putchar(s); putchar("\n"); } ...

  9. Android中Popupwindow和Dialog的区别

    Android中的对话框有两种:PopupWindow和AlertDialog.它们都可以实现弹窗功能,但是他们之间有一些差别,下面总结了一点. (1)Popupwindow在显示之前一定要设置宽高, ...

  10. !!a标签和button按钮只允许点击一次,防止重复提交

    button 方法:加上属性disabled = “disabled” 或者 disabled = “true” <button id="btn" disabled=&quo ...