1. 优享JAVA首页
  2. 默认分类

那些年,我们见过的 Java 服务端“问题”

其次,确定是否真正的分布式系统。分布式系统最大的特点,就是当系统服务能力不足时,能够通过水平扩展的方式,通过增加服务器来增加服务能力。然而,单机版系统是不支持水平扩展的,强行扩展就会引起一系列数据问题。由于单机版系统和分布式系统的研发成本差别较大,市面上的外包团队大多用单机版系统代替分布式系统交付。

那么,如何确定你的系统是真正意义上的分布式系统呢?从软件上来说,是否采用了分布式软件解决方案;从硬件上来说,是否采用了分布式硬件部署方案。

分布式软件解决方案

作为一个合格的分布式系统,需要根据实际需求采用相应的分布式软件解决方案。

分布式锁

分布式锁是单机锁的一种扩展,主要是为了锁住分布式系统中的物理块或逻辑块,用以此保证不同服务之间的逻辑和数据的一致性。

目前,主流的分布式锁实现方式有3种:

  • 基于数据库实现的分布式锁;
  • 基于Redis实现的分布式锁;
  • 基于Zookeeper实现的分布式锁。

分布式消息

分布式消息中间件是支持在分布式系统中发送和接受消息的软件基础设施。常见的分布式消息中间件有 ActiveMQ、RabbitMQ、Kafka、MetaQ 等。

MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,思路起源于 LinkedIn 的 Kafka ,但并不是 Kafka 的一个拷贝。MetaQ 具有消息存储顺序写、吞吐量大和支持本地和 XA 事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景。

数据库分片分组

针对大数据量的数据库,一般会采用”分片分组”策略:

分片(shard):主要解决扩展性问题,属于水平拆分。引入分片,就引入了数据路由和分区键的概念。其中,分表解决的是数据量过大的问题,分库解决的是数据库性能瓶颈的问题。

分组(group):主要解决可用性问题,通过主从复制的方式实现,并提供读写分离策略用以提高数据库性能。

分布式计算

分布式计算( Distributed computing )是一种”把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算;在上传运算结果后,将结果统一合并得出数据结论”的科学。

当前的高性能服务器在处理海量数据时,其计算能力、内存容量等指标都远远无法达到要求。在大数据时代,工程师采用廉价的服务器组成分布式服务集群,以集群协作的方式完成海量数据的处理,从而解决单台服务器在计算与存储上的瓶颈。 Hadoop、Storm以 及 Spark 是常用的分布式计算中间件,Hadoop 是对非实时数据做批量处理的中间件,Storm 和 Spark 是对实时数据做流式处理的中间件。

除此之外,还有更多的分布式软件解决方案,这里就不再一一介绍了。

分布式硬件部署方案

介绍完服务端的分布式软件解决方案,就不得不介绍一下服务端的分布式硬件部署方案。这里,只画出了服务端常见的接口服务器、MySQL 数据库、Redis 缓存,而忽略了其它的云存储服务、消息队列服务、日志系统服务……

一般单机版部署方案

那些年,我们见过的 Java 服务端“问题”

架构说明:

只有1台接口服务器、1 个 MySQL 数据库、1 个可选 Redis 缓存,可能都部署在同一台服务器上。

适用范围:

适用于演示环境、测试环境以及不怕宕机且日 PV 在 5 万以内的小型商业应用。

中小型分布式硬件部署方案

那些年,我们见过的 Java 服务端“问题”

架构说明:

通过 SLB/Nginx 组成一个负载均衡的接口服务器集群,MySQL 数据库和 Redis 缓存采用了一主一备(或多备)的部署方式。

适用范围:

适用于日 PV 在 500 万以内的中小型商业应用。

大型分布式硬件部署方案

那些年,我们见过的 Java 服务端“问题”

架构说明:

通过 SLB/Nginx 组成一个负载均衡的接口服务器集群,利用分片分组策略组成一个 MySQL 数据库集群和Redis缓存集群。

适用范围:

适用于日 PV 在 500 万以上的大型商业应用。

本文来自阿里巴巴中间件:常意,经授权后发布,本文观点不代表优享JAVA立场,转载请联系原作者。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

QR code