什么是中间件?

之前找工作之后,主管打电话问将来希望做哪个方向的技术,中间件还是linux还是云计算之类的,没头绪。发现自己其实对于这些方向的具体内容倒不明确了。其他的还好说,之前也有了解到淘宝中间件团队这样的,觉得很NB,但是对于这个中间件到底是什么,似乎没有深究。元旦正好空闲,查阅资料研究研究。

定义

维基百科定义:

提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务、面向服务的体系结构等中应用比较广泛。如数据库、Apache的Tomcat,IBM公司的WebSphere,BEA公司的WebLogic[[应用服务器],东方通公司的Tong系列中间件,以及Kingdee公司的等都属于中间件。

简单归纳:
业务应用 - 中间件 - 基础资源

  • 中间件处于两者中间的的位置,封装基础资源,向上层提供更完善的功能。
  • 基础资源包括硬的资源:如CPU、存储(分布式)、网络;我个人认为也包括进程、线程、消息队列、数据库这种软性资源,中间件对这些资源做了封装处理。

作用

  • 封装
  • 整合
  • 屏蔽
  • 容错

我个人归纳为这四个主要功能。封装和整合的是基础资源,使得难用的基础资源更便于使用,而不用考虑细节。(调用顺序、分布式、配置、初始化属性等等)。屏蔽的是底层细节,同时也屏蔽底层的差异(例如,JVM这种本质意义上其实也可算作中间件,通过JVM屏蔽不同系统的差异,从而能够无差异运行Java程序)。容错,则是中间件的另一个重要作用,保证上层无论如何调用,都会得到相应的处理,而不会将错误传递到底层去或直接消失。

常见种类:

  • 分布式调用RPC:
  • 消息队列
  • 事务处理
  • 数据库组件
  • 安全组件
  • 并发组件
  • 应用容器组件
  • 日志组件:Apache Kafaka
  • 监控组件:Zookkeeper, Mesos,

阿里巴巴中间件的几个案例(本节来自阿里巴巴中间件团队博客)

阿里巴巴中间件支撑平台

  • Diamond: 软负载配置中心,用于存储静态配置,并能够提供配置变更动态推送功能,结构简单,超高可用性。在全网被使用于存储不经常发生变化的配置信息。
  • Notify, Meta: 消息中间件
  • HSF: 阿里分布式服务框架,统一整个集团rpc的调用,包括服务方式的统一调用,软负载,服务治理等,提供一套简单方便,高性能的分布式服务框架。
  • eagleeye: 淘宝分布式跟踪系统,该系统实现基于单链路的实时监控,系统依赖,性能调优,风险控制等
  • Pandora: 淘宝隔离容器,该系统主要解决大规模富二方包升级,二方包隔离,二方包监控等问题。
  • TDDL: 通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中。目前有1000+应用在使用
  • 精卫: 通用数据总线,用于将数据从一个数据节点迁移到其他一个或多个数据节点中,目前支持mysql,oracle,hbase等。目前有100+应用在使用
  • 愚公: 数据自动迁移引擎,海量数据自动运维工具,可用于对用户无影响的自动扩容和缩容,数据平滑迁移,以及异构数据源迁移,目前已经完成了214次业务迁移或扩容。
  • NewSQL: NewSQL系统,可以将SQL运行于传统MYSQL/Oracle关系数据库,也可以支持NoSQL数据库如bdb , hbase等。 可以实现其中的跨机合并和跨机交操作等复杂关系操作。
  • CSP2.0: 持续稳定性平台帮助阿里系统保障高可用性,包含线上压测、容量规划、依赖治理、限流降级、监控报警、问题定位等模块。
  • Hotspot: 性能分析平台通过对基础软件、服务端、前端加载、网络、CDN等方面的性能分析,来帮助阿里系统提升吞吐量、降低延迟时间、节约成本。
  • TProfiler: TProfiler是可以在生产环境长期使用的性能分析工具,通过在Java层面记录代码执行热点、对象创建热点等数据,帮助系统定位性能瓶颈。

参考

https://zh.wikipedia.org/wiki/%E4%B8%AD%E9%97%B4%E4%BB%B6
阿里巴巴中间件团队博客