关于中间件整理 -

2020/4/6 (99 条消息) 中间件未来会消失吗? - 知乎 https://www.zhihu.com/question/22854238/answer/935319055 1/3

对于楼上提到了中间件的概念和优越性,我们还可以更大范围的谈一谈,然后说说为什么中间件不会消 失。 概念:广义和狭义 中间件是一种独立的系统软件或服务程序,它是对象技术和分布式计算发展的产物。

借助中间件软件在 不同的技术之间共享资源,实现应用间的互联与操作。按照IDC 的分类方法,中间件可分为六类。

分别 是数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等。 这个概念和定义,其实已经过时了,

现在一般认为有两种定义:

广义的说,所有不直接给客户直接提供业务价值的软件,都是中间件。举例说明,nginx和WebSphere App Server、MySQL都是中间件,而一个营销系统或者CRM系统、小额信贷系统,则不是中间件。

狭义上说,处于基础设施层的软件与业务系统软件中间这一层的一些软件或者库、框架,我们叫中间件, 不一定是独立的程序。这样就把上面提到的类似DB和Web Server之类的软件划分到基础设施层了。

狭义 的中间件比如缓存中间件、数据库中间件、消息中间件、服务化中间件、交易中间件、调度中间件、集成 中间件等等。现在互联网上说的一般是这几个。

优越性:技术中台 世界著名的咨询机构Standish Group在一份研究报告中归纳了中间件的十大优越性: ·

缩短应用的开发周期 ·

节约应用的开发成本 ·

减少系统初期的建设成本 ·

降低应用开发的失败率 ·

保护已有的投资 ·

简化应用集成 ·

减少维护费用 ·

提高应用的开发质量 ·

保证技术进步的连续性 ·

增强应用的生命力 具体地说,

中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减 少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工 作,从而大大减少了技术上的负担。带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了 系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。 其次,中间件作为新层次的基础 软件,其重要作用是将不同时期、在不同操作系统上开发的应用软件集成起来,彼此像一个天衣无缝的 整体协调工作。中间件的这一作用,使得在技术不断发展之后,我们之前在应用软件上的劳动成果仍然 有所用,可以节约了大量的人力、财力投入。 中间件一方面是很多人在很多具体场景里的最佳实践总结,另一方面也是软件发展的必然趋势。 大家不断的在重复建设业务系统,那么这些业务系统里一些可以复用的通用性技术,奔着复用的原则,一 定会逐步的沉淀成为一些共享的、可靠的支撑技术,这就是中间件。当然,按现在的时髦叫法,你也可以 叫 技术中台。 举个例子,现在云原生是大趋势,把业务系统都上云环境是个比较典型的场景。

那么假如公有云的硬件和 IaaS基础设施只能提供99.9%的可用性,而我们放到云上的交易系统or金融服务,要求是4-5个9的可用 性,怎么办? 有个老话说:计算机领域的任何问题都可以通过一个中间层来解决。

一个自然而然的办法就是在我们的业务系统和基础设施层之间,用一些高可用性的中间件来做一个中间 层。这个中间层实现分片、复制、快速的failover和recovery等机制,从而给上层的业务系统提供一个稳健 的基座,不管云服务层的硬盘坏了几块,还是局部网络延迟上升5倍,我们的业务系统都能做到无感知。 为什么用中间件?站在巨人肩膀上 大家可以看到,中间件是为了解决某一类复杂技术问题的,比如消息中间件Kafka、RocketMQ,解决了大 量处理请求的排队和缓冲、并且做到高性能的情况下不丢失消息,这类通用的复杂技术常见。TDDL、 ShardingSphere、MyCat等解决分库分表、读写分离,进而提升整个系统对于更大规模的数据读写的问 题。 为什么我们要用中间件,而不是自己用数据库里的一张表去模拟MQ,直接硬编码分库分表呢? 因为,你在重复走很多人多年来走过的路,重新去摸很多人已经摸过的石头。完全没必要。 为什么推荐大家了解、学习和使用成熟的开源中间件?

1、每类中间件,都是为了解决某一类通用性的问题产生的,那么我们了解的中间件种类越多,越能知道许 多方向上的通用问题解决办法,无关是直接用,还是参考其思路举一反三,都对我们解决问题有益。如果 了解太少,则很多现场的解决办法就直接不在我们的视野内,让我们一直刻舟求剑、在不少最优解的范围 之外找办法。

2、大规模使用过的中间件,已经有人踩过无数坑了,常见的问题都已经消灭掉了,如果我们自己重头造轮 子,这些学费还是要交,周期长、稳定性差,性价比太低。就算自己造轮子,也可以在使用开源的过程 中,以开源的为基础,站在巨人的肩膀上去创新。

3、最近几年的经验告诉我,中间件大多已经解决了高可用问题,分片、多副本、故障转移和失败恢复等 等。如果我们把系统的某些环节替换成中间件,则意味着我们也把一些重要的稳定性风险转移到了中间件 上,这样一来,我们就能提升整个系统的稳定性。 中间件发展趋势:井喷、细分、商业化 井喷式发展,拿MQ来举例: 随着分布式技术的发展,MQ技术产品也出现井喷。目前除了各类常用的MQ,比如Apache的 ActiveMQ,Kafka,Pulsar,RocketMQ(既是Apache,也是阿里的,头条也是基于RocketMQ), 以及RabbitMQ(美团、汽车之家大量使用)外,各大厂商都自研了自己的产品,腾讯的CMQ和 TubeMQ,京东的JMQ,去哪儿的QMQ,滴滴的DDMQ(基于RocketMQ),其中不少都开源了。 拿微服务来举例: 微服务框架现在真是百花齐放,各个平台,各个公司,各个语言,都有一堆的框架和工具,涌现出来, 除了dubbo,spring cloud,还有华为的service comb,蚂蚁金服的 SOFAStack ,oracle的 Helidon,redhat的quarkus,scala的Lagom,grails的Micronaut,python的nameko,go的 micro,多语言的Vert.X,腾讯的tars,百度的brpc,微博的motan。。。。。。 还是那句老话说:计算机领域的任何问题都可以通过一个中间层来解决。 

一方面,不少的中间件或者中间件提供的特性能力,会不断下沉到更基础的层面,比如我们可以看到很多 数据库中间件,融入到了分布式数据库。

另一方面,随着业务场景的细分和互联网分布式技术的发展,更 多的中间件在各自的场景里涌现。

就像是,最开始只有程序员这个职业,后来有了后端开发,前端开发, 大数据工程师,算法工程师,区块链工程师,,,

越来越多的细分领域出现自己独特的角色。中间件也 是,一个大趋势是不同的在细分领域出现,解决一系列新的问题,然后一部分下沉到更底层的基础设施, 然后这个过程循环往复,长期发展。

猜你喜欢

转载自www.cnblogs.com/zeenzhou/p/12640241.html