中国企业数字化转型进入深水区,业务中台及下一代微服务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来带的更多相关文章

  1. 不想业务被中断?快来解锁华为云RDS for MySQL新特性

    摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...

  2. 微服务应用新趋势:Service Mesh、AIOps和中台化

    微服务技术由于天生支持快速迭代.弹性扩展的特点,使企业能够在不确定性下提升发展速度及抗风险能力,受到了越来越多的关注.当前,云服务商纷纷试水微服务产品,最为典型的,当属推出轻舟微服务平台.剑指整个微服 ...

  3. python 想搞加密算法吗?快戳这里

    加密算法介绍 一,HASH Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换 ...

  4. 002-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-第二章 构建业务中台的基础-共享服务体系简介

    2.1.回归SOA的本质-服务重用 SOA理念的核心价值:松耦合的服务带来业务的复用,通过服务的编排助力业务的快速响应和创新. 现有模式多是烟囱式结合 ESB 企业总线打通不同系统间的交互. 2.2. ...

  5. 想减少代码量,快设置一个有感知的 Aware Spring Bean

    摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ...

  6. 高考结束了,在门头沟有没有想学php建站的。

    教你简单的html 教你文章后台管理 数据库管理及备份 编程工具的使用 如何找到你要学习的内容

  7. 想要看懂鸿蒙OS源码?朱老师带你从框架分析开始

    HarmonyOS V2.0是面向轻量级设备的鸿蒙L0/L1级设备端操作系统,于2020.9开源至今已有2个多月,但是很多同学在学习鸿蒙源码时仍然感觉难以下手,找不到突破口. 2020.11.25(本 ...

  8. 转载:Service Mesh:重塑微服务市场--敖小剑

    转载地址:https://skyao.io/talk/201805-service-mesh-rebuild-microservice-market/ 重点: 不要太过关注  Service Mesh ...

  9. Service Mesh简介

    1.1 Service Mesh   1.1.1 什么是Service Mesh Service Mesh是最近才兴起的一个名词,最早在2016年9月29日由开发Linkerd的Buoyant公司首次 ...

  10. 解开Service Mesh的神秘面纱

    一.什么是Service Mesh? 下面是 Willian Morgan 对 Service Mesh 的解释: A Service Mesh is a dedicated infrastructu ...

随机推荐

  1. Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页

    10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传 import time from selenium.webdriver.support.select imp ...

  2. mysql命令最新

    查看授权 mysql> select user,host from mysql.user; +--------+------------+ | user | host | +--------+- ...

  3. 基于Python的性能分析

    1.什么是性能分析 字面意思就是对程序的性能,从用户角度出发就是运行的速度,占用的内存. 通过对以上情况的分析,来决定程序的哪部份能被优化.提高程序的速度以及内存的使用效率. 首先我们要弄清楚造成时间 ...

  4. post请求和get请求区别及其实例

    1.一般我们在浏览器输入一个网址访问网站都是GET请求;在FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式.HTTP定义了与服务器交互的不同方法, ...

  5. 编译安装mysql5.7.20

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \ ...

  6. ARM汇编基础

    1 GNU语法 1.1 GNU汇编 GNU 汇编语法适用于所有的架构,并不是 ARM 独享的,GNU 汇编由一系列的语句组成,每行一条语句,每条语句有三个可选部分,如下: label: instruc ...

  7. Linux 提权-Cron Jobs

    本文通过 Google 翻译 Cron Jobs – Linux Privilege Escalation - Juggernaut-Sec 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行 ...

  8. 瑞数456vmp逆向分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  9. (拼多多)pdd的Anti-Content

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  10. elementUI slider组件,带范围选择实现双向绑定

    网上查过很多相关文章都没有一章是写element ui滑块带范围实现双向绑定 二个滑块二头的数据怎么得到 我的需求是做个时间轴要滑动选择不同的时间 开始很难做最后一点一点摸索得出的结论 好在写出来了先 ...