接上篇:https://developer.aliyun.com/article/1228232?spm=a2c6h.13148508.setting.30.62774f0e61109O
4. 分布式软件解决方案
作为一个合格的分布式系统,需要根据实际需求采用相应的分布式软件解决方案。
1) 分布式锁
分布式锁是单机锁的一种扩展,主要是为了锁住分布式系统中的物理块或逻辑块,用以此保证不同服务之间的逻辑和数据的一致性。
目前,主流的分布式锁实现方式有3种:
• 基于数据库实现的分布式锁;
• 基于Redis实现的分布式锁;
• 基于Zookeeper实现的分布式锁。
2) 分布式消息
分布式消息中间件是支持在分布式系统中发送和接受消息的软件基础设施。常见的分布式消息中间件有ActiveMQ、RabbitMQ、Kafka、MetaQ等。
MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,思路起源于LinkedIn的Kafka,但并不是Kafka的一个拷贝。MetaQ具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景。
3) 数据库分片分组
针对大数据量的数据库,一般会采用“分片分组”策略:
• 分片(shard):主要解决扩展性问题,属于水平拆分。引入分片,就引入了数据路由和分区键的概念。其中,分表解决的是数据量过大的问题,分库解决的是数据库性能瓶颈的问题。
• 分组(group):主要解决可用性问题,通过主从复制的方式实现,并提供读写分离策略用以提高数据库性能。
4) 分布式计算
分布式计算(Distributed computing)是一种“把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算;在上传运算结果后,将结果统一合并得出数据结论”的科学。
当前的高性能服务器在处理海量数据时,其计算能力、内存容量等指标都远远无法达到要求。在大数据时代,工程师采用廉价的服务器组成分布式服务集群,以集群协作的方式完成海量数据的处理,从而解决单台服务器在计算与存储上的瓶颈。Hadoop、Storm以及Spark是常用的分布式计算中间件,Hadoop是对非实时数据做批量处理的中间件,Storm和Spark是对实时数据做流式处理的中间件。
除此之外,还有更多的分布式软件解决方案,这里就不再一一介绍了。
2. 分布式硬件部署方案
介绍完服务端的分布式软件解决方案,就不得不介绍一下服务端的分布式硬件部署方案。这里,只画出了服务端常见的接口服务器、MySQL数据库、Redis缓存,而忽略了其它的云存储服务、消息队列服务、日志系统服务……
1) 一般单机版部署方案
架构说明:
只有1台接口服务器、1个MySQL数据库、1个可选Redis缓存,可能都部署在同一台服务器上。
适用范围:
适用于演示环境、测试环境以及不怕宕机且日PV在5万以内的小型商业应用。
2) 中小型分布式硬件部署方案
架构说明:
通过SLB/Nginx组成一个负载均衡的接口服务器集群,MySQL数据库和Redis缓存采用了一主一备(或多备)的部署方式。
适用范围:
适用于日PV在500万以内的中小型商业应用。
3) 大型分布式硬件部署方案
架构说明:
通过SLB/Nginx组成一个负载均衡的接口服务器集群,利用分片分组策略组成一个MySQL数据库集群和Redis缓存集群。
适用范围:
适用于日PV在500万以上的大型商业应用。
接下篇:https://developer.aliyun.com/article/1228228?groupCode=java