对于中间件还是比较好理解的,两者之间无法“沟通”,需要介入第三者,间接的使其沟通。不过在生活中有的时候还是不要介入奇奇怪怪的第三者比较好。

什么是中间件

举个很常见的例子,外交部发言人(简称发言人)要和外国的记者进行交流。外国记者需要提问,发言人需要回答他的问题。可是直接听取外国记者的问题似乎有些麻烦,那你知道是如何解决的呢?

没错,就是同声传译了。也就是说有一个翻译,那些外国人听到的都是那个翻译说的话,而不是直接听发言人说的话。

所以,上面的例子所提到的“同声传译”就叫做中间件。

在计算机领域中,中间件有以下的说法

中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。

人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件 = 平台 + 通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软件和实用软件区分开来。

中间件的概念似乎很难说清楚,确通过简单的例子就能够较好的理解。按照上面例子,好像能够对应的上的样子耶。

不过中间件具有以下的特点。

  1. 标准的协议
  2. 标准的接口
  3. 持久性
  4. 高可用,高可扩

在项目的架构和重构中,使用任何技术和架构的改变我们都需要谨慎斟酌和思考,因为任何技术的融入和变化都可能人员,技术,和成本的增加,中间件的技术一般现在一些互联网公司或者项目中使用比较多,如果你仅仅还只是一个初创公司建议还是使用单体架构,最多加个缓存中间件即可,不要盲目追求新或者所谓的高性能,而追求的背后一定是业务的驱动和项目的驱动,因为一旦追求就意味着你的学习成本,公司的人员结构以及服务器成本,维护和运维的成本都会增加,所以需要谨慎选择和考虑。

有哪些中间件技术

中间件技术分为 4 类:消息中间件、负载均很中间件、缓存中间件和高可用中间件。先记录这些,对这四类的中间件进行一个了解。

消息中间件

消息中间件分别有:

  • ActiveMQ
  • RabbitMQ
  • Kafka
  • RocketMQ

使用场景:

  • 消息中间件监控数据
  • 异步数据传输场景
  • 削峰填谷场景
  • 任务调度场景
  • 海量数据同步场景
  • 分布式事务场景
  • 日记管理场景
  • 大数据分析场景

相关的规范:

  • AMQP
  • MQTT
  • 持久化设计
  • Kafka协议消息
  • 分发设计
  • 高可用设计
  • 可靠性设计
  • 容错设计

负载均衡中间件

  • Nginx
  • LVS负载均衡软件
  • KeepAlive
  • CDN

缓存中间件

  • MenCache
  • Redis

数据库中间件

  • Mycat
  • ShardingJDBC

相关案例

  • 异步数据保存
  • 订单数据的消息分发
  • 分布式事务
  • 消息的容错
  • 分布式锁
  • 分布式会话
  • 分库分表

谈谈分布式架构

在提起分布式架构之前,先说说单体架构。

单体架构其实就是所有的代码,静态资源文件都在一个项目中。但是这会导致一个问题,项目规模变大之后如果仅仅是一个小功能需要升级的话,那么就必须得重新去部署整个项目。

不是说单体架构垃圾,没用。因为毕竟事物具有两面性,它有它存在的意义,如果是为了盲目跟风而去选用分布式技术,那我觉得很没必要。

单体架构

(图片来源于网络)

而且这样的架构所存在的问题便是:

  • 耦合度太高
  • 运维的成本过高
  • 不易维护
  • 服务器的成本高
  • 升级架构的难度加大

分布式架构,就是把系统拆成若干个部分。也就是说一个请求由服务器端的多个系统来完成的。

单体架构就想建设一个小房子很快就能够搞定,如果你要建设一个鸟巢或者大型的建筑,你就必须是各个环节的协同和分布,这样目的也是项目发展都后期的时候要去部署和思考的问题。

分布式结构

(图片来源于网络)

但是,分布式系统架构也存在一些优点,也有他的问题

好处

  • 可以合理的分配服务资源,不造成服务器资源的浪费
  • 系统的独立维护和部署,耦合度降低。可插拔性。
  • 系统的架构和技术栈的选择可以变的灵活(而不是单纯的选择 java)
  • 弹性部署,不会造成平台因部署造成的瘫痪和停服的状态。

存在问题

  • 学习成本高,技术栈过多
  • 运维成本和服务器成本增高
  • 人员的成本也会增高
  • 项目的负载度也会上升
  • 面临的错误和容错性也会成倍增加
  • 占用的服务器端口和通讯的选择的成本高
  • 安全性的考虑和因素逼迫可能选择 RMI / MQ 相关的服务器端通讯.