要想业务中台建得快,最好用Service Mesh来带
中国企业数字化转型进入深水区,业务中台及下一代微服务Service Mesh(服务网格)被越来越多的人关注,本文结合网易轻舟微服务Service Mesh实践,解析业务中台为什么需要Service Mesh,以及实施Service Mesh的技术方案。
业务中台呼唤Service Mesh
当业务系统研发团队至少大几十人(含外包的),需求多变化快,系统又涉及多个领域(比如做ERP、电商的),业务逻辑比较复杂。这时业务中台可以把系统和业务领域划分清楚,提升软件复用能力,加快需求响应速度。
中台是一个独立的组织负责并为多个前台业务服务,因此需要一个标准的服务接口、成熟的服务治理能力和高效的敏捷研发技术,相对于传统的基于ESB(企业服务总线)的面向服务架构(SOA)技术,微服务架构成为业界的共同选择。微服务提供快速迭代、灰度发布、持续交付及声明式运维的特点,与业务中台的追求天然契合。
微服务化也是互联网软件产品发展的必然结果,以网易微服务演进的历程为例,最初的单体应用在业务规模、并发访问量不断增长时,都会被拆分成一些微服务,由不同的小团队维护,以获得研发、部署和运维上的便捷性。
在微服务演进的过程中,不少的企业已经引入Dubbo、Spring Cloud等传统的微服务框架,来解决服务通信的效率,以及服务治理相关的问题。然而,这种传统的微服务框架并不足以应对建设企业业务中台的挑战。作为前台共性业务能力,中台天然需要一个统一的技术栈,实现异构系统整合,以及微服务设施下沉,而这些,是Dubbo或者Spring Cloud力有未逮的。
首先,大型企业或多或少都有统一技术栈的需求,即便都是Java业务,所采用的技术栈也有Dubbo、Spring Cloud以及自研RPC框架之分。其次,有的老的业务采用.Net、C++或者其他语言,需要和新的Java业务整合,难度很大。另外,从架构上看,中台是一种基础设施的下沉,微服务框架则是一种不彻底的下沉,因为它还是在业务开发代码里面的。而这种对业务的侵入性,也造成了服务框架升级的困难。
微服务圈的新贵Service Mesh就是应对上述挑战的曙光。Service Mesh是用以处理服务与服务之间的通信的专用基础设施层,也就是说这种下沉使得服务治理不再和业务代码融合在一起,而是作为一层专用的微服务设施。
Service Mesh具有三个明显的优势:第一它是一个独立的进程,和业务是解耦的,对业务代码无侵入;第二,是具备跨语言特性,上文说的Dubbo和Spring Cloud其实都是Java技术栈,而Service Mesh具备整合一些C++、Golang之类的异构语言应用的能力,因为它没有进入到进程内;第三是它提供了熔断、限流等丰富的微服务服务治理功能。
这些优势,使得Service Mesh可以比较容易地解决中台架构下微服务化存在的问题。对于使用采购或外包模式的传统企业尤其如此。传统企业往往需要将后台的应用进行封装或者重构为中台,来支撑前台灵活的业务变化,自研系统还可以采用Spring Cloud来重构,但采购的系统只能使用封装的模式,而采购的不同系统一般采用.Net、Spring MVC、PHP、Python等不同的技术栈,如果没有Service Mesh,接入微服务体系就会是一场噩梦。
实施Service Mesh的技术方案
Service Mesh先进的理念,是否已经有相应的技术方案?
答案是肯定的。主流云原生Service Mesh框架是Istio,它是谷歌、IBM、Lyft联合开发的。Istio采用Go语言写的,与容器编排系统Kubernetes一脉相承,承载了服务治理方面的期待。因为Kubernetes在容器圈是无可争议的王者,大家比较看好Istio。
Istio提供了完整的Service Mesh的解决方案,数据面是一个叫Envoy的组件,控制面的组件包括Pilot、Mixer、Citadel和Galley等。在下图服务A调用服务B的流程中,支持这种调用的Sidecar就是用Envoy组件来实现的,下半部分是控制面的组件,最主要的是Pilot,其他是配合功能完整性的一些组件。

先看数据面核心组件Envoy。数据面跟微服务本身相关性非常大的,因为所有的流量以及大部分治理都需要经过它。
目前网易和业界不少探索Service Mesh的公司都采用Envoy作为数据面的标准组件,这源于它的七大优势。第一,它是基于现代C++开发的网络L4/L7的代理,这意味着它能够提供很高的性能。根据网易轻舟微服务团队的实测,使用经典的HTTP网络协议,Envoy的性能确实是比较强的。第二是流量管理,Envoy可以对服务流量做路由、分流等动态的管理。第三是服务治理方面的特性,包括熔断、限流,以及在里面注入一些故障。第四是多协议支持,Envoy除了支持比较经典的HTTP 1.x版本,还支持2.x版本,也支持gRPC、TCP、Web Socket等。它不仅可以对服务之间调用的流量进行管理,一些DB、缓存其实也可以做到,因为它是网络4-7层的。第五是负载均衡,Envoy支持的算法非常多。第六是动态配置API,作为一个数据面应该有接口可以动态去控制,让控制面来调用配置。第七是可观察性设计,作为一个数据面应该把经过它的流量和数据上报,让后端更庞大的监控系统看到整个微服务体系到底是一个怎样的状态。最后是支持自定义插件扩展能力的,企业对Envoy本身的功能如果不满足,还可以通过插件进行扩展。
Istio的控制面核心组件是Pilot,它最主要的功能是和Sidecar建立双向的gRPC连接,可以通过控制面实时下发配置或是服务发现的信息,包括服务发现和抽象,以及配置的转化和分发。
另外三个组件,Mixer主要是做策略检查跟遥测,包括检查一些权限,或者通过它上报监控数据。Citadel负责安全性方面,可以做证书与秘钥管理相关的分发。Galley是1.1版本正式引入的,主要做配置校验。这些组件中,业界诟病最多的是Mixer做策略检查操作的时候会有性能问题。
要想业务中台建得快,最好用Service Mesh来带的更多相关文章
- 不想业务被中断?快来解锁华为云RDS for MySQL新特性
摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...
- 微服务应用新趋势:Service Mesh、AIOps和中台化
微服务技术由于天生支持快速迭代.弹性扩展的特点,使企业能够在不确定性下提升发展速度及抗风险能力,受到了越来越多的关注.当前,云服务商纷纷试水微服务产品,最为典型的,当属推出轻舟微服务平台.剑指整个微服 ...
- python 想搞加密算法吗?快戳这里
加密算法介绍 一,HASH Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换 ...
- 002-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-第二章 构建业务中台的基础-共享服务体系简介
2.1.回归SOA的本质-服务重用 SOA理念的核心价值:松耦合的服务带来业务的复用,通过服务的编排助力业务的快速响应和创新. 现有模式多是烟囱式结合 ESB 企业总线打通不同系统间的交互. 2.2. ...
- 想减少代码量,快设置一个有感知的 Aware Spring Bean
摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ...
- 高考结束了,在门头沟有没有想学php建站的。
教你简单的html 教你文章后台管理 数据库管理及备份 编程工具的使用 如何找到你要学习的内容
- 想要看懂鸿蒙OS源码?朱老师带你从框架分析开始
HarmonyOS V2.0是面向轻量级设备的鸿蒙L0/L1级设备端操作系统,于2020.9开源至今已有2个多月,但是很多同学在学习鸿蒙源码时仍然感觉难以下手,找不到突破口. 2020.11.25(本 ...
- 转载:Service Mesh:重塑微服务市场--敖小剑
转载地址:https://skyao.io/talk/201805-service-mesh-rebuild-microservice-market/ 重点: 不要太过关注 Service Mesh ...
- Service Mesh简介
1.1 Service Mesh 1.1.1 什么是Service Mesh Service Mesh是最近才兴起的一个名词,最早在2016年9月29日由开发Linkerd的Buoyant公司首次 ...
- 解开Service Mesh的神秘面纱
一.什么是Service Mesh? 下面是 Willian Morgan 对 Service Mesh 的解释: A Service Mesh is a dedicated infrastructu ...
随机推荐
- .NET周刊【5月第2期 2024-05-12】
国内文章 C#在工业数字孪生中的开发路线实践 https://mp.weixin.qq.com/s/b_Pjt2oii0Xa_sZp_9wYWg 这篇文章探讨了C#在工业数字孪生技术中的应用,介绍了三 ...
- SpringCloud解决feign调用token丢失问题
背景讨论 feign请求 在微服务环境中,完成一个http请求,经常需要调用其他好几个服务才可以完成其功能,这种情况非常普遍,无法避免.那么就需要服务之间的通过feignClient发起请求,获取需要 ...
- JS监听DOM创建和销毁
源码 web开发指南 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...
- Linux搭建ES集群环境
搭建ES集群环境 准备 三台服务器 其中一台为主机节点 ES安装自行上传到各个节点home路径下并解压重命名 集群名称:cluster-big-data同一个集群多个节点,集群名称必须相同,节点名称不 ...
- linux下RPM工具的使用:RPM安装/查询/查看/卸载/升级软件包
目录 一.关于软件包 二.RPM软件包 三.RPM包通用的命名规则 四.RPM工具的使用 4.1 rpm安装软件的功能 4.2 rpm查询的功能 4.3 rpm查看软件包内容是否被修改 4.4 rpm ...
- uniapp 图片懒加载的一种方式
如果是列表页,可以采用前端分页,通过scroll-view 下拉,在绑定图片地址信息,这样就能下拉部分,加载部分图片了. pageQuery() { let currentPage = this.pQ ...
- Django——Media配置
settings.py中的配置: MEDIA_ROOT 和 MEDIA_URL MEDIA_ROOT 是指:用户上传文件的根路径 --> MEDIA_ROOT = os.path.join(BA ...
- NOIP模拟95(多校28)
T1 嗑瓜子 解题思路 \(f_{i,j}\) 表示操作 \(i\) 次,拿走了 \(j\) 个瓜子的概率,转移就比较直接了: \[f_{i+1,j+1}\leftarrow f_{i,j}\time ...
- kettle从入门到精通 第五十八课 ETL之kettle HTTP post使用教程
1.今天群里有位朋友问我有没有关于调用http接口的kettle 示例,我下意识的去翻我的公众号推文,愣是没找到.果断开始撸. 2.本次演示流程通过调用接口[网易云音乐随机歌曲],然后解析返回的数据, ...
- shell基础概述
1.0 编程的目的 计算机的发明,是为了用机器取代/解放人力,而编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑/电脑一样自动执行的效果. 编程 ...