NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

机甲模式介绍及延伸

北京顺丰同城科技 杨坤

  • 2024-03-29
    北京
  • 本文字数:3380 字

    阅读完需:约 11 分钟

机甲模式介绍及延伸

一、背景


Service Mesh、云原生等概念已经出了五六年了。从实践落地来看,还没有得到广泛的推广普及,使用范围限制在亚马逊、微软、阿里云等云厂商内部。在各大厂商的实践过程中,Bilgin Ibryam 在其博客Multi-Runtime Microservices Architecture (infoq.com)中提出了微服务的一个新的设想:Multiple Runtime。在其设想中的微服务架构中,出现了 Mecha 层的划分。故我们将其提出的 Mutiple Runtime 微服务架构模式,翻译为“机甲模式”。


本文将对机甲模式(Bilgin Ibryam 的设想:Multiple Runtime)做出介绍,并对服务架构的演变历史进行回顾。


二、服务架构的演变

2.1、单体服务


业务功能集中在一个项目中开发,进行部署,通过单一后端应用提供并集成所有的服务。


2.2、分布式系统


根据业务功能对系统做拆分,每个业务模块作为独立项目进行开发,以服务形式部署。


2.3、微服务


微服务(Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通信。


图2.3.1-微服务架构图


2.4、Service Mesh


服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。whats-a-service-mesh-and-why-do-i-need-one


图2.4.1-Service Mesh架构图


三、分布式的核心问题及机甲模式


伴随着分布式系统的落地,需要解决分布式系统中:服务治理、分布式事务、打包部署等问题。下面我们一起来过一下分布式系统中需要关注的问题:


3.1、分布式应用程序需求


图3.1.1-分布式应用核心问题


3.1.1、生命周期(Lifecycle)


功能以代码的形式交付之后,编程语言会决定在这个生态中用什么样的库、打包方式、运行方式。例如,Java 生态中依赖的 Maven 库,JVM。在整个生命周期中,打包、部署、健康检查、配置、异常恢复,都是应用在整个生命周期中的重要组成部分。


3.1.2、网络(Networking)


当下,几乎所有的分布式应用程序都需要考虑到网络问题。而且网络的范围更广,不仅仅是通信问题,还包括服务发现、超时重试机制、网络安全问题等。

3.1.3、状态(State)


状态的概念,大部分情况下是指服务的状态,服务需要表现出无状态。服务编排、工作流、时间调度(定时任务)、幂等性、故障恢复、缓存等。


3.1.4、绑定(Binding)


分布式系统中,不仅需要考虑到系统内部的调用。还需要考虑到与外部系统、组件之间的连接、协议转换、消息的传递及路由、事务。


3.2、分布式的困境与现状


在容器(Docker)、服务编排(Kubernetes)的基础之上,随着行业内在分布式中的积累,Service Mesh、云原生(Cloud-Native)在各大云厂商的。


图3.2.1-分布式应用现状


3.2.1、分布式的困境


  • 不同语言的基础功能复用性不高或者比较困难,服务的开发者绑定在特定语言上

  •  强依赖 SDK,升级工作会变得复杂

  •  数据库等客户端配置、初始化需要在服务中进行,未完全解耦,抽离出来


3.2.2、分布式架构现状


传统中间件和云原生平台对比,传统中间件提供各种 SDK 的方式提供能力,而云原生则是提供各种外围 Runtime。云原生平台在业务逻辑从平台中解耦的方面已经做的比较好了,但是在未来还会有更多的可能性,应用中的过滤器、聚合器、内容路由,流式计算中的合并、滑动窗口等逻辑部分,依然是在业务逻辑中。


3.3、机甲模式对分布式的设想


基于现状,业界大佬(Bilgin Ibryam)在自己的博客Multi-Runtime Microservices Architecture中对当前的云原生的最佳实践进行归类划分


图3.3.1-机甲模式对当前分布式产品的归类


  • Kubernetes 和容器技术对多语言应用程序的生命周期管理,奠定了基础

  • Service Mesh 利用先进的网络功能对 Kubernetes 有了进一步提升

  • Dapr 基于 Kubertetes、Knative 和 Service Mesh 的理念,在分布式系统方面有了更先进的实践


3.3.1、机甲模式架构


图3.3.2-机甲模式架构及特点


这是一种类似客户端-服务端架构的双组件模式,其中每个组件都独立运行。它与简单的客户端-服务端架构的不同点在于,这里的两个组件部署在同一台主机上,面向 localhost 通信。


  • 组件 Micrologic,包含了几乎所有分布式系统关注的最基本的业务逻辑

  • 组件 Mecha,提供了分布式系统的功能

  • Micrologic 与 Mecha 可以是一对一的部署,也可以是多个 Micrologic 共享一个 Mecha 部署

3.3.2、机甲模式特点


  •  Micrologic 组件本身不是微服务,它包含微服务的业务逻辑,并且只能跟 Mecha 组件配合一起使用,形成一个微服务

  • Micrologic 组件通过一些预定义的 API 与 Mecha 进行通信,Mecha 与外部系统进行通信

  • Mecha 组件是通用的、可配置的、可重复使用的组件

  • Mecha 组件适用于多语言微服务

  • Mecha 组件与多个代理不同,而是通过内部插件或者外部服务支持,作为一个整体提供一套能力

  • Mecha 组件通过简单文本声明方式配置,确定启用哪些功能及与 Micrologic 的绑定方式


所以说,机甲模式(Mecha)其实是对 Service Mesh 接下来发展的一种预测,未来的微服务部署模式,可以像电影中,人类穿上不同的机甲进行战斗一样。通过 Micrologic 与 Mecha 的组合,实现一个真正的微服务。


比较形象的描述,程序可以像钢铁侠的战甲一样,按需装配。如下图:


图3.3.3-钢铁侠战甲


3.4、问题解决案例及思考

3.4.1、案例一:本地开发环境遇到的服务调用问题


在一个调用关系复杂的微服务项目中,单次请求的处理,调用到微服务中多个模块,业务层面拆分粒度比较细的情况下,对于处在开发阶段的研发人员来说,则会很费力。服务发现、负载均衡没有做好,完成一次调试,本地可能需要启用多个服务。


为了专注于当前业务逻辑,总结以下经验:


  1. 未迭代的服务依赖 DEV 环境实例

  2. 借用 DEV 环境代理网关解决网络访问和请求转发问题

  3. 巧用 switch-host 配置 DNS,对不同环境的问题进行本地回放

 

3.4.2、案例二:插件式开发框架-Spring-brick


在许多 To-B 和 To-G 的项目中,为了应对特殊场景,例如:数据库需要用“指定厂商”的数据库,但是不同的厂商,SQL 的方言有所不同,所以同一个产品需要支持灵活切换数据库。如果可以将持久层以插件形式集成到项目中,实施的成本可以大大降低。


Spring-brick 框架就是一个很不错的实践产物,它可以解决如下痛点:


  1. 在 To-B 系统场景中,不同甲方会有不同的需求,在不打分支和改动系统核心代码的前提下,可以在插件中进行扩展开发特定功能,不同甲方使用不同插件,完美解决非核心系统的扩展功能开发,例如扩展中台系统的不同需求。

  2.  在 To-C 系统场景中,可以在主程序通过定义 java-interface,在插件中做不同实现,来达到动态扩展系统功能。

  3. 在开发中,由于引入了不同版本的依赖,导致系统无法运行,本框架可以完美解决在不同插件中定义不同版本的依赖,从底层进行隔离,以解决引入不同版本依赖冲突的问题。比如可以解决同一个程序同时连接 mysql-5 和 mysql-8 版本数据库。

  4. 在开发中,不同插件依赖不同框架的功能,可以按需引入。比如在插件 A 引入连接 mysql、在插件 B 引入连接 elasticsearch、在插件 C 引入连接 oracle。

  5. 在插件中,可以任意集成不同的非 web 类型的 springboot-xx-starter,然后将不同插件功能组装起来,以达到一个统一对外提供服务的完整系统,实现系统组装化、插拔化开发。

  6. 在不重启主程序的前提下,对插件进行动态的安装、卸载、启动、停止。

 

 图3.4.1-Brick框架架构图


 图3.4.2-Brick实践


3.4.3、思考

Service Mesh 的落地,离不开容器(Docker)和容器编排(Kunbernetes)支持,对团队组织能力和运维能力有很高的要求,开发负责人需要根据自身情况,选择适用自己的方案。例如,小规模软件的服务“硬拆”为微服务,反而会导致新架构与组织能力的不匹配,让架构升级得不到技术红利。


从分布式的发展来看,进化点:


  • 生命周期的自动化、高度的可运维

  • 业务逻辑与分布式系统问题之间的耦合性越来越低,业务模块中集成的 SDK 越来越薄

  •  业务层与基础能力层之间在 localhost 层面交互,甚至在同一个进程内部实现热加载、卸载

  • 基础层能力的复用性走高,平均成本走低


对于一些正在做数字化转型的传统企业,有自己的机房,但是又缺乏组织和运维能力,Service Mesh 甚至基本的微服务架构的落地都会比较困难。特别对于一些有沉重历史包袱的项目,采用插件式的开发框架,也是一种提升交付能力的方式。


技术演进的速度永远比开发者学习的速度快,但是演进的方向和思想,是开发者所必须要了解的。

 

参考资料:

Multi-Runtime Microservices Architecture (infoq.com)

什么是Service Mesh - 知乎 (zhihu.com)

The Twelve-Factor App (简体中文) (12factor.net)

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2024-03-29 17:205549

评论

发布
暂无评论
发现更多内容

阿里巴巴集团副总裁贾扬清-一个AI开发者的奇幻漂流

大咖说

微信小程序获取位置信息

程思扬

小程序 小程序云开发 开发者 开发 小程序生态

【直播预告】全国人工智能大赛赛题讲解直播来啦!1月6日晚20点,不见不散!

OpenI启智社区

人工智能大赛

使用APICloud开发app的性能提升实践

YonBuilder低代码开发平台

android APP开发 APICloud 跨端开发 app性能

惟客数据“惟客云”升级:稳操胜“券”,助力商家精准营销

科技热闻

前端培训:React Native 开发过程中遇到的坑

@零度

前端开发 ​React Native

一图解析MySQL执行查询全流程

华为云开发者联盟

MySQL 服务器 数据包 查询语句 应用层

网络安全好学吗?手把手教你学metasploit 网络安全工程师学习资料汇总

学神来啦

大数据培训:hadoop中shuffle过程面试题

@零度

大数据 hadoop Shuffle

如何解决JDBC死链接导致NIFI线程假死

编程江湖

甲方,你们愿意被乙方侮辱吗?

码农一米

云计算 云服务

基于机器学习和TFIDF的情感分类算法,详解自然语言处理

华为云开发者联盟

自然语言处理 机器学习 算法 TFIDF 情感分类

自创解法!setTimeout+Promise+Async输出顺序?简单的一匹!!

Sunshine_Lin

面试 前端 ES6 Promise Async

Java开发之SSM框架整合配置知识分享

@零度

ssm JAVA开发

带你认识传统语音识别技术

华为云开发者联盟

语音识别 语言模型 声学模型 隐马尔可夫链 WFST解码

VRAR产业峰会暨第二届华为VR开发应用大赛颁奖典礼在和平区成功举办!

华为云开发者联盟

云计算 5G AR 华为云 vr

Greenplum 内核源码分析 - 分布式事务 (五)

王凤刚(ginobiliwang)

源码分析 greenplum 分布式式事务

Kafka的灵魂伴侣LogiKM(1)之集群的接入及相关概念讲解

Kafka中文社区

「offer来了」面试中必考的15个html知识点

星期一研究室

html html5 css3 前端 html/css

安装VTK配置出现错误

Ayosh

qt

2021年度总结,欲望反光

程思扬

经验分享 #总结# 经验总结 盘点 2021

【MongoDB学习笔记】MongoDB索引那点事

恒生LIGHT云社区

数据库 mongodb 索引

HBase 优化如何操作

编程江湖

HBase

docker

Docker jenkins pipeline

绥北人民法院:用宜搭打造“线上法庭”,让群众少跑腿

一只大光圈

低代码 数字化转型 法院 钉钉宜搭

Stellantis集团将于2022CES展期间召开网络直播发布会

InfoQ_967a83c6d0d7

云计算厂商们,你们辜负了中国的用户

码农一米

云计算 云服务

百度飞桨EasyDL桌面版正式上线,没网也能训练AI!

百度大脑

人工智能

“千言”开源数据集项目全面升级:数据驱动AI技术进步

百度大脑

人工智能

Dumpling 导出表内并发优化丨TiDB 工具分享

PingCAP

React 中五种常见的使用样式

编程江湖

React

机甲模式介绍及延伸_架构_InfoQ精选文章