什么是中间件?我们为什么要学习中间件?

由于一些历史原因,企业中可能运行着不同的业务系统,这些系统可能基于不同的OS、不同的DB、甚至不同的语言。如何将这些不同的系统构建成一个整体,形成真正的跨平台、分布式应用,中间件就是解决之道,它用自己的复杂换取了构建企业应用的简单

假设由于历史原因,企业中有这样三个模块,它们分别由不同的语言构建,如果我们想要将它们构成一个整体,首先跨模块的交互是必然的

协议

我们知道,通讯是要遵循协议的,这个协议可以是TCP/IP、UDP,也可以是在它们的基础之上构建的一些协议。比如:AMQP、MQTT、OpenMessage等等

高可用

假设我们的消息刚刚传递到中间件,结果中间件所在的服务器宕机了,导致消息丢失。这个消息如果是一笔金额很大的订单,那就是很严重的事故了,所以,我们必须要保证中间件的高可用

持久化是个不错的选择,消息传到中间件之后,将消息进行持久化,即便服务器宕机,也不会丢失数据。除此之外,我们也可以通过集群的方式来保证高可用。当然,集群必然会带来数据的一致性问题,这个以后再说

理论听的很多了,那到底什么是中间件呢

其实中间件是很常见的,有些可能我们已经用过了,只是我们尚未意识到它就是中间件。比如:MySQL、Redis、Nginx、MQ等等,它们都是中间件

比如MySQL,我们通过Java应用往数据库中存储数据时,我们并不需要直接和硬盘进行交互,而是由MySQL代劳,我们将数据基于某种通信协议(比如TCP/IP)传给MySQL,再由MySQL完成数据的持久化工作

为什么要使用中间件

中间件屏蔽了OS底层的复杂性,使得开发人员面对简单而统一的开发环境,减少程序设计的复杂性,将注意力更多的集中在业务上,不必再为程序在不同系统上的移植而重复工作,减少开发工作量

中间件的特点

  • 遵循通信协议
  • 高可用
  • 高性能

什么情况下在项目中应用中间件技术

无论是项目的架构和重构中,对于任何技术和架构的改变我们都需要谨慎斟酌和思考。因为任何技术或架构的变化都可能导致人力成本、技术负债、学习成本的增加。中间件技术一般在互联网公司应用较多,如果我们仅仅只是一个初创公司,最多加个缓存中间件即可,不要盲目的追求所谓的新技术或者所谓的高性能,试想你的系统根本就没多少流量进来,为什么要上大规模的kafka集群呢?

追求新技术的背后,必然是业务的驱动和项目的驱动,因为一旦决定追求新技术,就意味着开发人员的学习成本、公司的人力成本、服务器成本、技术负债、运维成本等增加,一定要谨慎