服务网格技术简介

什么是服务网格

服务网格(Service Mesh)是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。

服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明,所有应用程序间的流量都会通过它,所以对应用程序流量的控制都可以在serivce mesh中实现。

服务网格

使用服务网格有如下几个优点:

  • 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑
  • 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可
  • 对应用透明,Service Mesh组件可以单独升级

当然使用服务网格目前也面临一些挑战

  • Service Mesh组件以代理模式计算并转发请求,一定程度上会降低通信系统性能,并增加系统资源开销
  • Service Mesh组件接管了网络流量,因此服务的整体稳定性依赖于Service Mesh
  • 同时额外引入的大量Service Mesh服务实例的运维和管理也是一个挑战

目前主流的Service Mesh的开源解决方案有liBuoyant公司推出的Linkerd和Google、IBM等厂商牵头的Istio

Istio

Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。Istio为希腊语,意思是”起航“。

Istio服务网格从逻辑上分为数据平面控制平面

数据平面由一组智能代理(Envoy)组成,被部署为 sidecar。这些代理负责协调和控制微服务之间的所有网络通信。他们还收集和报告所有网格流量的遥测数据。

控制平面管理并配置代理来进行流量路由。

Istio架构

Istio以统一的方式提供了许多跨服务网络的关键功能:

  • 负载均衡:支持HTTP、gRPC、WebSocket、TCP等格式流量自动负载均衡
  • 流量管理:通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
  • 安全:在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
  • 可观察性:集群内所有流量的自动化度量、日志记录和追踪,能够深入的了解服务网格部署。

Linkerd

Linkerd是一个用于云原生应用的开源、可扩展的服务网格。Linkerd的出现是为了解决像twitter、google这类超大规模生产系统的复杂性问题。Linkerd不是通过控制服务之间的通信机制来解决这个问题,而是通过在服务实例之上添加一个抽象层来解决的。

Linkerd由控制平面数据平面组成:

控制平面是在所属的Kubernetes命名空间中运行的一组服务,这些服务可以完成汇聚遥测数据,提供面向用户的API,并向数据平面代理提供控制数据等,它们共同驱动数据平面。

数据平面用Rust编写的轻量级代理,该代理安装在服务的每个pod中,并成为数据平面的一部分,它接收Pod的所有接入流量,并通过initContainer配置iptables正确转发流量的拦截所有传出流量。

Linkerd架构

linkerd提供的的主要功能:

  • 负载平衡:linkerd提供了多种负载均衡算法,它们使用实时性能指标来分配负载并减少整个应用程序的尾部延迟。
  • 熔断:linkerd包含自动熔断,将停止将流量发送到被认为不健康的实例,从而使他们有机会恢复并避免连锁反应故障。
  • 服务发现:linkerd与各种服务发现后端集成,通过删除特定的(ad-hoc)服务发现实现来帮助您降低代码的复杂性。
  • 动态请求路由:linkerd启用动态请求路由和重新路由,允许您使用最少量的配置来设置分段服务(staging service),金丝雀(canaries),蓝绿部署(blue-green deploy),跨DC故障切换和黑暗流量(dark traffic)。
  • 重试次数和截止日期:linkerd可以在某些故障时自动重试请求,并且可以在指定的时间段之后让请求超时。
  • TLS:可以配置为使用TLS发送和接收请求,使用它来加密跨主机边界的通信,而不用修改现有的应用程序代码。
  • 分布式跟踪:支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。
  • 仪器仪表: 支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。

参考文章

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)