用户您好!请先登录!

分类目录Service Mesh

蚂蚁金服 Service Mesh 深度实践

1. 蚂蚁金服落地情况介绍

发展历程和落地规模

ppt-5.png

Service Mesh 技术在蚂蚁金服的落地,先后经历过如下几个阶段:

  • 技术预研 阶段:2017年底开始调研并探索 Service Mesh 技术,并确定为未来发展方向;
  • 技术探索 阶段:2018年初开始用 Golang 开发 Sidecar SOFAMosn,年中开源基于 Istio 的 SOFAMesh;
  • 小规模落地 阶段:2018年开始内部落地,第一批场景是替代 Java 语言之外的其他语言的客户端 SDK,之后开始内部小范围试点;
  • 规模落地 阶段:2019年上半年,作为蚂蚁金融级云原生架构升级的主要内容之一,逐渐铺开到蚂蚁金服内部的业务应用,并平稳支撑了618大促;
  • 全面大规模落地 阶段:2019年下半年,在蚂蚁金服内部的业务中全面铺开,落地规模非常庞大,而且准备迎接双十一大促;

阅读更多

Service Mesh基础知识

1. 介绍

Service Mesh 概念

Service Mesh又译作“服务网格”,作为服务间通信的基础设施层。Willian Morgan(Linkerd的CEO)如下定义Service Mesh。

A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware. (But there are variations to this idea, as we’ll see.)

Service Mesh 是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh 保证请求可以在这些拓扑中可靠地穿梭。在实际应用当中,Service Mesh 通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。

Service Mesh 实际上就是处于 TCP/IP 之上的一个抽象层,它假设底层的 L3/L4 网络能够点对点地传输字节(当然,它也假设网络环境是不可靠的,所以 Service Mesh 必须具备处理网络故障的能力)。

Service mesh 有如下几个特点:

  1. 应用程序间通讯的中间层;
  2. 轻量级网络代理;
  3. 应用程序无感知;
  4. 解耦应用程序的重试、超时、监控、追踪和服务发现;

2. 原理

Service Mesh 基本原理

如果用一句话来解释什么是 Service Mesh,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关系服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如 Spring Cloud、OSS,现在只要交给 Service Mesh 就可以了。

Phil Calçado 在他的这篇博客 Pattern: Service Mesh 中详细解释了 Service Mesh 的来龙去脉:

  1. 从最原始的主机之间直接使用网线相连
  2. 网络层的出现
  3. 集成到应用程序内部的控制流
  4. 分解到应用程序外部的控制流
  5. 应用程序的中集成服务发现和断路器
  6. 出现了专门用于服务发现和断路器的软件包/库,Twitter’s Finagle和 Facebook’s Proxygen。这时候还是集成在应用程序内部
  7. 出现了专门用于服务发现和断路器的开源软件,如:NetflixOSS ecosystem
  8. 最后作为微服务的中间层Service Mesh出现

Service Mesh 的架构如下图所示

3. 方案

目前社区Service Mesh的开源解决方案有:Buoyant 公司推出的 Linkerd 和 Google、IBM 等厂商牵头的 Istio。Linkerd 更加成熟稳定些,Istio 功能更加丰富、设计上更为强大,社区相对也更加强大一些。所以普遍认为 Istio 的前景会更好,但是毕竟还处于项目的早期,问题还很多。

3.1 Istio 介绍

Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。Istio为希腊语,意思是”起航“。官方中文文档地址:https://istio.doczh.cn

Istio架构图

istio-arch

Istio架构分为控制层和数据层。

  1. 数据层:由一组智能代理(Envoy)作为sidecar部署,协调和控制所有microservices之间的网络通信。
  2. 控制层:负责管理和配置代理路由流量,以及在运行时执行的政策。

Istio架构各个组成部分。

  • Envoy:Istio使用Envoy代理的扩展版本,该代理是以C++开发的高性能代理,用于调解service mesh中所有服务的所有入站和出站流量。
  • Mixer:Mixer负责在service mesh上执行访问控制和使用策略,并收集Envoy代理和其他服务的遥测数据。
  • Istio Manager:Istio-Manager用作用户和Istio之间的接口,收集和验证配置,并将其传播到各种Istio组件。
  • Istio-auth:Istio-Auth提供强大的服务间和最终用户认证,使用相互TLS,内置身份和凭据管理。

3.2 Linkerd 介绍

Linkerd 是开源网络代理,设计为以服务网格部署:用于管理,控制和监控应用程序内的服务与服务间通讯的专用层。

Linkerd 架构图

 

Linkerd 基本功能 原文链接

  1. Load balancing:负载均衡算法,它们使用实时性能指标来分配负载并减少整个应用程序的尾部延迟。
  2. Circuit breaking:自动熔断,将停止将流量发送到被认为不健康的实例,从而使他们有机会恢复并避免连锁反应故障。
  3. Service discovery:服务发现后端集成,通过删除特定的(ad-hoc)服务发现实现来帮助您降低代码的复杂性。
  4. Dynamic request routing:动态请求路由和重新路由,允许您使用最少量的配置来设置分段服务(staging service),金丝雀(canaries),蓝绿部署(blue-green deploy),跨DC故障切换和黑暗流量(dark traffic)。
  5. Retries and deadlines:在某些故障时自动重试请求,并且可以在指定的时间段之后让请求超时。
  6. TLS:可以配置为使用 TLS 发送和接收请求,您可以使用它来加密跨主机边界的通信,而不用修改现有的应用程序代码。
  7. HTTP proxy integration:可以作为 HTTP 代理,几乎所有现代 HTTP 客户端都广泛支持,使其易于集成到现有应用程序中。
  8. Transparent Proxying:在主机上使用 iptables 规则,设置通过 linkerd 的透明代理
  9. gRPC: 支持 HTTP/2 和 TLS,允许它路由 gRPC 请求,支持高级 RPC 机制,如双向流,流程控制和结构化数据负载。
  10. Distributed tracing:分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。
  11. Instrumentation:支持分布式跟踪和度量仪器,可以提供跨越所有服务的统一的可观察性。

4. 扩展阅读

5. 参考资料

 

服务化的未来– Service Mesh

微服务之后什么最火?毫无疑问ServiceMesh。 目前各个大厂都在Mesh化,Mesh的前身是Side Car模式,随着互联网时代/移动互联网时代以及未来IOT时代发展,互联网架构在数据量,高并发,高可用场景会面临几何倍数的增长,同时对于我们的系统也是几何倍数的挑战,我们需要在这个时间点到来之前将我们的系统提前进化,于是CNNF,Service Mesh成为了服务化的未来。

系统服务化之后,服务间通信需要关注什么:

  • 服务发现
  • 负载均衡
  • 路由
  • 流控
  • 通信可靠性
  • 弹性
  • 安全
  • 监控,日志
  • API 网关

API网关可以集中式的管理这些功能,但是会出现单点故障,并且实现起来网关会变得越来越臃肿。 并且网关是一个集中式的处理,Service Mesh是网络通信基础设施,可以将网络功能从代码中剥离出来。 通过Service Mesh不用在服务代码中实现用于可靠性通信的模式或断路,超时等控制。

阅读更多