写点什么

写给程序员的中间件入门课

  • 2020-04-16
  • 本文字数:2638 字

    阅读完需:约 9 分钟

写给程序员的中间件入门课

在技术交流中,对 “聊聊你对分布式缓存一致性 hash 算法的理解” 或 “你觉得 Docker 与虚拟化之间的区别有哪些?” 这一类的问题,只要接触过,大多数程序员都会说出个一二三,而对于 “为什么要用中间件?” 或 “你如何定义中间件这东西?” 这一类的问题,许多程序员却往往反应出相对茫然的眼神,不知如何回答。


当然,这类问题本身偏抽象,不够聚焦,对程序员来说,有功夫研究这些,还不如看个源代码,掰扯个 ‘充血模式’ 与 ‘贫血模式’ 来的接地气。


之前我曾写过一篇 #我司中间件演进 # 的文章,在我看来,许多程序员在通向架构师的道路上,往往受限于思维偏应用和细节,抽象能力弱,在目的与目标还一知半解的情况下,就盲目的追求深度。


所以我搞了一次内部分享,其目的是为了加深小伙伴对中间件的定义、作用与演进的了解,希望对正确树立架构设计思维有所帮助。以下是我基于 PPT 整理出的文字版本,欢迎大家阅读。

开场白

当面对一个稳定高效的系统时,我们相当于站在一条十字路口的纵轴上,向前可以回顾它从何而来,因为任何一个系统的成长,都是用户流量爆发与业务功能迭代,然后慢慢完善的过程,而向后却无法洞察它会向何而去,因为业务基因的不确定性,使其容易遭遇由耦合关系、服务复用、异构互通所带来的各种威胁。


中国有个词叫 “第一联想”,比如说说中国最有名的建筑是什么,相信大部分人的第一联想就是“万里长城”,而谈到通过分布式实现技术之间共享资源的解决方案有哪些,相信不少技术小伙伴会想到一个关键词,那就是“中间件”。


自古道“只知其然,而不知其所以然”,大致是说,只知道是这样,却不知道为什么是这样。之所以 “中间件” 能成为联想关键词之一,其原因究竟是什么呢?

中间件的定义是什么?

类似的解读,无论在理论派还是实践派中,都是一个永无休止的评论话题,应该说还没有一个标准的定义。


我们先来看看堪称 ‘理论派鼻祖’ 的维基百科是如何定义 “中间件” 的。


中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。它是基础软件的一大类,属于可复用软件的范畴。


然后再来瞅瞅堪称‘实践派代表’的小伙伴们对“中间件”给出的定义。


一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。


虽说从笔风上看差异较大,其实无非观察角度有少许差异罢了。讲完别人的,我来对定义中的关键点进行一些提炼:


协同集成服务:解决网络分布式系统在通信服务、交换服务、语义互操作服务等系统之间的互连互通问题。


降低升级成本:在软硬件在快速换代的过程中,只要中间件对外接口的定义不变,无论如何升级更新,应用软件几乎是无感知的,最终达到‘一次接入,终生受益’的效果。


标准服务规则:提供应用软件之间的标准接口,体现可移植性、标准协议对于应用软件互连方面的重要性。

中间件都有哪些特性?

一款优秀的产品通常由不同的特性组成,下面我来分析下,中间件的特性都有哪些独到之处呢?

A. 独立性

比如一个海上岛屿旅游景区,它必须要能满足日常客流的需求供给,并且保持时刻运行的状态,为游客提供一个稳定安逸的环境,并通过港口向外来船只提供标准化连接服务,实现自助运力及承受大吞吐量,这样才能生意兴隆,蓬勃发展。


在我看来,中间件与岛屿极其相似,独立、标准、稳定是其最重要的核心属性。



图 1. 中间件独立性的三大属性

B. 复用性

记得以前在交流设计模式时,时常有句话挂在嘴边,“只有掌握如何使用可复用的面向对象模型之时,你才能说对于面向对象设计有了深入了解。”


的确,所谓复用,就是指同一事物不作修改或稍加改动就多次重复使用,如果从软件复用技术的发展来看,就是不断提升抽象级别,扩大复用范围。


而中间件复用场景的覆盖范围可分裂为以下四种:



图 2. 中间件复用场景的覆盖范围

C. 耦合性

从事互联网的任何一家企业,当规模达到一定程度后,野蛮生长所欠下的技术债务就会成为一颗颗不定时炸弹,而无论采取哪种排弹措施,“拆系统”的方案基本都会作为首选。


但无论你选择的策略是“标准化下沉”,还是“服务化独立”,“基础服务”、“数据转换”、“业务逻辑”的耦合性问题都会像三座大山一般拦在你的面前,形成铁板一块的软件,牵一发而动全身,让你难以适应变化。


在我看来,分布式中间件可以很好的解决“基础服务”、“数据转换”、“业务逻辑”所带来的耦合性问题,并为系统后期的扩展提供了灵活性。


下面我们通过两张图来简易描述下“基础服务”与“数据转换”的解耦效果:



图 3. 解除基础服务的耦合性



图 4. 解除数据转换的耦合性

中间件演进的助推剂

火箭的推进原理,是将一种液体推进剂用高压气体对燃料与氧化剂贮箱增压,然后在发动机内转化为燃气的动能,形成高速气流喷出,产生推力。


然而中间件发展的助推剂主要源于信息技术在‘群雄争霸模式’下所产生的孤立性与互连性,我将导致这种局面的原因概括为应用软件发展中的三种现象。

A. 异构现象

进入 21 世纪后,计算机的异构愈演愈烈,比如高级语言依赖于特定的编译器和操作系统,相互间还不兼容,再比如数据库的连接方式也是五花八门,你方唱罢我登场。


我认为,造成这种局面的原因应归结于技术升级和利益驱动两方面的因素,而通过中间件解决类似差异性问题,是不错的选择。

B. 互连现象

在互联网时代下,各种异构软件之间的信息互连增多,而且移植性需求也随之增多,但却因为网络协议与通信机制的不同,导致相互集成的成本变得越发让人难以承受。


我认为,造成这种局面的原因应归结于软件互连之间缺乏协议标准规则,而通过中间件解决类似差异性问题,无论成本还是效率,都是相对较高。

C. 共性现象

随着软件应用的越发增多,许多业务功能,尤其是把基础技术性质的功能放在一个系统(或服务)中,避免每次都从零开始建设,这样对质量和效率都是极大的提升。


我认为,在唯快不破的互联网竞争下,提高系统(或服务)的复用率,简化分布式系统的设计、编程和管理,中间件,可以说是极佳的解决手段。


在看完本文之前,你原来对中间件的定义是如何的?你认为中间件的局限性又有哪些呢?中间件是否将向 PaaS 化的方向发展呢?


相信经过深度思考的回答,也会让你对知识的理解更加深刻。


本文转载自头哥侃码公众号。


原文链接:https://mp.weixin.qq.com/s/frB4uWbxeMjEjG7rB2OMLw


2020-04-16 17:41883

评论

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

SpringBoot3集成ElasticSearch

Java elasticsearch 架构 springboot SpringBoot3

华为云联创营CTO领航班第八期:探索AI大模型的创新之路

新消费日报

电商订单履约-卖家发货演化史

得物技术

重构 业务架构 企业号 8 月 PK 榜 履约 业务身份

TDengine 3.1.0.0 版本成功发布,涉及五大板块功能更新!

TDengine

tdengine 时序数据库

20. 异常处理

茶桁

Python 异常

【数据库原理 | MySQL】一文打通 DDL语句 - ARTS 打卡第 一 周

计算机魔术师

更多openEuler镜像加入AWS Marketplace!

openEuler

Linux 操作系统 AWS openEuler

MySQL三个重要日志

数新网络官方账号

MySQL 数据库

提速 40%,融云基于 QUIC 深度优化通信协议

融云 RongCloud

网络 协议 融云 QUIC 通讯

文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

福大大架构师每日一题

福大大架构师每日一题

深度解读智能化编码的技术架构与实践案例

阿里云CloudImagine

云计算 编码 视频云

线上观看5万+,“芯”有灵“蜥”融合·创新!龙蜥社区走进 Intel MeetUp 回顾来了

OpenAnolis小助手

开源 芯片 intel Meetup 龙蜥社区

项目启动会的正确打开方式

老张

项目管理 项目启动

QT使用QML实现地图绘制虚线

芯动大师

商业智能工具 bi工具是什么,瓴羊Quick BI能给企业主带来哪些优势?

对不起该用户已成仙‖

锐炫无畏,助威亚运!英特尔锐炫显卡成为杭州亚运会官方指定图形处理器

E科讯

什么是业务敏捷,如何实现业务敏捷?

CODING DevOps

敏捷开发

如何落地复杂系统的架构治理?

码猿外

架构设计 软件架构治理

Presto 设计与实现(一):开篇

冰心的小屋

数据湖 presto SQL引擎

探索YesPMP平台:您的一站式软件外包解决方案

知者如C

jstat命令总结

java易二三

Java 程序员 JVM 计算机 科技

融云:以对话为场景本质,AIGC 将如何改变游戏规则

融云 RongCloud

人工智能 AI 算法 AIGC 通讯

【Python】一键查询依赖生成文件 requirements.txt

ReturnTmp

从“智能涌现”到“价值涌现”,讯飞星火又一次“登月”

脑极体

讯飞

SpringBoot单元测试实践——配置隔离篇

java易二三

Java 程序员 Spring Boot 计算机

报表分析工具免费试用:瓴羊Quick BI带你快速解析数据

夜雨微澜

融云出海:两极分化的网红大户「拉美」如何出海制胜

融云 RongCloud

互联网 泛娱乐 出海 社交娱乐 社媒

ARTS 打卡第 6 天

自由

2022年移动游戏收入920亿美元,微信小游戏投放量增长五倍

没有用户名丶

写给程序员的中间件入门课_语言 & 开发_头哥侃码_InfoQ精选文章