1.1 什么是中间件
中间件是介于应用系统和系统软件之间的一类软件,他使用系统软件所提供的基础服务,衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。
例如MySQL就可以看作是具备中间件特性的一种技术,中间件技术必须遵循一定的规范和协议,例如 TCP/IP、UDP协议等等,无规矩不成方圆,只有遵守一定的协议才能去处理事情。MySQL 就遵循了 TCP/IP 协议,在我们平常的开发中使用不同的编程语言比如 Java、Go、Python 等来操作 MySQL 的前提也是要遵循 TCP/IP协议,根据此协议实现了不通语言的连接模块来达到通信的目的。
1.2 为什么要使用中间件
具体地说,中间件屏蔽了底层操作系统的复杂性,使开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,减少了技术的负担。
1.3 主要中间件的分类
1.3.1 Hadoop
当一个大的任务由一台机器在规定的时间内不能完成时,人们就要采用分布式计算,即很多台机器联合起来共同完成任务。换句话说,就是把大任务拆分成许多个小任务,然后再把这些小任务分配给多台计算机去完成。参与计算的多台计算机组成一个分布式系统,需要运行一系列的分布式基础算法。
Hadoop 实现了分布式计算中的基础算法(如一致算法、选举算法、故障检测、快照等),同时为用户提供了编程和命令接口。程序员调用这些函数能轻松写出分布式应用程序,我们都知道,如果一切从头开始,要完成一个分布式程序的编写是异常艰难的。
以 Hadoop 为基础的生态目前已经成为大数据的标准方案,被广泛用于金融、市场、电信、交通等行业的海量数据分析,在即将到来的大数据时代,它将会发挥更大的作用。
1.3.2 Linux-HA
负载均衡本身故障怎么办?如果负载均衡器出现故障,那么整个系统将会瘫痪。微软在Windows服务器版中集成故障转移集群软件。
集成故障转移集群软件的核心思想是,实时监测故障机器并及时让好的机器接管工作,对外提供高可用性。
集成故障转移集群软件的核心思想是,实时检测故障机器并及时让好的机器接管工作,对外提供高可用性。Linux-HA 意为 Linux 高可用性项目,此项目具体包含如下几个组件。
名称 | 作用 |
Heartbeat | 负责维护集群中各节点的信息及它们之间的心跳通信。 |
Pacemaker | 集群资源管理器,是核心组件,客户端通过 Pacemaker 来配置、管理并监控整个集群。此组件的社区网站为 http://clusterlabs.org/。OpenStack 高可用性部署实例中一般都采用 Pacemaker 和 HAProxy。 |
Resource Agent | 为用于控制服务启停、监控服务状态的脚本集合,本地资源管理器(LRM)调用这些脚本来启动、停止、监控各种集群资源。 |
Cluster Glue | 包含一套函数库和工具,在集群栈中,除集群消息传输(由 Heartbeat 承担)、集群资源管理(由 Pacemaker 承担)和资源代理(由 Resource Agent 承担)功能外,其他功能都由 Cluster Glue 来完成。它包含的两个主要部分是 LRM 和 Stonith,前者是本地资源管理器,后者的任务是隔离故障机器。 |
1.3.3 静态网站服务器
我们浏览一家公司的网站时,很可能就是跟那家公司服务器上的 Apache 程序打交道,网页浏览器与 Apache 成了标准的 C/S 模式,浏览器是客户端,而 Apache 是服务端。Apache 首先把主页对应的文件 index.html 发给我们,我们看到主页内容后,点击主页上的某个链接,它又把该链接对应的文件发给我们,过程如图 3 所示。
图3 访问静态网页的过程
配合 PHP 引擎,Apache 也支持 PHP 动态网页。过程为:
1)当 Apache 收到用户要浏览的 PHP 文件后,把这个 PHP 文件发给 PHP 执行引擎。
2)PHP 执行引擎执行该 PHP 文件,产生一个临时的静态网页文件并发回给 Apache。
3)最后 Apache 把这个临时的静态网页文件发给用户。
采用 Perl、Python 和 Ruby 脚本语言编写的动态网页,其工作过程与 PHP 类似。
Apache 是最流行的开源网站服务器,在世界排名前 100 万的网站中,有 60.6% 的网站采用 Apache;在排名前 1000 的大型网站中,Apache 占到了 34.5%,而 Ngnix 占到了 34.9%,略胜于 Apache。
1.4 中间件技术常用
分布式中间件:1.ActiveMQ 2.RabbitMQ 3.Kafaka 4.RocketMQ
负载均衡中间件:1.NGINX 2.LVS负载均衡软件 3.keepalive 4.CDN
缓存中间件:1.Memcache 2.Redis
数据库中间件:1.Mycat 2.ShardingJDBC