写点什么

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

  • 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:41916

评论

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

数据安全没保证?GaussDB(for Redis)为你保驾护航

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

从大数据到AI,华为云存储加速企业大模型快速应用

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

首个!AI开发者创作激励计划开启,有成长、有收入

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

柏睿数据:以自主可控的智能算力引擎服务数据产业创新发展

新消费日报

衡阳等保测评中心地址在哪里?电话多少?

行云管家

等保 等级保护 等保测评 衡阳

新华网专访 | 用友网络:中国企业“出海”要有全球视野 需构建数智化全球人才供应链

用友BIP

人力资源 中企出海

秒验丨 REST API:手机号码置换接口

MobTech袤博科技

大数据 前端 后端

大咖论道,大模型时代软件研发效率革命

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 7 月 PK 榜

克服 ClickHouse 运维难题:ByteHouse 水平扩容功能上线

字节跳动数据平台

云原生 数仓 bytehouse 企业号 7 月 PK 榜

万字详解 | Java 函数式编程

不在线第一只蜗牛

函数式编程 java 编程

用友iuap:最懂企业级技术,更懂企业级业务

用友BIP

国产替代

24款好用的电脑画图软件推荐,总有一款适合你!

彭宏豪95

效率工具 软件 流程图 画图软件 绘图工具

HiveSQL 迁移 FlinkSQL 在快手的实践

Apache Flink

大数据 flink 实时计算

Linux和Windows系统下安装深度学习框架所需支持:Anaconda、Paddlepaddle、Paddlenlp、pytorch,含GPU、CPU版本详细安装过程

汀丶人工智能

人工智能 paddle Anaconda 深度学习框架 PyTorch

数据孤岛、系统林立,这些顽疾瓴羊想要全搞定

ToB行业头条

华为云MetaStudio全新升级,盘古数字人大模型助力数字人自由

华为云开发者联盟

人工智能 华为云 数字人 华为云开发者联盟 企业号 7 月 PK 榜

我和敏捷有点缘

ShineScrum

敏捷教练

深入解读:多人语音聊天室源码开发搭建社交分享功能

山东布谷科技

软件开发 语音聊天室 源码搭建 语音聊天源码 语音聊天

基于知识图谱的电影知识问答系统:训练TF-IDF 向量算法和朴素贝叶斯分类器、在 Neo4j 中查询

汀丶人工智能

人工智能 自然语言处理 深度学习 知识图谱 智能问答

C++ 测试框架 GoogleTest 初学者入门篇

不在线第一只蜗牛

编程 测试框架 C++

消费品行业全面预算管理领先实践

用友BIP

全面预算

成就数智企业,用友助力中国企业迈向高质量发展

用友BIP

国产替代

以开放安全底座赋能全球开发者,华为云构筑云原生安全防护体系

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 7 月 PK 榜

如何评价MyBatis-Flex框架

酱紫的小白兔

ScaleBit 与 NFTScan 达成安全生态合作伙伴关系

NFT Research

安全 NFT\

DPO 直接偏好优化:跳过复杂的对抗学习,语言模型本来就会奖励算法

Zilliz

AIGC LLM RLHF

领域知识图谱的医生推荐系统:利用BERT+CRF+BiLSTM的医疗实体识别,建立医学知识图谱,建立知识问答系统

汀丶人工智能

人工智能 自然语言处理 深度学习 知识图谱 智能问答

统一技术底座助力医疗机构数智化转型

用友BIP

数智底座 技术底座

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