分布式技术框架
消息队列
在SOA或微服务架构中,普遍会采用HTTP协议作为通信协议。可是HTTP协议的请求是同步的,即遵循“请求-响应”模式,在服务器未返回结果之前,HTTP客户端会一直等待,直到获取结果或超时,这在一定程度上限制了程序的处理能力。
消息中间件正好弥补了上述HTTP协议的不同,它支持异步通信,从而极大地提升通信效率。
如果HTTP协议能满足业务需要,则首先应该选择使用HTTP协议作为服务间的通信协议。如果HTTP不能满足,则选用消息中间件产品作为补充,往往可以获得以下收益:
- 异步通信;
- 解耦,实现生产者和消费者的解耦;
- 数据缓冲,当有服务接收大量消息时,会先缓存到消息队列中,从而避免了由于消息处理能力不足而导致的程序崩溃;
- 多种消息推送模型,消息中间件一般都会支持Publish/Subscribe和P2P等消息模型,以满足各种使用场景的需要;
- 强顺序,消息在消息中间件中按照可靠的FIFO和严格的通信顺序来进行消费;
- 持久化消息,消息中间件能够安全地保存消息,直到消费者收到消息;
- 支持分布式,消息中间件往往支持分布式部署,具有高可用,高并发的能力;
目前成熟产品:
- Apache ActiveMQ
- RabbitMQ
- Apache RocketMQ
- Apache Kafka
分布式计算
所谓分布式计算,就是将需要大量计算的项目数据分割成小块,由多台计算机分别计算,在上传运算结果后统一合并得出数据结论。设计分布式计算平台需要面临非常多的挑战,比如分布式平台是如何实现并行计算的?是如何分发数据的?又是如何进行错误处理的?这些问题综合在一起,使得原本很简洁的计算,因为需要使用大量的复杂代码来处理这些问题,而变得让人难以处理。
虽然分布式计算可以使整体的计算能力实现水平扩展,但并非所有的计算任务都需要分布式计算平台来解决。一般情况下当数据在TB级别,那么最好采用分布式计算。同时,使用分布式计算需要一定的学习成本,而且一般企业也不大可能拥有用于分布式计算的大规模的机器数量。
目前成熟产品:
- MapReduce
- Apache Hadoop
- Spark
- Mesos
分布式存储
分布式存储主要处理传统关系型数据库不能应对大规模的数据集问题。NoSQL泛指非关系型数据库,旨在应对大规模数据集合的多重数据种类所带来的挑战,尤其是大数据应用的挑战。
目前成熟产品:
- Bigtable
- Apache HBase
- Apache Cassandra
- Memcached
- Redis
- MongoDB
分布式监控
- 分布式系统中,应用往往有多个实例和节点;
- 人工手动操作命令来监控不同节点上的实例越来越苦难;
分布式监控正是解决上述两个问题。一般使用场景为:
- 系统部署节点数超过一定数量,手工操作耗时耗力且易出错;
目前成熟产品:
- Nagios
- Zabbix
- Consul
- Zookeeper