“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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

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

评论

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

区块链符号理论:符号方案和符号系统

CECBC

浏览器存储之 localStorage 和 cookie

devpoint

Cookie LocalStorage sessionStorage 11月日更

Prometheus HTTP API 查询(六)Prometheus Server 状态和 TSDB 状态

耳东@Erdong

Prometheus PromQL HTTP API 11月日更

Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

数据库

12 K8S之应用容器及Pod资源

穿过生命散发芬芳

k8s 11月日更

C++ 动态新闻推送 第34期

很水

【Promise 源码学习】第五篇 - 实现 Promise 对异步操作的支持

Brave

源码 Promise 11月日更

【得物技术】得物直播秒开体验提升

得物技术

体验 直播 视频 优化 卡顿

投资元宇宙,如何开启混合现实开发

龙智—DevSecOps解决方案

游戏开发 元宇宙 混合现实

C++ 动态新闻推送 第35期

很水

终于有人把“元宇宙”说清楚了

CECBC

鸿蒙的绿野仙踪

脑极体

详解低延时高音质:回声消除与降噪篇

声网

回声消除 音频体验 RTE技术详解

Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索

数据库

C++ 动态新闻推送 第37期

很水

c++

互联网大厂考点(阿里+百度+腾讯+字节跳动+美团+京东)

Java高级开发

Java 程序员 架构 面试 大厂

Alibaba Druid 源码阅读(三) 数据库连接池初始化探索

数据库

Alibaba Druid 源码阅读(五)数据库连接池 连接关闭探索

数据库

区块链之共识算法系列——PoW(二)

Regan Yue

区块链 11月日更 趣讲区块链

研发提效:通过设计稿自动生成前端代码。

石云升

大前端 自动生成 11月日更 研发提效

C++ 动态新闻推送 第33期

很水

GrowingIO Design 图标库:从原理到实现

GrowingIO技术专栏

SVG 图标库 Sprites Icon Font GrowingIO Design

C++ 动态新闻推送 第36期

很水

c++

四大研究成果入选 百度安全在Black Hat Europe 2021再创历史

百度安全

应用安全 百度安全 Black Hat 漏洞利用 恶意软件

Alibaba Druid 源码阅读(一) 数据库连接池初步

数据库

无AI的五子棋Vue项目

空城机

JavaScript typescript 大前端 11月日更

sonar 使用常见问题总结

liuzhen007

11月日更

当一名科技女性,决定不再做月亮

脑极体

接口调用的链路

卢卡多多

接口 11月日更

阿里灵杰产品全面拥抱云原生,双11优惠让企业体会上云便利

阿里云大数据AI技术

大数据 AI 云原生 阿里灵杰

模块三-学生管理系统架构设计文档

迪马

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