layout: post
title: "Service Mesher Meetup 成都站:Service Mesh是下一代SDN吗?" subtitle: "从SDN看Service Mesh的发展" excerpt: "" author: "赵化冰" date: 2019-10-26 description: "Service Mesh和SDN(Software Defined Network) 的架构非常相似,这两者都采用了软件对网络进行管理和控制,也都包含控制面和数据面的概念。那么Service Mesh和SDN有什么关系?Service Mesh是下一代的SDN吗? Service Mesh可以从SDN的发展历史中借鉴哪些经验?本文将就这些问题进行一一探讨。" image: "https://upload.wikimedia.org/wikipedia/commons/9/97/Malojapass_B%C3%B6hringer_2018.jpg" published: true tags:
- Service Mesh
- Istio
- SDN
categories:
- Presentations
- Tech
metadata:
- text: "成都 2019/10"
- text: "活动链接"
link: "https://tech.antfin.com/community/activities/949?chInfo=sm"
- text: "讲稿下载"
link: "/slides/what-can-service-mesh-learn-from-sdn-servicemesher-meetup-20191026.pdf"
- text: "YouTube"
link: "https://youtu.be/nGkxp-2OsKg"
如果具有通信或者网络行业的知识背景,那么你对SDN(Software Defined Network)一定不会陌生。你也许已经注意到,近来在微服务领域兴起的Service Mesh和SDN(Software Defined Network) 非常相似,这两者都采用了软件对网络进行管理和控制,也都采用了包含控制面和数据面的类似架构。
那么Service Mesh和SDN有什么关系?Service Mesh是下一代的SDN吗? Service Mesh是否可以从SDN的发展历史中借鉴一些经验?本文将就这些问题进行一一探讨。
首先我们来回顾一下SDN的起源。传统的IP网络是一个分布式的无中心架构,各个网络设备包含完整的控制面和数据面,单个设备通过网络协议探测网络中其他设备的状态,自主决定如何对流量进行路由。该架构的好处是容错性强,即使网络局部出现故障,整个网络也可以自主恢复,不会影响整个网络的运行。 {{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/network-devices.svg" caption="在传统的网络架构下,控制面和数据面位于同一设备中">}}
这种去中心的架构在基于文本和图片的web浏览器应用时代运作良好,但随着互联网业务的爆炸式增长,各种各样的业务纷纷承载在了IP网络上,包括各种实时业务如语音视频通话,对网络提出了新的挑战。
为了应对这些问题,提出了SDN的解决方案,SDN的架构如下图所示:
{{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/sdn.png" caption="SDN架构">}}
从图中可以看到,SDN从下至上划分为三层体系结构:
SDN的不同层次之间采用标准接口进行通信:
在一个微服务系统中,各个独立的微服务之间采用远程调用进行通信。服务发现,请求路由等服务通信相关的功能以代码库的形式存在于各个微服务之中。
{{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/microservice.svg" caption="微服务之间的通信">}}
该架构也存在和通信网络类似的问题:
从上面的分析可以看出,SDN和Service Mesh面临的是类似的问题,既然都是解决类似的问题,那么Service Mesh是否可以看作下一代的SDN呢?
我认为答案是否定的,因为两者之间还是有显著的不同。SDN主要面对L1到L4层,即网络层的基本转发和控制功能;Service Mesh则主要面对L7层及以上,用于处理应用层的服务发现,服务路由等功能,但两者采用了相似的理念,我们可以把Service Mesh看作SDN的理念在应用层的扩展和实践。
{{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/sdn-vs-service-mesh.jpg" caption="SDN和Service Mesh出于网络协议中的不同层次">}}
Service Mesh可以借鉴SDN的架构来解决微服务系统的服务通信的相关问题,如下图所示: {{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/service-mesh.jpg" caption="Service Mesh架构">}}
我们可以看到,基本上所有的Service Mesh实现都采用了类似上图的的架构,包括Istio,Linkerd,Kuma等。
在该架构中,数据面承担的是一个白盒交换机的角色,不管何种实现,其功能都是类似的,不存在太多争议,目前envoy已经成为数据面的标准实现,因此数据面和控制面之间也采用了Envoy的xDS v2作为标准的数据面协议。
各个Service Mesh项目的创新和争夺的战场主要在控制面上,Microsoft等公司提出了采用SMI(Service Mesh Interface)作为控制面的标准接口,虽然SMI得到了Linkerd,HashiCorp, Solo.io等一干公司的支持,但目前影响最大的Service Mesh项目Istio还未对此进行表态。缺乏统一的控制面标准,控制面之上的应用层生态目前还没有发展起来,基本没有看到有项目对应用层进行宣传。
SDN给Service Mesh带来的一个重要启发是控制面对数据面各种网络设备的统一控制,那么是否可以采用Service Mesh控制面对硬件设备和软件代理进行统一控制呢?
F5网站上提供了一个F5 Big IP和Istio集成的案例。在该案例中, Service Mesh中的微服务需要和一个外部数据库系统进行通信,为了对数据库进行保护,在数据库前放置了一个F5 Big IP设备作为反向代理,并进行下述配置:
F5的该案例证明了Service Mesh和F5设备之间集成的可能性,但是需要在F5 Big IP设备上进行一系列复杂的配置操作,包括开通服务端口,配置TLS证书,设置认证和访问策略等等。如果Service Mesh控制面可以将F5设备也纳入统一控制,通过控制面统一下发规则,则可以极大简化网络的配置工作,加快业务下发的敏捷性。 {{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/hardware-sidecar.jpg" caption="采用Service Mesh配置F5 Big IP">}}
SDN的另一个优势是可以通过控制器提供的北向接口快速开发各种SDN应用,而不需要对硬件进行升级,这种模式加快了新业务上线的周期,鼓励各种创新业务蓬勃发展。目前Service Mesh在应用方面尚未有太多实践,但从SDN的发展历程来看,Service Mesh应用层有极大的发展空间。
下图是一个利用控制面接口开发的用户业务订阅及SLA管理的APP示例:
{{< figure src="/img/2019-10-26-what-can-service-mesh-learn-from-sdn/user-ubscription.jpg" caption="Service Mesh应用:用户业务订阅及SLA管理">}}
上面只是一个非常简单的应用示例。通过对Service Mesh控制面提供的流量控制,安全策略,拓扑信息、性能指标等基本能力进行组合,并加以创新,可以创建大量端到端的高附加值业务,例如支持业务平滑升级的灰度发布,测试微服务系统健壮性的混沌测试,微服务的监控系统等等。
SDN和Service Mesh的出现都是为了解决类似的网络通信问题,两者都采用了“数据面+控制面”这种类似的架构,但位于网络协议的不同层次。Service Mesh并不是下一代的SDN,但通过借鉴SDN的发展经验,Service Mesh也许可以向下面这些方向发展:
备注:本文来自于 Service Mesher Meetup 成都站的话题分享 Service Mesh是下一代SDN吗? 点击链接可以下载演讲稿。
YouTube {{< youtube nGkxp-2OsKg >}}