0717-7821348
关于我们

山东快乐扑克3彩乐乐

您现在的位置: 首页 > 关于我们 > 山东快乐扑克3彩乐乐
山东扑克3遗漏彩乐乐-“单机版”使用富丽回身,拥抱“分布式”
2019-12-14 04:27:09

跟着互联网的开展,核算机体系早就从单机独立作业过渡到多机器协同作业。核算机以集群的方法存在,依照散布式理论构建出巨大杂乱的使用服务,早已家喻户晓并得到广泛地使用。可是,依然有不少创业公司的软件体系停留在"单机版"。

单机版体系抢单事例

这儿,用并发性比较高的抢单功能为例阐明:

// 抢取订单函数
public synchronized void grabOrder(Long orderId, Long userId) {
// 获取订单信息
OrderDO order = orderDAO.get(orderId);
if (Objects.isNull(order)) {
throw new BizRuntimeException(String.format("订单(%s)不存在", orderId));
}
// 查看订单状况
if (!Objects.equals(order.getStatus, OrderStatus山东扑克3遗漏彩乐乐-“单机版”使用富丽回身,拥抱“分布式”.WAITING_TO_GRAB.getValue())) {
throw new BizRuntimeException(String.format("订单(%s)已被抢", orderId));
}
// 设置订单被抢
orderDAO.setGrabed(orderId, userId);
}

以上代码,在一台服务器上运转没有任何问题。进入函数grabOrder(抢取订单)时,使用synchronized关键字把整个函数确认,要么进入函数前订单未被人抢取然后抢取订单成功,要么进入函数前订单已被抢取导致抢取订单失利,肯定不会呈现进入函数前订单未被抢取山东扑克3遗漏彩乐乐-“单机版”使用富丽回身,拥抱“分布式”而进入函数后订单又被抢取的状况。

可是,假如上面的代码在两台服务器上一起运转,因为Java的synchronized关键字只在一个虚拟机内收效,所以就会导致两个人可以一起抢取一个订单,但会以最终一个写入数据库的数据为准。所以,大多数的单机版体系,是无法作为散布式体系运转的。

散布式体系抢单事例

添加散布式锁,进行代码优化:

// 抢取订单函数
public void grabOrder(Long orderId, Long userId) {
Long lockId = orderDistributedLock.lock(orderId);
try {
grabOrderWithoutLock(orderId, userId);
} finally {
orderDistributedLock.unlock(orderId, lockId);
}
}
// 不带锁的抢取订单函数
private void grabOrderWithoutLock(Long orderId, Long userId) {
// 获取订单信息
OrderDO order = orderDAO.get(orderId);
if (Objects.isNull(order)) {
throw new BizRuntimeException(String.format("订单(%s)不存在", orderId));
}
// 查看订单状况
if (!Objects.equals(order.getStatus, OrderStatus.WAITING_TO_GRAB.getValue())) {
throw new BizRuntimeException(String.format("订单(%s)已被抢", orderId));
}
// 设置订单被抢
orderDAO.setGrabed(orderId, userId);
}

优化后的代码,在调用函数grabOrderWithoutLock(不带锁的抢取订单)前后,使用散布式锁orderDistributedLock(订单散布式锁)进行加锁和开释锁,跟单机版的synchronized关键字加锁作用根本相同。

散布式体系的优缺陷

散布式体系(Distributed System)是支撑散布式处理的软件体系,是由通讯网络互联的多处理机体系结构上执行任务的体系,包含散布式操作体系、散布式程序设计语言及其编译体系、散布式文件体系散布式数据库体系等。

散布式体系的长处:

  1. 可靠性、高容错性:一台服务器的溃散,不会影响其它服务器,其它服务器仍能供给服务。
  2. 可扩展性:假如体系服务才能缺乏,可以水平扩展更多服务器。
  3. 灵活性:可以很简单的装置、施行、扩容和晋级体系。
  4. 功能高:具有多台服务器的核算才能,比单台服务器处理速度更快。
  5. 性价比高:散布式体系对服务器硬件要求很低,可以选用廉价服务器建立散布式集群,然后得到更好的性价比。

散布式体系的缺陷:

  1. 排查难度高:因为体系散布在多台服务器上,毛病排查和问题确诊难度较高。
  2. 软件支撑少:散布式体系处理计划的软件支撑较少。
  3. 建造本钱高:需求多台服务器建立散布式体系。

确认是否真实的散布式体系。散布式体系最大的特色,便是当体系服务才能缺乏时,可以经过水平扩展的方法,经过添加服务器来添加服务才能。但是,单机版体系是不支撑水平扩展的,强行扩展就会引起一系列数据问题。因为单机版体系和散布式体系的研制本钱不同较大,市面上的外包团队大多用单机版体系替代散布式体系交给。那么,怎么确认你的体系是真实意义上的散布式体系呢?从软件上来说,是否选用了散布式软件处理计划;从硬件上来说,是否选用了散布式硬件布置计划

散布式软件处理计划

作为一个合格的散布式体系,需求依据实践需求选用相应的散布式软件处理计划。

1.散布式锁

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

现在,干流的散布式锁完结方法有3种:

  1. 根据数据库完结的散布式锁;
  2. 根据Redis完结的散布式锁;
  3. 根据Zookeeper完结的散布式锁。

2.散布式音讯

散布式音讯中间件是支撑在散布式体系中发送和承受音讯的软件基础设施。常见的散布式音讯中间件有ActiveMQ、RabbitMQ、Kafka、MetaQ等。

MetaQ(全称Metamorphosis)是一个高功能、高可用、可扩展的散布式音讯中间件,思路起源于LinkedIn的Kafka,但并不是Kafka的一个复制。MetaQ具有音讯存储次序写、吞吐量大和支撑本地和XA业务等特性,适用于大吞吐量、次序音讯、播送和日志数据传输等场景。

3.数据库分片分组

针对大数据量的数据库,一般会选用"分片分组"战略:山东扑克3遗漏彩乐乐-“单机版”使用富丽回身,拥抱“分布式”

  • 分片(shard):首要处理扩展性问题,归于水平拆分。引进分片山东扑克3遗漏彩乐乐-“单机版”使用富丽回身,拥抱“分布式”,就引进了数据路由和分区键的概念。其间,分表处理的是数据量过大的问题,分库处理的是数据库功能瓶颈的问题。
  • 分组(group):首要处理可用性问题,经过主从复制的方法完结,并供给读写别离战略用以进步数据库功能。

4.散布式核算

散布式核算( Distributed computing )是一种"把需求进行很多核算的工程数据分割成小块,由多台核算机别离核算;关智斌在上传运算成果后,将成果一致兼并得出数据定论"的科学。

当时的高功能服务器在处理海量数据时,其核算才能、内存容量等目标都远远无法到达要求。在大数据年代,工程师选用廉价的服务器组成散布式服务集群,以集群协作的方法完结海量数据的处理,然后处理单台服务器在核算与存储上的瓶颈。Hadoop、Storm以及Spark是常用的散布式核算中间件,Hadoop是对非实时数据做批量处理的中间件,Storm和Spark是对实时数据做流式处理的中间件。

散布式硬件布置计划

介绍完服务端的散布式软件处理计划,就不得不介绍一下服务端的散布式硬件布置计划。这儿,只画出了服务端常见的接口服务器、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://segmentfault.com/a/1190000020622496