Service Mesh 在超大规模场景下的落地挑战.docx
《Service Mesh 在超大规模场景下的落地挑战.docx》由会员分享,可在线阅读,更多相关《Service Mesh 在超大规模场景下的落地挑战.docx(16页珍藏版)》请在优知文库上搜索。
1、随着微服务软件架构在互联网企业的广泛实践,新一代微服务软件架构技术悄然兴起,ServiceMesh便是其中之一。根据1.inkerdCEOWillianMorgan对SerViCeMeSh的定义,SerViCeMeSh是一层处理服务间通信的基础设施。云原生应用有着复杂的服务拓扑,ServiceMesh保证请求可以在这些拓扑中安全且可靠地穿梭,对整个服务网络进行观测和高效查错,以及通过灵活的流量治理能力为新功能上线提供高效的验证手段。在实际应用当中,SerViCeMeSh通常是由一系列轻量级的网络代理(又被称为Sidecar)组成的,它们部署在应用进程的边上且对应用进程完全无感。国内Servic
2、eMesh早期实践基本分为先建设数据层后建设控制层和同时建设两类,从后续发展看,随着对服务运营能力要求的提高,控制层会越来越重要。在实际落地方面,众多企业都在积极探索ServiceMesh在大规模场景下的应用。分布式应用架构在阿里巴巴的现状阿里巴巴围绕电商业务构建了庞大的微服务软件架构应用生态,包括了天猫、淘宝、菜鸟、高德等。其次,整个微服务体系是通过DubboRPC连接在一起,MetaQ用于服务之间的异步解耦。目前阿里巴巴主要的技术栈还是Java,围绕Java构建了相当健全的微服务治理能力,其他技术栈的微服务治理能力相对弱很多。在服务可见性这块,阿里巴巴是完全没有隔离的。DUbbORPC仍是
3、接口级服务发现,1个应用如果提供10个接口,那么就会有10个服务是可以被发现的,如果这个应用有n台机器,那么10个服务就会产生10*n个服务端点元信息,这种重复数据导致规模问题被放大。另外一点值得跟大家分享的是,目前阿里巴巴也正经历着应用的SDK升级之痛,SDK中包含了中间件和应用层的一些公共模块,由中间件统一以PandOra包的形式交付给业务方使用。在应用数非常庞大的情形下,SDK升级是一份相当繁重的工作,甚至涉及到集团层面的大协同。为此,我们希望通过SerViCeMeSh先将中间件的那些能力下沉到SideCar,将这块升级工作从PandOra中剥离出来,借助ServiceMesh的流量无损
4、热升级能力让业务对中间件升级完全无感。ServiceMesh面临的挑战ServiceMesh面临的第一个挑战就是新技术如何平滑演进。ServiceMesh在大规模场景下的落地在业界的案例还相当少,根源在于该技术本身还没有完全成熟。在技术走向成熟的持续迭代过程中,如何平滑演进是一个很有挑战的任务。挑战在于需要以终为始地规范技术架构的演进,一步一步地向终态架构演进。第二个挑战是发展的过程中如何协调好技术和业务的平衡。技术团队希望快速迭代向前发展兑现价值,而业务团队每年有自己的业务目标,如何协调好两者的发展关系是个不小的挑战。代表新技术的团队其发展思路通常会更激进,而业务团队会因为“稳定压倒一切”而
5、偏保守,短期内调和好这一矛盾或许需要自顶向下的决策力量,否则业务挑战年年有而可能挤压技术的发展空间,导致技术发展缓慢而无法更好地服务于业务的发展。第三个挑战是技术向前演进时如何处置历史包袱。每一次技术的演进都意味着对原有技术体系的升级,这就不可避免地需要处置过往累积下来的技术债。新技术发展的难点往往不在于其“新”,而在于包袱太重而导致新技术演进困难,很可能因为演进太慢而严重影响了新技术的发展。第四个挑战就是克服超大规模所带来的问题。前面讲到的Dubbo因为是接口级服务发现,使得服务发现的数据规模非常大,给控制平面的端点数据推送能力带去了巨大挑战。最后一个挑战是SideCar的规模化运维。在超大
6、规模场景下,大量的应用机器意味着有等量的SideCar需要运维,如何在部署、灰度、升级以及保障安全生产是一个很大的挑战。新技术在架构上平滑演进是关键起步三位一体规模化落地新技术的不成熟很可能在相当长的一段时间内是常态,演进的关键在于如何实现新技术架构的平滑演进,避免出现推倒重来这种劳命伤财之事。为此,基于这一考量,我们一共经历了“起步”、“三位一体”和“规模化落地”三大阶段,而每一个阶段采用了不同的软件架构或部署方案。在起步阶段,ISti。控制平面的PilOt组件放在一个单独的容器中,同时当作一个独立的进程和Sidecar部署在一个Pod里。采用这样的方式,使得对开源的Envoy和Pilot可
7、以做最小的改动而加速落地,也方便我们基于开源的版本做能力增强和反哺。这一方案的缺点在于,每个Pod中都包含了一个PilOt进程,增大了应用所在机器上的资源消耗,因在服务规模并不大的情形下资源消耗相对小而可以忽视这一缺点。在三位一体阶段,Pilot进程从业务Pod中抽离了出来变成了一个独立的集群,在Sidecar和Pilot之间仍是xDS协议。这一架构虽节省了应用所在机器的资源消耗,但必须正视规模化落地的问题。xDS中有一个叫EDS(EndpointDiscoveryService)的协议,Pilot通过EDS向SideCar推送服务发现所需使用到的机器IP(又被称之为Endpoint)信息,在
8、阿里的大规模场景下因为有大量的端点需要通过Pilot推送给Sidecar,导致Sidecar的CPU消耗相当大,让人担心业务进程因为SideCar对资源的争抢而受影响。这规模化问题并非在起步阶段的技术方案中不存在,只不过因为那时落地应用的服务规模小而没有成为瓶颈。为了解决规模化落地的问题,我们设计出了规模化落地的技术架构。在这一架构中,虽然还是Sidecar对接Pilot集群,但是Pilot集群只提供xDS中的1.DS/CDS/RDS这些标准的服务,而EDS采用Sidecar直接对接服务注册中心解决。值得强调,虽然SideCar直接对服务接注册中心,但是它仍然沿用了EnVoy里面对EDS所抽象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Service Mesh 在超大规模场景下的落地挑战 超大规模 场景 落地 挑战