Service Mesh在企业级应用的生存之道

数据中
• 阅读 1082

导读

近期与几位企业用户交流 Service Mesh 及其相关技术,大家对于它所展现的形态以及未来发展都表示出极大的兴趣。但对当下企业应用现状如何与 Service Mesh 整合到一起又表现出极大的困惑。本文力图结合Service Mesh技术特性与企业应用的实际情况,就 Service Mesh 如何应对企业应用给出博云自身的思考,欢迎有兴趣的朋友一起讨论。

在进行详细探讨之前,我们首先回顾一下 Service Mesh 的定义:服务网格是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。在实践中,服务网格通常实现一组与应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。

从定义中我们可以清晰地看到 Service Mesh 的技术定位:“处理服务间通信的基础设施层”。因此我们不能希望它帮我们简化开发测试场景面临的挑战(DevOps 或者应用服务化,当然一定程度上可以解耦应用与基础中间件的调用关系,稍后会详细说明),或者解决应用部署场景的问题(部署问题由容器编排平台处理更加合适)。

总体来说,Service Mesh 专注业务应用部署上线后期的通信领域问题,同时一定程度上解耦业务单元与基础中间件的调用关系(例如服务注册中心)。如图所示:

Service Mesh在企业级应用的生存之道

围绕 Service Mesh 所聚焦的领域以及如何服务于企业级应用,本文重点探讨4个问题:

· Service Mesh 的技术特性;
· Service Mesh 与企业应用的整合之道;
· Service Mesh 的部署管理形态;
· Service Mesh 的远景形态。

Service Mesh技术特性

考虑到目前 Service Mesh 落地方式集中在以容器化为首的 PaaS 领域之内,因此我们也将重点基于容器化方案探讨 Service Mesh 所具备的技术特性。

从 Service Mesh发 展来看,无论是基础的 Docker 运行环境,还是以Kubernetes 为“事实标准”的容器编排环境,都是 Service Mesh 能够快速发展的基石。以 Kubernetes 为例,Service Mesh 并非技术上的创新,更多是利用 CRD 特性对 Kubernetes 的扩展以及传统技术的整合(防火墙、DNS服务发现等)。以 Isito 为例, Istio 基于引入的标准规范以及 Kubernetes CRD 特性自定义几十种自身的资源,并依赖 kubectl CLI 命令工具对这些 CRD 进行统一管理。

我们发现Service Mesh 的技术特性主要体现在5个方面:容器编排环境;数据代理控制;配置管理分发;服务链路追踪;服务通信安全。

容器编排环境

结合 Service Mesh 落地的几个方案来看,容器编排环境是 Service Mesh 能够落地的必备要素之一(这里暂时不深入讨论容器化采用的技术原理,如namespace,AUFS等)。容器化编排环境的特性能够将企业应用或者业务实例组织成方便管理和寻址的业务单元,方便系统化的方式访问这些单元。这里同样暂时忽略 Mesh 外围对接的各种 Adapter。

数据代理控制

从 Service Mesh 定义中可知,其本身是一个与应用绑定在一起的轻量级网络代理,该代理拦截所有服务请求的出站和入站流量,并依赖控制层面标准化接口提供的规则信息(最终转化成防火墙内的路由配置)进行流量的转发和控制,同时对调用日志、调用链路、响应时长进行记录和汇报。

配置管理分发

Service Mesh 为了保证数据代理功能的独立性,将配置与数据代理进行解耦。配置也称作控制层面,负责从容器环境搜集服务信息,并且以高度抽象化的标准接口提供给数据代理服务,为流量转发提供可靠的路由依赖。同时控制层面面向用户提供“声明式”的规则定义,这些规则会存储在容器平台中,同时生成路由转发的流量控制规则,并且以接口的形式提供给数据代理服务,为路由转发的流量控制提供管理依据。例如在 Istio 中规则定义表现为 Istio 定义的 CRD 资源,规则生效接口表现为 Policy 提供的 XDS 接口。

服务链路追踪

服务链路在 Service Mesh 中是基础必备的功能。它的实现依赖两部分:数据采集和链路呈现。数据采集主要依赖数据代理服务进行服务请求拦截或者转发时记录服务请求的源IP地址、目的IP地址和对应的服务名称等有效信息;链路呈现依赖于分布式跟踪系统,将采集的服务调用链路信息存储在分布式跟踪系统中,做集中呈现,例如 Zipkin 等。

服务通信安全

安全是企业应用必然关注的因素之一,那么 Service Mesh 在安全领域提供哪些技术特性呢?Service Mesh 作为 PaaS 的扩展实现,主要从3个层面为企业应用安全保驾护航:

第一:基于TLS的双向通行加密。例如Isito中可以在部署时打开TLS双向认证配置,并且依赖独立的证书管理功能,实现服务通信过程的加密。

第二:权限控制访问。Service Mesh为了保证服务调用的合法性,提供了权限访问控制。例如Isito中基于RBAC的权限访问控制;

第三:基于策略的黑白名单访问控制以及服务熔断控制。

当然仅仅依靠 Service Mesh 保证企业应用的安全是不够的,同样需要借助其他软硬件手段,例如防火墙、网络安全监控、内部异常检测等,具体不在本文讨论范围。

Service Mesh与企业级应用整合之道

在了解 Service Mesh 技术特性以后,我们重点来聊一下 Service Mesh 如何与企业级应用整合。

在具体展开之前,首先我们说一下企业应用的现状与特性:根据 Gartner 对当前 PaaS 市场的统计调研结果,大部分企业处于传统应用(物理或者虚拟化)向容器化转型的阶段,不同行业都期望能够把自己的应用合理地迁移到云端(重点考虑 PaaS 领域)。但对于遗留的企业系统,尤其是核心系统上 PaaS 多多少少有一定的顾虑,因此我们把企业应用的部署形态分为三个等级(等级没有先后之分):

第一:核心系统,短期(未来几年)不会考虑容器化处理,例如金融行业的核心数据库和核心系统等;
第二:支撑系统,当下以虚拟化居多,可能会尝试服务容器化;
第三:外部系统,虚拟化为主,期望迁移到 PaaS 平台;而目前无论是项目交付还是产品自研,绝大多数围绕第三类应用系统展开,这也是我们当下考虑的重点。

其次我们来分析一下企业应用的特性:企业应用在大多数情况下是以业务为驱动的。按照这个层面考虑,构建业务系统时存在两种情况:一体化应用和服务化应用。

针对一体化应用,与 Service Mesh 进行整合时,并不能发挥 Service Mesh 的功效(由于业务集中处理,所有功能及非功能系统全部集中在代码本身,一定程度上 Service Mesh 集成意义不大)。因此我们重点考虑服务化应用与 Service Mesh 的整合。这样考虑的缘由是基于微服务或者云原生应用是构建系统的趋势所在,也更符合应用形态的发展规律。

结合企业级应用的现状以及特性,我们把 Service Mesh 与企业应用的整合划分为四个阶段,如下图所示:

Service Mesh在企业级应用的生存之道

应用服务化

应用服务化与大家所说的微服务构建有一些不同之处。整体来讲,应用服务化还是利用微服务拆分原则,对应用业务单元进行服务拆分,同时确定服务间交互依赖的支撑组件。

不同的地方在于服务直接的交互组件的选型,不再采用 Spring Cloud、Dubbo 或者其他组件提供的支撑功能(如服务注册与发现,服务链路跟踪,负载均衡等),而是依赖容器平台(如 kubernetes 提供的服务注册发现,负载均衡)和 Service Mesh。此种做法的目的是将应用支撑组件下沉,帮助客户从技术调研与选型的细节中解脱出来,完全从业务角度考虑问题。业务之外的事情交由 PaaS 平台、Service Mesh 统一处理。

应用服务化,有两个目的:拆分应用业务单元和梳理业务单元调用链。(需要进一步说明:摒弃服务注册与发现组件,并非抛弃其能力,而是更换一种更方便的实现方式。开发环境下,各个服务联调直接利用 HTTP 或者其他协议的调用框架进行远程服务调用即可;测试或者生产环境中,将服务地址替换为容器平台注册的 Service 地址,从而具备服务注册发现,服务负载的能力)。

当然针对之前已经基于 Spring Cloud 或者 Dubbo 开发的业务系统,在不改变原有架构的基础上同样可以与 Service Mesh 进行整合,但是在服务治理层面会存在一定冲突,目前来看,最有效的解法是把支撑能力交给平台本身,将业务与支撑解耦,实现彻底的服务化。

应用容器化

上面已经提到过,在当下的落地实践中容器化是 Service Mesh 能够存在的必要条件(当然可以非容器化,但代价无疑是巨大的)。应用服务拆分后的容器化改造,目前有多种实现的方式。最直接的是利用 DevOps 工具链,构建应用服务容器镜像。当然针对不同平台或者语言也可以进行独立实现,例如 Maven 的 docker 插件,github 提供的 CI 流程,Jenkins 提供的 pipeline 等都能够很好的实现服务容器化操作,这里不展开讨论。需要指出的是,服务容器化的重点在于构建一套符合企业制度与风格的控制流程规范,这其中技术因素不是主导因素,需要结合企业自身情况决定。

应用Mesh整合

应用服务化和应用容器化能够解决应用向 PaaS 平台迁移的绝大多数场景。但是前两者仅仅解决了服务编排部署问题,并没有对服务上线后的管理支撑提供更多的功能,而 Service Mesh 恰恰定位于这一领域。那么应用如何与 Mesh 进行整合呢?可以分四步进行,如图所示:

Service Mesh在企业级应用的生存之道

第一步,Service Mesh 与 PaaS 基础设施整合。利用 PaaS 平台强大的编排部署能力,部署Service Mesh(具体项目例如Isito)的控制层面,各个组件在启动时会自动初始化 Mesh 所需的环境以及从 PaaS 平台中搜集需要的信息,必要的时候,可以把 Mesh 作为 PaaS 平台基础设施的一部分。

第二步,配置 PaaS 平台。使其具备Mesh中代理程序自动注入的功能(例如 Istio 自动注入Sidecar的配置),当然该步骤可以省略,后续由用户手动注入,目的在于拦截服务请求与转发流量。

第三步,利用 PaaS 平台直接部署业务应用。此时应用已经与Mesh绑定在一起共享整个网络栈资源,实现应用与 Service Mesh 的初步整合。

第四步,利用第二步中部署的 Service Mesh 控制层面入口,设置服务通信规则,从而控制服务之间的通信,最终完成应用与 Mesh 的整合。

Mesh管理控制

Service Mesh 管理控制是客户介入服务间通信的唯一入口。而 Service Mesh 基于“声明式”规则的控制将决定企业管理过程中更多的是规则的设定者,却不具备对规则的有效性进行实时校验的条件。因此需要结合其他外围组件对当前服务是否符合预期进行监测。例如对接 Prometheus,获取服务的运行数据(包括 tcp 连接数,请求成功数,请求链路时长等),并且基于 AlterManager 进行告警策略的管理;或者对接 ELK 日志平台,对服务调用的日志进行统一分析管理。当然还有其他系统,统一称为 Adapter。

总体而言,应用是数据的产生源头,Service Mesh 负责服务通信控制,服务数据收集以及服务数据上报,其他平台负责数据处理,三者通力合作,才能将 Service Mesh 切实和企业应用整合在一起,发挥它最大的功效。

Service Mesh部署管理形态

Service Mesh部署形态从当下的技术实现考虑,需要紧紧依赖 PaaS 平台的底层实现,尤其是对容器化环境的依赖。无论是单集群还是夸集群的部署,官方文档都提供了详尽的部署方案,这里不过多说明,可以参考 Istio 的实现(https://preliminary.istio.io/...)。

Servie Mesh 的管理形态最好的方式是与 PaaS 整合在一起,在 PaaS 自身的能力之上,增加服务治理的各种功能,有助于帮助 PaaS 平台更好的整合资源。Service Mesh 同样是对于 PaaS 的补充,从而形成全套的 PaaS 解决方案:包括 DevOps 工具形态,PaaS 编排部署形态,以及 Mesh 的服务治理形态。这时就具备了对应用生命周期各个阶段的集中控制能力。

Service Mesh远景形态

这个是大胆的预测了,无论从技术角度考虑,还是行业发展趋势,Service Mesh 在未来必然会成为服务治理的主要工具之一。它对于企业应用最大的优势是解耦应用业务,企业能够彻底从业务角度考虑问题。相比纯粹的微服务架构,又向前迈了一步,同时与容器编排部署平台的集成,最终有可能成为企业级应用编排部署和服务治理的标准形态。

点赞
收藏
评论区
推荐文章
linbojue linbojue
6个月前
Java与RAG的实现原理:从技术架构到实践应用
在企业智能化转型浪潮中,检索增强生成(RAG)技术成为大语言模型落地实际业务的关键桥梁。而Java凭借其强大的生态与企业级开发能力,为RAG的实现提供了稳定高效的技术底座。深入了解Java与RAG结合的实现原理,有助于开发者更好地构建智能化应用系统。一、R
Stella981 Stella981
4年前
Service Mesh
ServiceMesh的起源:为什么会出现ServiceMesh技术?微服务架构的特性特点1:围绕业务构建团队!ServiceMesh理论篇(https://s4.51cto.com/images/blog/202012/22/75e8
Wesley13 Wesley13
4年前
5分钟带你浅谈企业级PaaS平台HZERO!
汉得企业级PaaS平台HZERO一款基于微服务架构的企业级PaaS平台,可支持企业各类系统搭建或产品研发,帮助企业快速构建技术中台。HZERO是企业级PaaS平台,结合汉得多年项目实施经验,应用微服务、容器、DevOps等云原生技术,封装了大量技术开发包、技术应用组件、技术场景实现能力,并结合以人工智能、大数据、物联网和
Stella981 Stella981
4年前
Service Mesh 双十一后的探索和思考(上)
1\.引言2019年ServiceMesh在蚂蚁大规模落地并完美支撑双十一核心链路,对于落地过程在去年已经有系列文章解读。而在此之后的一年多时间,ServiceMesh在蚂蚁又在如何演进呢。本文介绍蚂蚁ServiceMesh在双十一落地之后所做的探索和思考。2\.
Stella981 Stella981
4年前
Service Mesh对企业安全而言意味着什么?
你听说过ServiceMesh(服务网格)吗?我相信你听说过。ServiceMesh正成为容器生态圈愈发重要的一部分。本文将简要概述ServiceMesh的作用,并深入探讨它们对于企业安全性的意义。!输入图片说明(https://static.oschina.net/uploads/img/201804/12175538_YJWW.jp
Stella981 Stella981
4年前
Service Mesh 在超大规模场景下的落地挑战
!1.png(https://ucc.alicdn.com/pic/developerecology/0c0714b471f34168b048a7ebcb6d8077.png)作者|至简 阿里云高级技术专家随着微服务软件架构在互联网企业的广泛实践,新一代微服务软件架构技术悄然兴起,ServiceMesh便是其中之一。根据Link
Stella981 Stella981
4年前
Service Mesh在微服务中的使用
ServiceMesh是什么?在微服务架构中怎么体现其价值?ServiceMesh(服务网格)是一个基础设施层,让服务之间的通信更安全、快速和可靠。如果你在构建云原生应用,那么就需要ServiceMesh。ServiceMesh已经成为云原生技术栈里的一个关键组件。很多拥有高负载流量业务的公司都在他们的生产应用里加入了Service
Wesley13 Wesley13
4年前
Java互联网应用和企业级应用的区别
企业级应用是为了满足企业日常运营所产生的IT应用,其目的是满足企业自己,对交付厂家而言,俗称2B业务;互联网应用则是面向个人用户,俗称2C业务。就个人经验,企业应用主要关注业务服务的能力,针对该企业的业务流程进行信息化、规范化、日志化,以提高企业业务及管理的效率。;互联网比较关注体验,用户粘性。技术上看,很多企业级应用的业务复杂性比互联网要大的多;而互
数据堂 数据堂
2年前
语音识别技术在智能客服领域的应用与挑战
一、引言随着人工智能技术的不断发展,智能客服成为了许多行业的重要应用。语音识别技术作为智能客服的重要组成部分,对于提高客户满意度和提升企业效率具有重要意义。本文将探讨语音识别技术在智能客服领域的应用与挑战。二、语音识别技术在智能客服领域的应用1.语音转文字
linbojue linbojue
4个月前
JBoltAI框架新版本前瞻:AI生成报告,让数据呈现更高效
在当今快速发展的数字化时代,企业对于数据处理与呈现的需求日益增长。如何快速、准确地从海量数据中提炼出有价值的信息,并以直观、易懂的报告形式展现出来,成为了众多企业关注的焦点。作为Java企业级AI应用开发的领军者,JBoltAI始终致力于为开发者提供实用、
近屿智能 近屿智能
3个月前
AI 得贤招聘相关智能体:助力企业优化 HR 招聘工具选择与流程
AI得贤招聘相关智能体:助力企业优化HR招聘工具选择与流程在AI技术持续渗透HR领域的当下,从招聘、培训到绩效与员工体验,各环节均在探索智能化转型。然而,企业HR常面临两大核心困惑:如何选择适配的AI工具?工具落地后如何实现有效应用?尤其在招聘环节,不当的
数据中
数据中
Lv1
孤云独鸟川光暮,万井千山海色秋。
文章
3
粉丝
0
获赞
0