对于中间件还是比较好理解的,两者之间无法“沟通”,需要介入第三者,间接的使其沟通。不过在生活中有的时候还是不要介入奇奇怪怪的第三者比较好。
什么是中间件
举个很常见的例子,外交部发言人(简称发言人)要和外国的记者进行交流。外国记者需要提问,发言人需要回答他的问题。可是直接听取外国记者的问题似乎有些麻烦,那你知道是如何解决的呢?
没错,就是同声传译了。也就是说有一个翻译,那些外国人听到的都是那个翻译说的话,而不是直接听发言人说的话。
所以,上面的例子所提到的“同声传译”就叫做中间件。
在计算机领域中,中间件有以下的说法
中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。
人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件 = 平台 + 通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软件和实用软件区分开来。
中间件的概念似乎很难说清楚,确通过简单的例子就能够较好的理解。按照上面例子,好像能够对应的上的样子耶。
不过中间件具有以下的特点。
- 标准的协议
- 标准的接口
- 持久性
- 高可用,高可扩
在项目的架构和重构中,使用任何技术和架构的改变我们都需要谨慎斟酌和思考,因为任何技术的融入和变化都可能人员,技术,和成本的增加,中间件的技术一般现在一些互联网公司或者项目中使用比较多,如果你仅仅还只是一个初创公司建议还是使用单体架构,最多加个缓存中间件即可,不要盲目追求新或者所谓的高性能,而追求的背后一定是业务的驱动和项目的驱动,因为一旦追求就意味着你的学习成本,公司的人员结构以及服务器成本,维护和运维的成本都会增加,所以需要谨慎选择和考虑。
有哪些中间件技术
中间件技术分为 4 类:消息中间件、负载均很中间件、缓存中间件和高可用中间件。先记录这些,对这四类的中间件进行一个了解。
消息中间件
消息中间件分别有:
- ActiveMQ
- RabbitMQ
- Kafka
- RocketMQ
使用场景:
- 消息中间件监控数据
- 异步数据传输场景
- 削峰填谷场景
- 任务调度场景
- 海量数据同步场景
- 分布式事务场景
- 日记管理场景
- 大数据分析场景
相关的规范:
- AMQP
- MQTT
- 持久化设计
- Kafka协议消息
- 分发设计
- 高可用设计
- 可靠性设计
- 容错设计
负载均衡中间件
- Nginx
- LVS负载均衡软件
- KeepAlive
- CDN
缓存中间件
- MenCache
- Redis
数据库中间件
- Mycat
- ShardingJDBC
相关案例
- 异步数据保存
- 订单数据的消息分发
- 分布式事务
- 消息的容错
- 分布式锁
- 分布式会话
- 分库分表
谈谈分布式架构
在提起分布式架构之前,先说说单体架构。
单体架构其实就是所有的代码,静态资源文件都在一个项目中。但是这会导致一个问题,项目规模变大之后如果仅仅是一个小功能需要升级的话,那么就必须得重新去部署整个项目。
不是说单体架构垃圾,没用。因为毕竟事物具有两面性,它有它存在的意义,如果是为了盲目跟风而去选用分布式技术,那我觉得很没必要。
(图片来源于网络)
而且这样的架构所存在的问题便是:
- 耦合度太高
- 运维的成本过高
- 不易维护
- 服务器的成本高
- 升级架构的难度加大
分布式架构,就是把系统拆成若干个部分。也就是说一个请求由服务器端的多个系统来完成的。
单体架构就想建设一个小房子很快就能够搞定,如果你要建设一个鸟巢或者大型的建筑,你就必须是各个环节的协同和分布,这样目的也是项目发展都后期的时候要去部署和思考的问题。
(图片来源于网络)
但是,分布式系统架构也存在一些优点,也有他的问题
好处
- 可以合理的分配服务资源,不造成服务器资源的浪费
- 系统的独立维护和部署,耦合度降低。可插拔性。
- 系统的架构和技术栈的选择可以变的灵活(而不是单纯的选择 java)
- 弹性部署,不会造成平台因部署造成的瘫痪和停服的状态。
存在问题
- 学习成本高,技术栈过多
- 运维成本和服务器成本增高
- 人员的成本也会增高
- 项目的负载度也会上升
- 面临的错误和容错性也会成倍增加
- 占用的服务器端口和通讯的选择的成本高
- 安全性的考虑和因素逼迫可能选择 RMI / MQ 相关的服务器端通讯.
请勿发布违反中国大陆地区法律的言论,请勿人身攻击、谩骂、侮辱和煽动式的语言。