写点什么

机甲模式介绍及延伸

北京顺丰同城科技 杨坤

  • 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)

2024-03-29 17:207987

评论

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

LeaRun.Java表单快速开发工具

力软低代码开发平台

CVPR2022 |小红书首创多图交互建模挑战热门研究课题,大幅提升行人重识别性能

小红书技术REDtech

Transformer CVPR2022 行人重识别

养老金融政策频出,市场有多大?

易观分析

养老消费

三星堆重大发现!信息量巨大

Dylan

三星堆 四川省 文物

2022中国信通院安全运营发展论坛成功召开

中国IDC圈

安全

Vue-8-计算属性和侦听属性

Python研究所

6月月更

安势信息加入OpenSSF (开源安全基金会), 共建软件供应链安全

安势信息

Linux DevOps SCA工具 opensource

UI自动化测试框架搭建-优化企业微信通知

伤心的辣条

Python 程序员 软件测试 自动化测试 UI自动化

国家先进计算产业创新(宜昌)中心正式落地 由中科曙光、升哲科技联合运营

SENSORO

人工智能 物联网 新基建 智慧城市

元气部落仿站开发,元气部落盲盒系统APP开发

WDL22119

盲盒小程序开发 盲盒源码 盲盒H5开发 盲盒APP系统开发 元气部落仿站开发

GPU渲染全解读:GPU渲染器的发展与对比

Finovy Cloud

渲染器 GPU服务器

国际SaaS企业有哪些机遇和挑战

ToB行业头条

OSPO如何帮助保护你的软件供应链

安势信息

开源 DevOps 开源社区 SCA opensource

信用卡业务愈卷愈烈,银行机构如何突围?

易观分析

信用卡业务

Git 不要只会 pull 和 push,学学这 5 条提高效率的命令

CRMEB

InnoDB体系架构

龙空白白

MySQL InnoDB

如何高效的进行接口测试?【工具篇】

Liam

测试 Postman 接口测试 API接口管理 接口测试工具

3 个技巧来破解你可以立即使用的 Flutter 生产力!

坚果

6月月更

想学好软件测试,这些软件必不可少

伤心的辣条

Python 程序员 程序人生 软件测试 自动化测试

打造软件供应链安全平台,「安势信息」完成数千万元天使轮融资

安势信息

从功能测试进阶自动化测试,熬夜7天整理出这一份3000字超全学习指南【附网盘资源】

伤心的辣条

Python 程序员 软件测试 IT 自动化测试

直播回顾 | 传统应用进行容器化改造,如何既快又稳?

BoCloud博云

云原生 容器云 应用

测试员该知道的软件测试流程,你都知道吗?

伤心的辣条

Python 程序员 软件测试 IT 自动化测试

给你一个项目,你将如何开展性能测试工作?

伤心的辣条

Python 程序员 IT 自动化测试 接口测试

35人首次上榜、行者皆勇者——创业邦3040新青年创投峰会圆满落幕

创业邦

云上360行丨深耕快消品行业数字化转型,纷享销客与华为云合力同行

华为云开发者联盟

人工智能 modelarts 快消品 纷享销客

博云《应用上容器指南》首发!详解应用容器化改造

BoCloud博云

容器 云原生 容器云 应用

俄航天局局长:外星生命或正在研究人类文明

Dylan

俄罗斯 外星人 航天局

Executor

急需上岸的小谢

6月月更

转行软件测试跳槽到新公司,工作如何快速上手?

伤心的辣条

Python 程序员 软件测试 自动化测试 接口测试

前端工程化:保姆级教学 Jenkins 部署前端项目

伤心的辣条

Python 程序员 jenkins 自动化测试 接口测试

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