2018年,微服务方兴未艾,Service Mesh(服务网格)又快速崛起。有观点认为,2018年可被称之为“Service Mesh元年”,在未来两年中,Service Mesh将迎来爆发式增长,成为下一代的微服务架构。

那么,Service Mesh到底是什么?自2016年被提出,为何不到两年就获得了如此高的人气?Service Mesh又能为企业解决哪些问题?在近日召开的GIAC全球互联网架构大会上,蚂蚁金服高级技术专家黄挺以蚂蚁金服的自身实践为例,深入解读了Service Mesh。

蚂蚁金服高级技术专家黄挺

解决蚂蚁金服三大难题

“Service Mesh”最早由开发Linkerd的Buoyant公司提出,2016年9月第一次公开使用该名词。对于什么是Service Mesh,Linkerd首席执行官William Morgan曾经给出这样的解释:

“服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格负责在这些拓扑中实现请求的可靠传输。在实践中,服务网格通常实现为一组轻量级网络代理,它们与应用程序部署在一起,而对应用程序透明。”

这听起来还是有些抽象,黄挺用蚂蚁金服自身的例子,解读了Service Mesh的三个主要应用场景:

其一,解决多语言通信的问题,用同一套基础设施解决不同的语言的通信问题。

众所周知,SOFA 中间件(Scalable Open Financial Architecture)是蚂蚁金服自主研发的金融级分布式中间件,被蚂蚁金服广泛应用于支付、借贷、信用、基金、保险等全金融场景,支撑蚂蚁金服平稳度过历次“双11”、“双12”、“新春红包”等苛刻考验。

如今SOFA包含丰富的组件,如SOFA Boot、微服务、数据访问代理、分布式事物、消息队列、分布式链路跟踪等,基本上包含了分布式架构所需的各种中间件。

“然而有一个问题是,这些中间件都是用Java写的”,黄挺指出,当前蚂蚁金服技术栈大部分基于Java语言,包含2000+应用和20000+服务;但还有一部分应用是基于NodeJS、C++、Golang和Python语言,要把这些应用融入到SOFA体系,按照传统的方式,各种语言的客户端都需要再实现一遍,带来巨大的工作量,同时要承担大量风险。

而通过Service Mesh中的Sidecar,服务注册中心、限流熔断、动态配置、故障注入等客户端可以和NodeJS、C++、Golang、Python等具体语言解绑,让基础中间件和具体的应用脱离关联,即“一次实现,搞定所有语言的客户端”,用一套基础设施解决不同语言的通信问题,大大节省了工作量。

其二,解决遗留系统融入问题,让一些遗留系统更好的融入到云原生体系。

很多传统企业,包括金融机构往往有着大量的遗留系统,随着传统企业云化的深入,这些遗留系统也需要转变为云原生应用。“一种方式是直接把系统代码重新做一遍,直接用云原生的方式再写一遍”,黄挺认为,这种方式虽然比较直接,但是也比较粗暴,有可能在迁移过程当中出现非常多的Bug。

而有了Service Mesh之后,通过Sidecar,遗留系统不经改造,或是只需要很少的改造,可以非常方便的和云原生体系融合到一起。

其三,解耦基础设施团队和应用研发团队,增强基础设施团队的交付能力和交付速度。

近些年,蚂蚁金服的技术架构逐渐从单体应用向服务化架构演进。据黄挺介绍,在单体应用中,通常需要多个团队去改同一套代码,一起部署、一起发布,以及发现问题一起回滚,这个过程非常痛苦。

“应用研发有时候无法很好的理解基础设施的东西,升级容易出现问题。基础设施团队有时候也无法很好地去了解应用研发。应用研发和基础设施团队耦合在一起发布、变更、升级,非常容易出现问题”,黄挺说。

Service Mesh让蚂蚁金服找到了解决问题的方法,通过Service Mesh,应用研发和基础设施团队能够最大程度地解耦,做厚技术中台,让中间件可以更快的交付业务需要的能力。

黄挺举例说,以前SOFARPC中新的能力需要半年甚至一年的时间才能逐步应用于蚂蚁金服核心系统,有了SOFA Mesh(蚂蚁金服自研的Service Mesh),蚂蚁金服可以在一个月的时间内将新的能力快速地提供给所有的业务系统,而不用一个个的去升级业务系统。

蚂蚁金服SOFA Mesh自研路

Service Mesh是一个很新的框架,2016年1月 15日,Linkerd 0.0.7版本发布,这是能够在Github上看到的第一个Service Mesh。如今,业界流行的Service Mesh框架已经包括Linkerd、Istio和Conduit等。

据黄挺介绍,蚂蚁金服在考量业界主流Service Mesh框架的时候,有着两个明确的需求:其一,能否从蚂蚁金服当前的架构下渐进式地演进到Service Mesh架构之下;其二,在性能和稳定性上能否满足蚂蚁金服金融级以及高流量的要求。

经过大规模的验证,当前业界主流的Service Mesh并不能很好地满足蚂蚁金服这两个需求。例如,Istio在性能上存有缺陷,无法满足蚂蚁金服高流量和高性能的需求;Linkerd架构不够开放,资源占用率较高;Conduit当前版本还不够成熟,并且基于非常新的RUST语言,精通的人较少。

现有Service Mesh架构均不能满足需求,而蚂蚁金服在传统服务化架构上已经有十余年积累,这两个因素让蚂蚁金服选择自研Service Mesh——SOFA Mesh

但“自研”并不代表一定要“从零开始”。“我们没有从零开始直接构建一个Service Mesh框架,而是借鉴了一些现有Service Mesh框架的优秀经验,同时尽量遵从整个Service Mesh社区的规范”,黄挺表示,例如,在Control Plane的Pilot以及Auth,SOFA Mesh直接选择了集成Istio的部分,并且进行了适当地增强。

“SOFA Mesh一切的技术选择都是能够让蚂蚁金服稳定、高效、渐进式地演进到 Serivce Mesh 架构下,因此SOFA Mesh在技术上的选择更加务实,也希望能够和业界保持技术上的互通”,黄挺强调。

尽管不是从零开始构建,但SOFA Mesh的开发过程也并不简单。

黄挺回忆说,SOFA Mesh自研过程中最大的困难是第一次上线时候的进度压力,因为当时有着切实的业务需求:“当时的一个场景需要用C++去调用后端一个用SOFA写的Java系统,为了满足业务上的要求,我们集结了应用网络和中间件团队,组成了技术攻坚团队,最终花了差不多两个月的时间从零开始构建了SOFA Mesh Golang版本的Sidecar,并且对接到SOFA服务化体系下,最终保证了业务的正常上线,在性能以及稳定性上都满足了业务的需求。”

经过蚂蚁金服业务场景的不断磨练,SOFA Mesh如今已经在蚂蚁金服多个场景中落地。据黄挺介绍,SOFA Mesh在蚂蚁金服内部更多的被应用于多语言支持,亦被应用于解决内部服务调用的安全以及在能力发布上的问题,此外也在规划解决异构体系的通信问题,在蚂蚁金服业务中发挥着越来越关键的作用。

Mesh的未来——Xmesh

作为一个新兴的技术框架,Service Mesh从2016年被提出来,去年迎来了蓬勃发展。不仅是蚂蚁金服,谷歌、IBM、华为等业界巨头已经参与到Service Mesh的研发之中,国内多家互联网和云计算企业也开始在Service Mesh进行验证和投入。

黄挺认为,2018年,随着云原生理念的进一步地被传播,以及 Kubernetes 等容器编排平台被更多的公司所采纳,Service Mesh 也必将在今年有更好蓬勃地发展。

“我们预计今年会有更多的公司在内部去实践Service Mesh,也非常期待在业界能够听到更多公司的Service Mesh的实践。从形态上,除了Service Mesh,也会逐步出现其他形式的Mesh,比如Message Mesh或者DB Mesh等等”,对于Service Mesh的未来,黄挺十分乐观。

而对于蚂蚁金服来说,其自研的SOFA Mesh会继续在内部更多场景下落地,用更多的场景去“磨练”SOFA Mesh。“未来我们也不排除在服务调用上之外的场景做 Mesh,在数据访问、消息通信上也用上Mesh的场景,以达到在基础设施上更加统一的目的”黄挺说。

据黄挺透露,蚂蚁金服目前也正在紧锣密鼓地准备SOFA Mesh的开源。SOFA Mesh的诞生结合了业界的先进理念和经验,而蚂蚁金服也希望将SOFA Mesh的成果反馈给社区,推动SOFA Mesh生态的良性发展。

蚂蚁金服缘何自研Service Mesh?的更多相关文章

  1. 干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?

    干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的? https://www.sohu.com/a/235575064_99940985 干货 | 蚂蚁金服是如何实现 ...

  2. 蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创

    小蚂蚁说: 11月8日,在第五届世界互联网大会-<人工智能:融合发展新机遇>论坛上,蚂蚁金服副总裁.首席数据科学家漆远认为AI具有控制风险.降本增效和提升用户体验三大作用. 11月8日,第 ...

  3. 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录

    小蚂蚁说: 本文是基于在 Service Mesher Meetup 上海站的主题分享<蚂蚁金服 Service Mesh 渐进式迁移方案>内容整理,完整的分享 PPT 获取方式见文章底部 ...

  4. 蚂蚁金服 Service Mesh 实践探索

    SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...

  5. 蚂蚁金服研发的金融级分布式中间件SOFA背后的故事

    导读:GIAC大会期间,蚂蚁金服杨冰,黄挺等讲师面向华南技术社区做了<数字金融时代的云原生架构转型路径>和<从传统服务化走向Service Mesh>等演讲,就此机会,高可用架 ...

  6. 备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?

    作者 | 蚂蚁金服技术专家 沧漠 关注『阿里巴巴云原生』公众号,回复关键词"1024",可获取本文 PPT. 前言 Kubernetes 以其超前的设计理念和优秀的技术架构,在容器 ...

  7. 胡喜:从 BASIC 到 basic ,蚂蚁金服技术要解决两个基本的计算问题

    摘要: 揭开 BASIC College 神秘面纱,蚂蚁金服首次揭秘人才培养机制. 导读:5 月 6 日,蚂蚁金服副 CTO 胡喜在 2019 年 QCon 上做了<蚂蚁金服十五年技术架构演进之 ...

  8. 蚂蚁金服SOFAMesh在多语言上的实践

    在用一项技术前,一定要知道它的优点和缺点,它的优点是否对你有足够的吸引力,它的缺点不足你是否有办法补上.黄挺在CNUTCon全球运维大会上的分享也很不错. 黄挺,蚂蚁金服高级技术专家,蚂蚁金服分布式架 ...

  9. 我是如何拿到蚂蚁金服 offer 的 ?

    阅读本文大概需要 5.6 分钟. 作者:翟洪毅 一.梦想和被拒 二.积累 三.结语   首先介绍一下投稿作者 翟洪毅,16年华理计算机本科毕业.在年前拿到了蚂蚁金服Java开发的offer,P6. 工 ...

随机推荐

  1. 摄像专用的SD卡推荐

      此类SD卡主要需要满足快速写入:特别对于4K的支持,速度要有很高才能满足. 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  2. Java对象的内存实际占用

    一.打包和使用方法参考我之前的这篇文章,本文主要是更新了测量的类及方法,实际测试这个方法更准确. https://www.cnblogs.com/yoyotl/p/8421287.html 二.新的测 ...

  3. win8使用技巧

    windows 8操作系统相信大家已经不再陌生了,虽然正式版本还未发布,但不少朋友已经在使用微软事先推出的windows 消费者预览版,直白的说就是公测版,预览版是免费的,但仅可以使用一年,但其功能与 ...

  4. golang channel select

    尝试多个channel同时触发时,select的表现: package main import ( "fmt" "time" ) func loop(ch ch ...

  5. PHP优化——从语言到业务

    经常有人说php速度慢,其实语言层面的速度差异和实际的业务相比,不在一个数量级. 业务的瓶颈往往在于io,而不是CPU. 0x0 语言 语法 单引号和双引号 单引号不解析字符串里的变量,而双引号会解析 ...

  6. linux设置开机自启动

    一..在/etc/rc.local文件中添加自启动命令 执行命令: 编辑"/etc/rc.local",添加你想开机运行的命令 运行程序脚本:然后在文件最后一行添加要执行程序的全路 ...

  7. Go Revel - app.conf

    ##概览 `app.conf`为应用程序的配置文件,它使用`goconfig`的语法,与windows的ini文件类似. 示例: app.name=chat app.secret=pJLzyoiDe1 ...

  8. 小技巧 - CSS中:hover调试

    在调试CSS的时候,我一般使用Chrome的F12开发者工具,或者FireFox的FireBug直接在元素上面修改好Style后,再写入到CSS中.前几天遇到一个问题就是a:hover,鼠标一移开效果 ...

  9. spring mvc中获取请求URL

    String baseUrl=request.getScheme()+"://"+request.getServerName()+":"+request.get ...

  10. python笔记2-数据类型:列表[List]常用操作

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,索引从0开始,依此类推. 序列都可以进行的操作:包括 索引,切片,加,乘,检查成员. 列表是最常用的Pyth ...