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

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

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

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

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

| 开场白

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

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

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

| 中间件的定义是什么?

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

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

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

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

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

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

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

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

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

| 中间件都有哪些特性?

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

A. 独立性

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

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

8b51d15301693d42bdea32e246e97a8a89cee34c

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

B. 复用性

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

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

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

e75e9ba1750bcfbe590c1a70076040c76c1295ce

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

尤其在分布式环境中,由于构件实现和运行支撑技术之间存在着较大的异构性,通过中间件达到服务与管理的复用效果的方式,更经济,更实惠。

C. 耦合性

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

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

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

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

a48d0ee6fb889389cdc50390a1e68fcbcaef7b56

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

53f88e4b8ab117cacb3d16d34db8faa4380008d2

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

| 中间件演进的助推剂

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

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

A. 异构现象

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

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

B. 互连现象

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

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

C. 共性现象

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

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

6903db49049daae6f614e0a01cd4f13c7fa9ba20

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

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


原文发布时间为:2018-10-18
本文作者: Kirito的技术分享 
本文来自云栖社区合作伙伴“ Kirito的技术分享  ”,了解相关信息可以关注“ Kirito的技术分享  ”。

相关文章
|
3月前
|
SQL 关系型数据库 中间件
postgresql从入门到精通 - 第35讲:中间件PgBouncer部署
postgresql技术大讲堂,从入门到精通 - 第35讲:中间件PgBouncer部署
157 1
|
JSON JavaScript 中间件
【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件
【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件
191 0
【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件
|
11月前
|
XML 负载均衡 关系型数据库
Mycat中间件配置初探与入门操作
Mycat中间件配置初探与入门操作
70 0
|
存储 缓存 NoSQL
分布式缓存中间件Redis入门
本文主要就介绍了以下什么是redis、redis的数据结构以及其简单使用。redis其实在日常的生产中使用到的机会还是很大的。所以学会redis也是提高自身硬实力的一种重要方式,这样才能在面试中取得好成绩。
495 0
分布式缓存中间件Redis入门
|
前端开发 中间件 API
Go Web 编程入门:中间件
中间件通常位于前端的客户端站点请求和请求的后端资源之间。中间件非常有用,尤其是当我们希望在进行 API 调用之前进行一些验证,例如请求方法、标头和 JWT 等。
|
中间件 Java
Java中间件(2)--分布式系统&中间件从入门到精通(六)
Java中间件(2)--分布式系统&中间件从入门到精通(六)
|
Web App开发 NoSQL Cloud Native
MongoDB中间件工具mgm入门介绍(一)
MongoDB 数据库确实好用,但是也要依托一定的生态环境,其中就包括我们在开发过程中经常会用到的工具集。在连接 MongoDB 时,我们不可能自己单独去开发基础的功能接口,比如添加记录、删除记录、更新记录等。我们可以使用非常好用的第三方中间件来完成这样的工作,避免重复造轮子,毕竟自己造的轮子还不一定好使。今天我们就来介绍一个非常优秀的 MongoDB 数据库中间件 —— mgm 。
559 0
|
Web App开发 NoSQL Cloud Native
MongoDB中间件工具mgm入门介绍(二)
众所周知,MongoDB 是一个通用、基于文档的分布式数据库,非常适合云原生服务的应用场景。上一篇文章已经简单介绍了 MongoDB 数据库的中间件工具 mgm,今天就来聊一聊 mgm 的接口使用方法。
221 1
|
Web App开发 NoSQL Cloud Native
MongoDB中间件工具mgm入门介绍(三)
众所周知,MongoDB 是一个通用、基于文档的分布式数据库,非常适合云原生服务的应用场景。上一篇文章已经简单介绍了 MongoDB 数据库的中间件工具 mgm 的一般使用方法,今天就来聊一聊 mgm 的高级使用方法。
457 0
|
前端开发 中间件 .NET
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门一、前言1、本教程主要内容ASP.NET Core 中间件介绍通过自定义 ASP.NET Core 中间件实现请求验签2、本教程环境信息软件/环境 说明操作系统 Windows 10SDK 2.
2033 0

相关产品

  • 云消息队列 MQ
  • 微服务引擎
  • 云消息队列 Kafka 版