大规模微服务架构下的ServiceMesh探索之路

合集下载

service mesh 原理

service mesh 原理

Service Mesh原理随着微服务架构的流行,服务之间的通信变得越来越复杂。

为了解决微服务架构中的通信、安全、可观察性等问题,Service Mesh应运而生。

本文将介绍Service Mesh的原理和工作机制。

一、什么是Service Mesh?1.1 传统架构 vs 微服务架构在传统的单体架构中,应用程序包含所有功能模块,所有的通信都发生在应用程序内部。

而在微服务架构中,应用程序被拆分为多个小的服务,每个服务可以独立部署、扩展和更新。

这种架构使得系统更加灵活,但也带来了新的挑战,如服务之间的通信、服务发现、负载均衡、安全等问题。

1.2 Service Mesh的出现为了解决微服务架构中的通信问题,Service Mesh应运而生。

Service Mesh是一个专门负责服务间通信的基础设施层。

它由一组轻量级的代理组成,这些代理被部署到每个微服务实例中,用于管理服务之间的通信。

二、Service Mesh的原理2.1 Sidecar代理Service Mesh采用sidecar代理的模式来实现对服务间通信的控制和管理。

在每个微服务实例的旁边都有一个轻量级的sidecar代理。

所有的流量都通过这个代理进行转发和控制。

2.2 数据面和控制面在Service Mesh架构中,有两个重要的概念:数据面和控制面。

数据面负责处理实际的请求转发和处理,而控制面负责配置、监控和管理数据面。

这种分离的架构使得Service Mesh能够更好地处理变化和故障。

2.3 代理通信在Service Mesh中,所有的服务之间的通信都通过代理进行。

当一个服务需要和另一个服务通信时,它会把请求发送给本地的代理,代理再根据配置进行请求转发和处理。

这种模式使得服务之间的通信变得透明,服务本身不需要关心通信细节。

2.4 丰富的功能除了基本的请求转发和处理外,Service Mesh还提供了一系列丰富的功能,如负载均衡、故障注入、安全控制、监控和追踪等。

智慧园区公共服务平台从SpringCloud微服务架构升级到服务网格(ServiceMesh)的设计

智慧园区公共服务平台从SpringCloud微服务架构升级到服务网格(ServiceMesh)的设计

智慧园区公共服务平台从SpringCloud微服务架构升级到服务网格(ServiceMesh)的设计与实现发布时间:2021-09-18T03:17:30.144Z 来源:《中国科技人才》2021年第16期作者:赵立杰[导读] 园区公共服务平台是智慧园区建设中重要的组成部分,园区服务智慧化可以给园区企业营造更好的发展软件环境,提高园区从业者的生活满意度、从而助力园区打造更好的营商环境。

上海阿法析地数据科技有限公司上海 200023摘要:园区公共服务平台是智慧园区建设中重要的组成部分,园区服务智慧化可以给园区企业营造更好的发展软件环境,提高园区从业者的生活满意度、从而助力园区打造更好的营商环境。

公司作为智慧园区的服务商,也建设了智慧园区服务平台,本着提升降低园区运营成本以及提升园区数据处理效率的目的,建设了基于SpringCloud微服务架构的综合管理平台,随着园区业务的应用推广、服务的不断增多,逐渐发现了诸多因SpringCloud架构的不足而导致的问题,例如平台的扩展性、稳定性与体验感不能满足需要。

本文将研究如何利用Istio服务网格(ServiceMesh)对平台来改造升级,重塑一个平台更加稳定、资源更加开放、模块化功能更加丰富、体系更加独立的公共服务平台。

关键词:智慧园区;公共服务平台;微服务结构;服务网格;设计一.引言随着产业化的不断推进,产业园区的发展需求也在随之逐渐提升,不仅需要极强的数据处理能力以便加强企业与员工之间的交流,还需要对园区各项设备进行统一管理,以便降低园区运营过程当中所产生的能耗。

通过物联网技术,传统产业园区已经普遍升级成为了智慧型园区,不仅各个数据单元可以通过网络平台互相联通,公共服务平台课课面向移动端(手机和平板电脑)、PC端、自助终端等访问终端、提供园区的线上服务平台、整合产业园区的产业资源、并为园区管理者提出科学决策提供参考,让产业园区的从业者生活工作便利、促进企业高质量发展。

基于ServiceComb的微服务架构实践

基于ServiceComb的微服务架构实践
• 基于PHP的存量业务,选型华为商用并开源的ServiceMesh方案Mesher,实现微服务化改造 Mesher本身是一套跨语言的微服务治理方案,治理能力与ServiceComb SDK对等,且天然互通、集中配置/治理。 对于多语言支持,不需要针对每种语言都实现一套服务治理,适合药物警戒系统当前的场景。 减少试错成本,而且不用PHP重复开发一边服务治理。
专业团队负责解读法规,洞察行业动态,满足政策要求
梅斯是国内唯一一家提供成熟、经过验证、全方位互通系统 的医学服务和IT驱动公司,并拥有强大的系统定制化开发能 力 梅斯拥有丰富的系统上线执行经验,确保项目快速推进
发展诉求
传统架构概览
基于Java的新开发 业务
公众号
…… 报告服务 用户服务
WebUI
Service Mesh微服务化和传统框架微服务化 混合部署协同实践分享
基于ServiceComb的微服务架构实践
背景和需求介绍:药物警戒系统
iDrugSafety®是上海梅斯医药科 技有限公司在国内市场面向生命科学 领域推出的专业用于药物警戒的电子 信息系统,宗旨是帮助药企更快、更 好的安全决策,为用户提供端对端安 全解决方案。iDrugSafety ®为药企 建立产品全生命周期安全性信息数据 库,整合临床研究及上市后产品安全 性数据,构建公司产品大数据体系。
App
…… 邮件服务 短信服务
基于PHP的存量 业务
DB Cluster
……
• 基于PHP的存量业务,核心业务,公司有多年的php的技术积累。 • 基于Java的新开发业务,要求开发周期短,尽快推向市场。 • 架构演进过程,对于存量业务,要求稳定,不碰业务代码,零侵入完成微服务化;对于新开发业务,要求高性能,细

ServiceMesh的思考及在华为云

ServiceMesh的思考及在华为云

整体架构
CSE as control plane Service center Config center
Governance Web Console
Service Mesher
API gateway
Data plane
Service
Service
Java SDK
Go SDK
Service Go SDK
Mesher Design Goal
• 侵入式与非侵入式可结合使用 • 不绑定基础设施 • 服务可视化 • 高性能,轻量 • 尽最大可能插件化各功能模块 • 透明的产品体验:整合容器平台,微服务引擎,API
网关,指标监控,日志审计等云上服务,封装为微服 务平台,让用户感知不到背后的复杂
Website: / Gitter: https://gitter.im/ServiceCombUsers/Lobby
Service Mesh的思考及在华为云 的实践
田晓亮
田晓亮 华为 架构师
9年软件行业经验,曾就职于三星,2012年进入云计算领域,对 PaaS, DevOps,APM有深入的研究和实践经验。方案支撑近 千台VM中应用部署管理监控 。华为云微服务引擎Mesher作者。
6/30/2018
AGENDA
Mesher
• 根据Service mesh理论进行实现 • 基于自研的Go语言微服务框架
开发 • 接入华为云和Istio生态 • 高性能,轻量:11mb RES,
1ms延迟
Website: / Gitter: https://gitter.im/ServiceCombUsers/Lobby
Infrastructure
Kubernetes

什么是Service Mesh

什么是Service Mesh

Service Mesh是什么?以及为什么我们需要它Service Mesh(服务网格)是一个基础设施层,让服务之间的通信更安全、快速和可靠。

如果你在构建云原生应用,那么就需要Service Mesh。

在过去的一年中,Service Mesh 已经成为云原生技术栈里的一个关键组件。

很多拥有高负载业务流量的公司都在他们的生产应用里加入了Service Mesh,如PayPal、Lyft、Ticketmaster 和Credit Karma 等。

并且在今年一月份,Linkerd 作为云原生应用程序的开源服务网格,已经成为CNCF(Cloud Native Computing Foundation)的官方项目。

但是Service Mesh 到底是什么?为什么它突然间变得如此重要?在这篇文章里,将给出Service Mesh 的定义,并追溯过去十年间Service Mesh 在应用架构中的演变过程。

解释Service Mesh 与API 网关、边缘代理(Edge Proxy)和企业服务总线之间的区别。

最后描述Service Mesh 将如何发展以及我们可以作何期待。

什么是Service Mesh?Service Mesh 是用于处理服务间通信的基础设施层。

它负责通过构成现代云原生应用程序的复杂拓扑结构来可靠地传递请求。

在实践中,Service Mesh通常被实现为与应用程序代码一起部署的轻量级网络代理的阵列,而不需要应用程序需要知道。

Service Mesh作为一个单独的层的概念与云原生应用程序的兴起息息相关。

在云原生模型里,单个应用程序可能由数百个服务组成; 每个服务可能有数千个实例; 而且这些实例中的每一个都可能处于不断变化的状态,因为它们是动态调度一个像Kubernetes一样的编排器。

服务间通信不仅异常复杂,而且也是运行时行为的基础。

管理好服务间通信对于保证端到端的性能和可靠性来说是非常重要的。

下一代微服务平台Service Mesh介绍

下一代微服务平台Service Mesh介绍

下一代微服务平台Service Mesh介绍简单回顾一下过去三年微服务的发展历程。

在过去三年当中,微服务成为我们的业界技术热点,我们看到大量的互联网公司都在做微服务架构的落地。

也有很多传统企业在做互联网技术转型,基本上还是以微服务和容器为核心。

在这个技术转型中,我们发现有一个大的趋势,伴随着微服务的大潮,Spring Cloud 微服务开发框架非常普及。

而今天讲的内容在Spring Cloud 之外,我们发现最近新一代的微服务开发技术正在悄然兴起,就是今天要给大家带来的Service Mesh/ 服务网格。

我做一个小小的现场调查,今天在座的各位,有没有之前了解过服务网格的,请举手。

(备注:调查结果,现场数百人仅有3 个人举手)既然大家都不了解,那我来给大家介绍。

首先,什么是Service Mesh?然后给大家讲一下Service Mesh 的演进历程,以及为什么选择Service Mesh 以及为什么我将它称之为下一代的微服务,这是我们今天的内容。

1什么是Service Mesh?我们首先说一下Service Mesh 这个词,这确实是一个非常非常新的名词,像刚才调查的,大部分的同学都没听过。

这个词最早使用由开发Linkerd 的Buoyant 公司提出,并在内部使用。

2016 年9 月29 日第一次公开使用这个术语。

2017 年的时候随着Linkerd 的传入,Service Mesh 进入国内技术社区的视野。

最早翻译为“服务啮合层”,这个词比较拗口。

用了几个月之后改成了服务网格。

后面我会给大家介绍为什么叫网格。

先看一下Service Mesh 的定义,这个定义是由Linkerd 的CEO William 给出来的。

Linkerd 是业界第一个Service Mesh,也是他们创造了Service Mesh 这个词汇的,所以这个定义比较官方和权威。

我们看一下中文翻译,首先服务网格是一个基础设施层,功能在于处理服务间通信,职责是负责实现请求的可靠传递。

论Service Mesh在微服务架构中的优势

论Service Mesh在微服务架构中的优势
Service Meshl'i9设 计 类似 于 现 代 路 m 器 ,;1 ̄-JTl户 、控 制 、 而 和 数 掘 平 丽 彻 底 分 离 ,并 为 控 制 半 画增 加 了 多 管 控 和 诊断 能 了J, 数 槲 、 匠fi'i9数 流 向 则足 f扣控 制 平 卜发 的 策 II塔来 决 定 的 .这 样 带 来 的优 点 0 有 ,L :
法 避 免 的趋 势 .住 系 统 片发部 料 过 程 中, 无 论 从 外 购 系 统 、社 区 支持 、人 力 捐 鹏 等 办 呵 考虑 ,都 不 得 不接 受 多 谢 ‘系 统 的 存
三 是 应 用 问 门俞 及 伞 丰¨连 ,一 个 应 用 需 要 知 道 并 连 接 l 粜 服 务 提 供 方 所 钉 应 用
云 ·IT·Technology技 术
论 Service Mesh
群 中 。 (3)大 翻.减 少 应 川 问连 接 数 : 一 主
机 的 调 川t方 所 涉及 的 连 接 可 以被 Proxy连
在 微 服 务 架 构 中的优 势
接 复 刚 .因此 心 j日问连 接 数 呵人 幅 械 少。 (4)大戢 减 少数 库 连 接 数 : 川
o Service B
n勺地 址 以及 存 活 情 况 。 产 这 些 题 的原 因 主 要 足 当 微
HI乏务 框 架 将 系 统 组 织 、服 务发 现 、路 n1等 功 能 嵌 入 rJ ¨J【1 ,从 而 导致 厂系 统 组 织 等 原 本 处 于 高 视 角 的 功 能 彼 拉 低 到 了 应 用这 一 层 ,同时 也 应 厂¨本 身在 技 术 耦 合 过 衡 。}¨ 部 分 解 决 这一 题 的 办 法
收 集 曰志 、报 义 等。 (7)运 维 控 制的 统 一 认 bt{{u调度 :F十I

Service Mesh微服务架构设计

Service Mesh微服务架构设计

7.1 Iptables 7.2监听管理 7.3连接管理 7.4网络I/O和缓冲区管理 7.5 Thrift协议处理 7.6 HTTP请求处理 7.7本章小结
8.1链路稳定性治理 8.2链路可观测性 8.3本章小结
9.1复用和解耦 9.2架构扩展机制 9.3性能设计 9.4架构设计的权衡 9.5 API和SDK设计 9.6配置管理 9.7本章小结
第1章微服务架构
第3章下一代微服 务框架Service
Mesh概要
1.1为什么需要微服务 1.2微服务架构的挑战 1.3微服务化的具体时机 1.4微服务化开展前的准备工作 1.5微服务实施 1.6本章小结
2.1微服务治理基础 2.2正向服务治理 2.3效果治理 2.4可见可观测 2.5量化分析体系 2.6线上治理 2.7线下治理 2.8服务治理演进 2.9理想的服务治理架构
10.1 Service Mesh和Serverless 10.2东西向和南北向通信的统一 10.3云原生时代的Service Mesh 10.4 Service Mesh现状和展望 10.5本章小结
作者介绍
这是《Service Mesh微服务架构设计》的读书笔记模板,暂无该书作者的介绍。
谢谢观看
Service Mesh微服务架构设计
读书笔记模板
01 思维导图
03 读书笔记 05 目录分析
目录
02 内容摘要 04 精彩摘录 06 作者介绍
思维导图
关键字分析思维导图
现状
管理
第章
小结
基础
架构
框架
架构设 计
服务

第章
处理
架构
服务
配置
ห้องสมุดไป่ตู้

服务网格Service Mesh安全实践

服务网格Service Mesh安全实践

服务网格Service Mesh安全实践服务网格(Service Mesh)安全实践随着云原生应用的快速发展,服务网格(Service Mesh)在构建和管理微服务架构中扮演着重要的角色。

作为一种用于解决微服务之间通信需求的基础设施层,服务网格能够提供诸如流量管理、服务发现、负载均衡以及故障恢复等功能。

然而,在应用服务网格时,安全性是一个至关重要的问题。

本文将介绍一些服务网格的安全实践,以确保服务之间的通信和数据传输的机密性、完整性和认证性。

1. 利用身份认证在服务网格中,为服务提供身份认证是确保通信安全的基本步骤之一。

身份认证可以通过使用密钥、证书或者其他认证机制来实现。

服务之间的通信必须进行身份验证,以确保只有经过授权的服务才能相互通信。

通过为每个服务分配唯一的身份标识,并使用相应的密钥或证书进行认证,可以有效地减少恶意访问和数据泄露的风险。

2. 实施流量加密保护服务之间的通信数据是服务网格安全实践的另一个重要方面。

通过使用TLS/SSL等加密协议,可以实现对通信数据的端到端加密。

使用流量加密技术可以防止中间人攻击和窃听等安全威胁。

服务网格可以提供自动化的流量加密功能,确保服务之间的数据传输在网络上是安全的。

3. 限制服务间的通信服务网格中的微服务可能具有不同的安全要求和访问权限。

为了控制服务之间的通信,可以实施细粒度的访问控制策略。

通过使用访问控制列表(ACL)、角色或基于策略的授权机制,可以限制特定服务只能与授权的服务进行通信。

这样可以减少潜在的攻击面和恶意行为。

4. 监控和审计服务网格中的安全实践还包括监控和审计功能的实施。

通过收集和分析服务之间的通信数据,可以及时发现潜在的安全问题和异常行为。

监控和审计可以提供有关通信行为和性能的重要信息,帮助团队及时采取相应的安全措施。

5. 漏洞管理和补丁更新及时管理服务网格中的潜在漏洞和安全威胁也是安全实践的重要组成部分。

定期进行漏洞扫描和安全评估,并及时应用安全补丁,可以减少被黑客利用的风险。

微服务架构基础之ServiceMesh

微服务架构基础之ServiceMesh

微服务架构基础之ServiceMeshServiceMesh(服务⽹格) 概念在社区⾥头⾮常⽕,有⼈提出 2018 年是 ServiceMesh 年,还有⼈提出 ServiceMesh 是下⼀代的微服务架构基础。

那么到底什么是 ServiceMesh?它的诞⽣是为了解决什么问题?企业是否适合引⼊ ServiceMesh?微服务架构的核⼼技术问题在业务规模化和研发效能提升等因素的驱动下,从单块应⽤向微服务架构的转型 (如下图所⽰),已经成为很多企业 (尤其是互联⽹企业) 数字化转型的趋势。

在微服务模式下,企业内部服务少则⼏个到⼏⼗个,多则上百个,每个服务⼀般都以集群⽅式部署,这时⾃然产⽣两个问题 (如下图所⽰):⼀、服务发现:服务的消费⽅ (Consumer) 如何发现服务的提供⽅ (Provider)?⼆、负载均衡:服务的消费⽅如何以某种负载均衡策略访问集群中的服务提供⽅实例?作为架构师,如果你理解了这两个问题,也就理解了微服务架构在技术上最核⼼问题。

三种服务发现模式服务发现和负载均衡并不是新问题,业界其实已经探索和总结出⼀些常⽤的模式,这些模式的核⼼其实是代理 (Proxy,如下图所以),以及代理在架构中所处的位置。

在服务消费⽅和服务提供⽅之间增加⼀层代理,由代理负责服务发现和负载均衡功能,消费⽅通过代理间接访问⽬标服务。

根据代理在架构上所处的位置不同,当前业界主要有三种不同的服务发现模式:模式⼀:传统集中式代理这是最简单和传统做法,在服务消费者和⽣产者之间,代理作为独⽴⼀层集中部署,由独⽴团队 (⼀般是运维或框架) 负责治理和运维。

常⽤的集中式代理有硬件负载均衡器 (如 F5),或者软件负载均衡器 (如 Nginx),F5(4 层负载)+Nginx(7 层负载) 这种软硬结合两层代理也是业内常见做法,兼顾配置的灵活性 (Nginx ⽐ F5 易于配置)。

这种⽅式通常在 DNS 域名服务器的配合下实现服务发现,服务注册 (建⽴服务域名和 IP 地址之间的映射关系) ⼀般由运维⼈员在代理上⼿⼯配置,服务消费⽅仅依赖服务域名,这个域名指向代理,由代理解析⽬标地址并做负载均衡和调⽤。

【进阶之路】服务网格ServiceMesh到底是什么

【进阶之路】服务网格ServiceMesh到底是什么

【进阶之路】服务⽹格ServiceMesh到底是什么⾸先,看到Service Mesh这个词,相信很多同学都听说过这个词,但是具体它是⼲什么的,每个⼈就各有各的理解了。

我第⼀次系统地了解Service Mesh的时候,也是通过帮同事买课返现,意外地看到这个名词,旺盛的好奇⼼迫使我点了进去。

然后,不多时,我便⼀头雾⽔的⾛了出来。

啊这,⾥⾯的弯弯绕绕⽐盥洗室之主还复杂啊!于是乎,在经过⼀段时间的学习,对Service Mesh有所了解之后,我决定写下这篇⽂章与⼤家分享我的理解。

⼀、什么是Service Mesh开门见⼭,先站在前辈的肩膀上给出定义:Service Mesh这个词的发明⼈,Buoyant的CEO William Morgan 如此解释:服务⽹格是⼀个基础设施层,⽤于处理服务间通信。

云原⽣应⽤有着复杂的服务拓扑,服务⽹格保证请求在这些拓扑中可靠地穿梭。

在实际应⽤当中,服务⽹格通常是由⼀系列轻量级的⽹络代理组成的,它们与应⽤程序部署在⼀起,但对应⽤程序透明。

Service Mesh,中⽂名叫作服务⽹格,⽤于处理服务间通信的基础设施层,通常是⼀组与应⽤⼀起部署,但对应⽤透明的轻量级⽹络代理。

简单来说就是将可以配置的代理层和服务部署在⼀起,作为微服务基础设施层接管服务间的流量,并提供通⽤的服务注册发现、负载均衡、⾝份验证、精准路由、服务鉴权等基础功能。

Service Mesh与传统基础设施层不同之处在于,它形成了⼀个分布式的互连代理⽹络,以sidecar形式部署在服务两侧,服务对于代理⽆感知,且服务间所有通信都由代理进⾏路由。

它最重要的变⾰,就是引⼊了数据⾯和控制⾯的概念,通过sidecar模式(原意是摩托车的边车,⽤到软件架构中,就是Sidecar应⽤是连接到⽗应⽤,并为其扩展或增强功能)将原本在SDK中的代码独⽴出来,⽤控制⾯代替配置中⼼的部分功能,以透明代理的形式提供安全、快速、可靠的服务间通信,同时也能实现微服务所需的基本组件功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大规模微服务架构下的Service Mesh探索之路今天给大家带来的内容叫做Service Mesh探索之路,但是在前面加了一个定语:大规模微服务架构下。

之所以加上这个词,是因为我们这个体系是在蚂蚁金服这样一个大的架构下进行的,蚂蚁金服的体量大家可以想象,所以这个探索会带有一个非常隆重的色彩:对性能/规模/高可用等方面的思考。

今年6月初,在深圳的GIAC大会,我们同事披露了这个正在开发中的Service Mesh产品,我们现在暂时命名为Sofa Mesh。

我们目前的产品都在Sofa品牌下,比如Sofa RPC,Sofa Boot等。

今天我们详细介绍Sofa Mesh这个单独产品,上次大会只是简单披露,也就是给大家介绍说我们有这样一个产品,而我今天的内容是把这个产品详细展开。

主要是三个内容:一是Sofa Mesh的技术选型,二是它的架构设计,以及在最后跟大家聊一下,蚂蚁金服在Sofa Mesh上的开源策略。

第一个是技术选型。

先上来一堆要求,刚才我们提到过的,因为是大规模,而蚂蚁金服的体量,大家可以想象到的。

实际上在性能,稳定性上,我们的衡量标准,我们考虑的基石,都是以蚂蚁金服这样的一个规模来考虑的。

在这样一个规模下,我们会涉及到一些跟其他公司不太一样的地方,比如说:我们在性能的考量上会比较重一些。

因为如果性能不高的话,可能没法支撑我们这样一个规模。

在考虑性能的时候,就有另外一层考量:架构和性能之间的这个权衡和取舍是要非常谨慎的。

性能要求不太高的情况下,架构可能的选择,和需要比较高性能的情况下,可能会有完全不一样的取舍。

稳定性就不必说了。

部署方面的要求,首先是我们会用于多种场合:主站是指我们蚂蚁金服内部,比如大家用的最多的支付宝。

金融云,可能有一部分和我们有联系的同学会有所了解,这个是我们推出的针对金融行业的云。

然后还有我们的外部客户部署上会要求这三个场合都能使用。

部署环境也会有多种,刚才我们调查到,有部分同学相对比较前沿一些,现在就已经上k8s了。

有部分同学还是停留在以前的虚拟机以及物理机这种状态,也有一部分自己上了容器,还有部分同学可能会使用不同的公有云和私有云。

这几种不同的环境,我们都是需要满足的。

第三点可能要特殊一些,需要满足各种体系。

刚才我们在调查的时候了解到,有部分同学是在做旧有系统改造,那在改造的时候就会遇到一个问题:除了Service Mesh之外,还需要跟原来的体系,比如说Sofa,或者社区主流框架如Dubbo,Spring Cloud,相互之间打通和过渡。

怎么在技术转型期间平滑的让业务做变更,是我们在整个技术选型之前提出的实际要求。

整个技术选型是在这样一个背景下进行的。

我们做技术选型的时候,有两大方向:一个选择是在开源产品上做我们先看右边的路线,起点是找一个开源产品,fork出来,做增强/扩展/定制,和内部集成。

因为开源产品还在继续往前走,所以我们会持续做版本更新,也可以从社区拿到最新版本。

相当于是从开源社区做获取,然后接下来做反馈,让我们的一些产品,我们做的东西反馈回去。

这条路线比较大的好处是从一开始就可以得到社区的支持,社区往前走的时候也跟着往前走。

如果做的比较好,愿意让自己的产品反哺社区,那么社区也可以从中受益。

当然这里面有一个小问题,就是说可能我们自己这个产品路线和开源产品路线可能会有一些分歧,可能我们领先一步,也可能他们领先一步,或者一个事情可能有两个做法。

这种情况下,如何让社区的接受我们的改动,会变成这条路线上比较头疼的一个问题。

这是两条路线上的第一条,选择以开源产品为起点。

另外一种思路全新打造或者,如果手上已经有一套类库或者框架,可以在这个基础上做包装。

这条路线有一个好处,可控性比较强。

因为整个体系是全新打造或者在原有体系上演进而来的,整套体系基本上都是自己的开发团队完全可控的。

这条路线会遇到一个问题,因为长期上看我们也是希望开源的,而开源就意味着不能将自己内部太多的定制化的东西直接做进去,所以在架构上需要考虑可扩展性,可以定制化。

因为开源出去的应该是一个标准产品,这样的产品才可以得到社区和客户的认可。

客户希望看到一个干净的东西,也需要做扩展,整个体系在设计上会有所不同。

两条路线的终点,从图上看,我们有两个目标:1. 第一个目标是内部落地前面提到的,我们需要在蚂蚁金服主站这样的一个巨大规模的场景下落地,这是蚂蚁金服自身的需求。

2. 第二个目标是技术输出因为蚂蚁金服在公司策略上有科技输出的内容,不仅仅我们自己用,我们还需要给出去。

现在我们来看这个问题:目标在这里,然后有左右两条路线,我们该怎么选择?在做的技术选型的时候,这是一个非常大的分歧点,到底是从左边走,还是从右边走?在公布结果之前,我们先来看一下有什么可选方案。

这是开源方案的选择,第一代的Service Mesh。

左边的Linkerd,这个基本上,目前看,大家都已经有点嫌弃了。

因为它没有控制平面,用Scala写的,基于JVM,资源消耗比较大。

它的可扩展性比较有限的,相对于Envoy的扩展性。

然后它里面有个dtab,有接触到的同学就会有认识:dtab的语法,非常的不人性,很难理解,使用不太方便。

另外它的功能是远远不够的,对于蚂蚁金服来说。

另外这个产品本身的发展前景已经很暗淡了,所以这个选项就被淘汰了。

Envoy是非常不错的,做了一些令我们意外的事情:安心的去做好数据平面,没有往上面做很多的东西,而是创造性的提出了XDS API。

整个设计是非常优秀的,性能和稳定性也表现得非常好,甚至看到业界有一个趋势,有一部分的公司开始把他们的nginx替换了,不再用nginx了,而是用envoy。

也就是说,现在它的稳定性和性能达到和nginx一个级别,nginx大家应该都有听说过,envoy已经是这样一个工业成熟度。

我们当时选型时是比较头疼的,因为它是c++写的,c++14。

和我们技术栈的差异会比较大,因为蚂蚁的技术栈是以Java为主,长期的话,我们可能部分转到Golang上去。

在这种情况下,C++的技术栈,会让我们比较尴尬,也不是说我们找不到会c++的同学,而是说,长期上会和我们的方向不一致,我们要在Java和Golang的技术栈之外再加一个c++,这就比较难受。

然后我们内部会有大量扩展和定制化的需求。

因为我们内部有我们自己的产品,我们自己的需求,我们的通讯方案,我们内部的追踪,监控,日志方案,所以工作量非常大。

总结说,我们觉得Envoy很好,但是我们不能简单用。

但是它在数据平面上的表现我们是非常认可的,Envoy在这点做得非常好。

开源方案里面的第二代,istio是我们当时的第一选择,重点关注对象。

Istio现在最大的问题在于它迟迟不能发布生产可用版本,大家如果对istio有了解的话,会知道istio刚刚发布了0.8版本,第一个长期支持版本,但是这个版本也不是生产可用。

不出意外的话,按照目前的进度,istio应该会在7月份发布它的1.0版本,但是从我们目前的感受上看,1.0估计可能还是不能工业级的使用。

所以需要等,而我们没法等,但是Istio的理念和方向我们非常认可。

大家看一看,我们这个技术选型有多纠结。

右边的Conduit,现在Conduit的最大限制是它只支持k8s。

而现在蚂蚁金服还没有普及k8s,我们现在还有很多系统是跑在非k8s上的。

第二是它的数据平面是Rust编写的,这个语言更加小众了,在座的同学有没有人了解Rust这门语言?或者听过。

(备注:现场大概十几个人举手)大概10%左右的同学听过。

好,Rust语言排名大概在50名左右。

这个语言本身还是蛮认可的,我还很喜欢这个语言,它的一些特性还是非常有道理,如果掌握好还是可以写出非常好的产品,但是它的入门台阶会比较高一点。

这个地方比较讨厌的事情是说,因为这个语言本身比较小众,所以基本上是没办法从社区借力的。

这里可以举个例子,大家可以看一下Conduit的committer的人数,大概是25个左右,还包括像我这种只提交了几行代码的。

Conduit从12月份开源到现在已经有半年时间,半年时间只有这么多的committer,其中真正有贡献大概9到10个人,基本上都是他自己的员工。

也就说这个产品基本上没办法从社区借力,一个产品,如果大家一起来帮忙,其实很多的细节是可以完善的,但是Conduit就卡在Rust语言上。

然后还是同样有技术栈的问题,因为这个原因,基本上Conduit我们也没法用了。

我们再看一下国内的在Service Mesh领域,其他的一些比较前卫的同学,他们的选择会是什么?首先是华为,华为自己做了一套Golang版本,名字叫做Mesher。

这是由他们之前的一套类库演进而来。

它走的路线是,先有类库和框架,然后加proxy,proxy打通了之后再慢慢的开始添加控制平面。

这是一条非常非常标准的路线,我这边给一个词叫做老成持重,因为这条路是最安全的:每一步都是基于现有的产品,很快就可以到下一个里程碑,然后每个里程碑都可以解决一些实际问题,可以直接得到一些红利,这个方案是比较比较稳妥的。

比如说第一步是把proxy做进去,有了这个切入口之后,就在第一时间获取跨语言的红利,还有技术栈下沉的好处。

然后控制平面的创新,可以在这个基础上慢慢往前做。

在对接Istio这一条上,现在华为的策略,我们现在从公开途径了解到的是:部分对接istio,也就是有一部分的API 兼容Istio。

但是细节上还不太清楚,因为它的开源还没出来,目前得到的消息是,会在7月份开源。

第二个是新浪微博的Motan Mesh,他们也是Golang的,但他不太一样,是全新实现。

他们用Go语言重新写了一把,主要原因是因为它没有golang类库,Motan是基于Java的。

刚才看到的这两个产品,他们的思路大体上是相同的,差异在哪里?就是启动的时候是用已有的类库还是重新写?这两个选择之间最大的麻烦在于编程语言,华为原来有go的类库,所以继续用golang包装一下就好了。

但是新浪的类库用的是Java,而sidecar选择的是go语言,所以只能重新做了。

我们再看腾讯,最近看到他们有类似的产品出来。

我们看看他们的资料:在数据平台上继续选择Envoy,因为它比较成熟。

腾讯的话大家比较熟悉,尤其是腾讯有非常深厚的c++背景,所以Envoy对他们来说,技术栈是非常OK 的。

而且之前内部其他领域Envoy也是在用的,所以底层非常自然的选择了Envoy。

然后控制平面上,据传是"挣扎了一下"。

这个词是我抄过的,"他们挣扎了一下",最后还是选了Istio。

然后自己做定制和扩展,然后注意到他们也解耦了k8s。

这也是其中一个关键的点:要不要绑定k8s?这里还有UCloud的一个很有意思的做法,另辟蹊径啊。

相关文档
最新文档