中间件分类
什么时候使用中间件基于中间件的定义我们知道中间件是连接软件与系统之间的服务,那么我们什么时候使用了中间件,在哪些地方用到了中间件了。
我们不妨假设一个http请求过程来窥视一番。当你在浏览器中输入一个网址时,它会通过 DNS 解析到目标服务注册的公网IP地址请求到达目标服务的 web 反向代理服务器 Tengine 之后,经过一定的过滤转发到目标服务A上服务A通过 RPC框架 Dubbo 请求服务B的结果做中间计算,并且从 Tair 缓存中读取计算因子,计算结果服务A接着使用 Druid 通过 TDDL 写入计算结果到 MySQL Master 节点然后返回结果异步过程中 Canal 通过模拟 Binlog 主从复制的原理,迅速将这条 Binlog 消费并下发到消息队列 RocketMQ服务C通过 RocketMQ 消费到事件之后,通过配置中心 ConfigServer 拉取到的策略进行对应策略的事件处理。
这个过程中我们使用了一系列的中间件来协同各个微服务完成整个流程,如web反向代理服务器 Tengine、RPC框架 Dubbo、缓存 Tair、连接池 Driud、数据库代理层 TDDL、Binlog 同步工具 Canal、消息队列 RocketMQ、配置中心 ConfigServer。
常用基础中间件-
路由与web服务器:处理和转发其他服务器通信数据的服务器。 如被业界广泛使用的阿里基于 Nginx 研发的 Tengine、阿里内部的集中式路由服务
VipServer- RPC框架:微服务时代的远程服务调用框架。如grpc, Thrift, 阿里的 HSF, Dubbo, SOFA-RPC-
消息中间件:支持在分布式系统之间发送和接收消息的软件。 如 Apache kafka, Apache RabbitMQ, NSQ, 阿里孵化开源的 Apache RocketMQ- 缓存服务: 分布式的高速数据存储层,一般是内存存储。如 阿里 Tair,业界的 Redis, Memcached, Ehcache- 配置中心:用来统一管理各个项目中所有配置的系统。如 阿里 Nacos、携程 Apollo、百度 Disconf-
分布式事务:事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 如 阿里 seata、腾讯 DTF-
任务调度:分布式环境下提供定时、任务编排、分布式跑批等功能的系统。如 阿里 SchedulerX、业界 xxl-job、当当 elastic-job、有赞 TSP-
数据库层 用于支持弹性扩容和分库分表的 TDDL,数据库连接池 Driud, Binlog 同步的 Canal 等。
中间件云产品
随着云时代的到来,大量公司的业务向云上迁移;为了云上客户能够便捷的使用稳定高效的中间件能力,云厂商开始将自身沉淀的基础中间件能力云化,用于支撑各个云上客户和自身业务的快速生长。依托于阿里云,阿里中间件也孵化了一大批高可用高性能高并发的中间件产品,它们都历经阿里各种复杂业务的锤炼。例如:用于帮助企业级客户轻松构建并托管分布式应用服务的 [EDAS]
。