对于单体应用来说,一般只有流入和流出两种流量。而微服务架构引入了跨进程的网络通信,流量发生在服务之间。由许多服务组成了复杂的网络拓扑结构,每次请求都会产生流量。
这些流量如果没有妥善的管理,整个应用的行为和状态将会不可控。
流量的类型,如上图所示,一般有两种:南北流量和东西流量。
所谓南北流量,就是从客户端到服务端的流量。对于传统的数据中心而言,它是从外部进入,或离开数据中心的流量;对于微服务而言,它是从应用外部进入应用内部,或从应用内部流出到应用外部的流量。
所谓东西流量,就是微服务内部的服务到服务之间的流量。对于传统数据中心而言,它代表数据中心内不同服务器之间的流量,或不同数据中心之间的流量;对于微服务而言,它代表微服务应用中服务与服务之间的流量。
在微服务架构中,东西流量远远大于南北流量,用户一个请求,可以需要由多个不同服务协作完成,即一个南北流量可以会产生多个东西流量。因此微服务中对东西流量的管理是重点。
**服务网格(service mesh)**的云方案就是为管理东西流量而产生的。服务网格是一个处理服务与服务之间通信的基础设施,负责在云原生应用的复杂的服务拓扑结构下进行可靠的请求传输。它是一组和应用服务部署在一起的轻量级的网络代理,对应用透明。
服务网格作为微服务架构中负责网络通信的基础设施,它能够处理网络通信中绝大多数的问题,服务网格通过在每个业务服务前增加一个服务代理,再让这个服务代理劫持流量并转发到业务服务来实现流量管理。因为服务代理能够劫持流量,所以它能够根据需要对流量进行各种处理,如根据请求头将请求分发到不同的服务版本。总结来说,服务网格有四大功能:
- 流量管理:这是它的核心,基础是它能够劫持流量。应用:动态路由,通过配置路由规则来动态确定要请求的服务,请求需要被路由到生产环境还是预发布环境,测试版本还是运行版本,仅针对登录用户还是全体用户等等,都可能通过配置路由规则来实现。
- 策略:为应用添加一些请求控制策略,如黑名单,白名单,限流等
- 安全:因为服务代理能够劫持流量,所以它可以对流量进行一系列的认证和授权操作,如为流量添加双向TLS等
- 可观察:请求中一定会包含很多有用的信息,这些信息可以通过服务网格进行收集并上报到对应的后台处理,然后就可以以各种可视化方式被展示出来,以便后台开发者全面监控和观察应用的运行状态。
服务网络对服务应用是透明的,所有流量管理都由服务代理来完成,服务应用代码一般不需要做修改,服务代理是一个单独的进程(通常以容器的方式部署在业务服务旁和服务应用的容器共享同一个网络环境。)服务代理会自动劫持流量并转发请求。