CN110377614A - 一种分布式环境下的订单处理锁系统 - Google Patents
一种分布式环境下的订单处理锁系统 Download PDFInfo
- Publication number
- CN110377614A CN110377614A CN201910666210.7A CN201910666210A CN110377614A CN 110377614 A CN110377614 A CN 110377614A CN 201910666210 A CN201910666210 A CN 201910666210A CN 110377614 A CN110377614 A CN 110377614A
- Authority
- CN
- China
- Prior art keywords
- order
- orders
- node
- lock
- lock system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012545 processing Methods 0.000 title claims abstract description 26
- 230000004913 activation Effects 0.000 claims description 3
- 239000002699 waste material Substances 0.000 abstract description 4
- 238000000034 method Methods 0.000 description 6
- 230000007717 exclusion Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000002955 isolation Methods 0.000 description 2
- 230000009102 absorption Effects 0.000 description 1
- 238000010521 absorption reaction Methods 0.000 description 1
- 239000002253 acid Substances 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000009833 condensation Methods 0.000 description 1
- 230000005494 condensation Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012958 reprocessing Methods 0.000 description 1
- 239000004575 stone Substances 0.000 description 1
- 230000007474 system interaction Effects 0.000 description 1
- 238000009834 vaporization Methods 0.000 description 1
- 230000008016 vaporization Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种分布式环境下的订单处理锁系统。每个节点,会开一个事务,要么全成功,要么全失败,当多个节点处理一批订单时,有可能多个节点会获取到相同的订单,因此,可能导致a节点处理的订单全成功,b节点处理的订单全失败,需要重新处理,浪费资源的情况,本发明能避免该种情况的发生。
Description
技术领域
本发明涉及一种分布式环境下的订单处理锁系统。
背景技术
现如今,电子商务快速发展,在大促期间,大量订单会瞬间到达系统,使得系统有大量订单要处理。为了提高客户体验,也顺应各平台的时效策略,这些订单,必须在规定的时间内尽快处理完成。
但,服务器单机性能很容易达到上限。因此,考虑使用分布式环境来处理订单。
为了提高性能,所以我们会批量(比如100单)处理订单。
在分布式环境下,各个服务节点,先从数据库中,获取100个未处理的订单,然后处理订单,再标记为已处理。该批订单,在1个事务中。因此,要么全部成功,要么全部失败。
当2个节点同时获取到某个订单,且同时处理,会造成重复处理订单的问题。为了避免订单被重复处理,我们会有乐观锁机制,去处理该问题,以保证,1个订单,只能被1个服务节点处理。这样的话,就会导致,a服务节点,获取了100个订单。但因为b服务节点,获取到这100单中的其中1单,且处理成功。进而导致,a服务节点,100个订单都处理失败。实际上,剩余的99个订单,都可以成功。
上述,因为1个订单,导致剩余99个订单一起处理失败,又要重新处理,非常浪费资源。
发明内容
针对现有技术中存在的问题,本发明的目的在于提供一种分布式环境下的订单处理锁系统的技术方案。
所述的一种分布式环境下的订单处理锁系统,其特征在于:
设a节点:取一台服务器,安装操作系统,部署环境;
设b节点:取一台服务器,安装操作系统,部署环境;
数据库:取一台服务器,安装操作系统,部署数据库;
锁系统:取一台服务器,安装操作系统,部署redis实例;
上锁操作:redis是一个key/value类型的数据库,key不能重复;通过命令setorderId random_value NX EX 300来给订单上锁,其中,orderId指订单号,random_value是一个随机数,NX代表只有orderId不存在的时候才设置,EX 300代表300秒后,orderId会过期,即锁会自动释放;执行上述命令,返回成功,代表给订单orderId上了一把锁,这把锁的有效期是300秒;当在300秒有效期内,再次执行该命令时,会返回失败,代表上锁失败;
启动系统,订单持续导入到数据库中,在系统中运转起来;
a节点,从数据库中,获取100个未处理订单,包含订单a;将这100个订单,发送到锁系统中,进行过滤,如果未在锁系统中存在,则在锁系统注册,进行订单锁定;如果已经在锁系统中存在,则过滤,返回锁系统中新注册锁定的100个订单,包含订单a;
b节点,从数据库中,获取100个未处理订单,包含订单a;将这100个订单,发送到锁系统中,进行过滤,如果未在锁系统中存在,则在锁系统注册,进行订单锁定;如果已经在锁系统中存在,则过滤,返回锁系统中新注册锁定的99个订单,订单a因为已被a节点注册锁定,所以b节点访问时,被过滤;
之后,处理订单正常业务逻辑;
a节点,100个订单,处理成功;
b节点,99个订单,处理成功;
a节点,释放100个订单的锁;
b节点,释放99个订单的锁。
所述的一种分布式环境下的订单处理锁系统,其特征在于所述锁系统是基于redis实现的,redis是一个key/value存储系统,key是string类型,value支持数据类型包括string字符串,list链表,set集合,zset有序集合。
本发明设计了一种分布式环境下订单处理的锁系统,每个节点,会开一个事务,要么全成功,要么全失败,当多个节点处理一批订单时,有可能多个节点会获取到相同的订单,因此,可能导致a节点处理的订单全成功,b节点处理的订单全失败,需要重新处理,浪费资源的情况,本发明能避免该种情况的发生。
附图说明
图1为本发明锁系统设计架构图。
具体实施方式
下面结合说明书附图对本发明作进一步说明:
一种分布式环境下的订单处理锁系统,
设a节点:取一台服务器,安装操作系统,部署环境;
设b节点:取一台服务器,安装操作系统,部署环境;
数据库:取一台服务器,安装操作系统,部署数据库;
锁系统:取一台服务器,安装操作系统,部署redis实例;
上锁操作:redis是一个key/value类型的数据库,key不能重复;通过命令setorderId random_value NX EX 300来给订单上锁,其中,orderId指订单号,random_value是一个随机数,NX代表只有orderId不存在的时候才设置,EX 300代表300秒后,orderId会过期,即锁会自动释放;执行上述命令,返回成功,代表给订单orderId上了一把锁,这把锁的有效期是300秒;当在300秒有效期内,再次执行该命令时,会返回失败,代表上锁失败;
启动系统,订单持续导入到数据库中,在系统中运转起来;
a节点,从数据库中,获取100个未处理订单,包含订单a;将这100个订单,发送到锁系统中,进行过滤,如果未在锁系统中存在,则在锁系统注册,进行订单锁定;如果已经在锁系统中存在,则过滤,返回锁系统中新注册锁定的100个订单,包含订单a;
b节点,从数据库中,获取100个未处理订单,包含订单a;将这100个订单,发送到锁系统中,进行过滤,如果未在锁系统中存在,则在锁系统注册,进行订单锁定;如果已经在锁系统中存在,则过滤,返回锁系统中新注册锁定的99个订单,订单a因为已被a节点注册锁定,所以b节点访问时,被过滤;
之后,处理订单正常业务逻辑;
a节点,100个订单,处理成功;
b节点,99个订单,处理成功;
a节点,释放100个订单的锁;
b节点,释放99个订单的锁。
本发明的锁系统是基于redis实现的,redis是一个key/value存储系统,key是string类型,value支持数据类型包括string字符串、list链表、set集合、zset有序集合等。
本发明设计了一种分布式环境下订单处理的锁系统,每个节点,会开一个事务,要么全成功,要么全失败,当多个节点处理一批订单时,有可能多个节点会获取到相同的订单,因此,可能导致a节点处理的订单全成功,b节点处理的订单全失败,需要重新处理,浪费资源的情况,本发明能避免该种情况的发生。
名词解释:
操作系统(英语:Operating System,缩写:OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
分布式系统(简称:分布式):分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。
数据库,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
数据库事务(简称:事务):是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
数据库事务拥有以下四个特性,习惯上被称之为ACID特性:
原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行;
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态;一致状态的含义是数据库中的数据应满足完整性约束;
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行;
持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
乐观并发控制:在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。
乐观并发控制多数用于数据争用不大、冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据的成本,因此可以获得比其他并发控制方法更高的吞吐量。
互斥锁(英语:Mutual exclusion,缩写Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行访问的代码,并非一种机制或是算法。一个程序、进程、线程可以拥有多个临界区域,但是并不一定会应用互斥锁。
悲观并发控制:在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作读某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。
悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。
Redis:Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。在2013年5月之前,其开发由VMware赞助。根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。
Claims (2)
1.一种分布式环境下的订单处理锁系统,其特征在于:
设a节点:取一台服务器,安装操作系统,部署环境;
设b节点:取一台服务器,安装操作系统,部署环境;
数据库:取一台服务器,安装操作系统,部署数据库;
锁系统:取一台服务器,安装操作系统,部署redis实例;
上锁操作:redis是一个key/value类型的数据库,key不能重复;通过命令 setorderId random_value NX EX 300 来给订单上锁,其中,orderId指订单号,random_value是一个随机数,NX代表只有orderId不存在的时候才设置,EX 300代表300秒后,orderId会过期,即锁会自动释放;执行上述命令,返回成功,代表给订单orderId上了一把锁,这把锁的有效期是300秒;当在300秒有效期内,再次执行该命令时,会返回失败,代表上锁失败;
启动系统,订单持续导入到数据库中,在系统中运转起来;
a节点,从数据库中,获取100个未处理订单,包含订单a;将这100个订单,发送到锁系统中,进行过滤,如果未在锁系统中存在,则在锁系统注册,进行订单锁定;如果已经在锁系统中存在,则过滤,返回锁系统中新注册锁定的100个订单,包含订单a;
b节点,从数据库中,获取100个未处理订单,包含订单a;将这100个订单,发送到锁系统中,进行过滤,如果未在锁系统中存在,则在锁系统注册,进行订单锁定;如果已经在锁系统中存在,则过滤,返回锁系统中新注册锁定的99个订单,订单a因为已被a节点注册锁定,所以b节点访问时,被过滤;
之后,处理订单正常业务逻辑;
a节点,100个订单,处理成功;
b节点,99个订单,处理成功;
a节点,释放100个订单的锁;
b节点,释放99个订单的锁。
2. 根据权利要求1所述的一种分布式环境下的订单处理锁系统,其特征在于所述锁系统是基于redis实现的,redis是一个key/value存储系统,key是string类型,value支持数据类型包括 string字符串,list链表,set集合,zset有序集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910666210.7A CN110377614B (zh) | 2019-07-23 | 2019-07-23 | 一种分布式环境下的订单处理锁系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910666210.7A CN110377614B (zh) | 2019-07-23 | 2019-07-23 | 一种分布式环境下的订单处理锁系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110377614A true CN110377614A (zh) | 2019-10-25 |
CN110377614B CN110377614B (zh) | 2023-12-01 |
Family
ID=68255098
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910666210.7A Active CN110377614B (zh) | 2019-07-23 | 2019-07-23 | 一种分布式环境下的订单处理锁系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110377614B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112766956A (zh) * | 2021-03-19 | 2021-05-07 | 中国工商银行股份有限公司 | 基于分布式订单系统的订单支付控重方法及装置 |
CN113778697A (zh) * | 2021-09-14 | 2021-12-10 | 福建天晴数码有限公司 | 一种实现redis分布锁高可用的方法及其系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023521A1 (en) * | 2008-07-28 | 2010-01-28 | International Business Machines Corporation | System and method for managing locks across distributed computing nodes |
CN105630913A (zh) * | 2015-12-22 | 2016-06-01 | 福建星海通信科技有限公司 | 一种基于Redis管道通信的消息传递方法及系统 |
CN106060060A (zh) * | 2016-06-22 | 2016-10-26 | 努比亚技术有限公司 | 客户端获取锁的方法及系统 |
-
2019
- 2019-07-23 CN CN201910666210.7A patent/CN110377614B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023521A1 (en) * | 2008-07-28 | 2010-01-28 | International Business Machines Corporation | System and method for managing locks across distributed computing nodes |
CN105630913A (zh) * | 2015-12-22 | 2016-06-01 | 福建星海通信科技有限公司 | 一种基于Redis管道通信的消息传递方法及系统 |
CN106060060A (zh) * | 2016-06-22 | 2016-10-26 | 努比亚技术有限公司 | 客户端获取锁的方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112766956A (zh) * | 2021-03-19 | 2021-05-07 | 中国工商银行股份有限公司 | 基于分布式订单系统的订单支付控重方法及装置 |
CN113778697A (zh) * | 2021-09-14 | 2021-12-10 | 福建天晴数码有限公司 | 一种实现redis分布锁高可用的方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110377614B (zh) | 2023-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107977376B (zh) | 分布式数据库系统及事务处理方法 | |
Mu et al. | Consolidating concurrency control and consensus for commits under conflicts | |
Thomson et al. | The case for determinism in database systems | |
US8209699B2 (en) | System and method for subunit operations in a database | |
US11132350B2 (en) | Replicable differential store data structure | |
EP4029191B1 (en) | Supporting blockchain collections in a database | |
Yan et al. | Carousel: Low-latency transaction processing for globally-distributed data | |
Wu et al. | Transaction healing: Scaling optimistic concurrency control on multicores | |
Palmieri et al. | Aggro: Boosting stm replication via aggressively optimistic transaction processing | |
Yabandeh et al. | A critique of snapshot isolation | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
US11599514B1 (en) | Transactional version sets | |
JP2009505281A (ja) | データベースフラグメントのクローン化および管理 | |
Turcu et al. | Automated data partitioning for highly scalable and strongly consistent transactions | |
Sowell et al. | Minuet: A scalable distributed multiversion B-tree | |
EP3519987B1 (en) | Intents and locks with intent | |
JPH0728679A (ja) | チェックイン・チェックアウトモデルにおける施錠方式 | |
US20230342353A1 (en) | Targeted sweep method for key-value data storage | |
Thomson et al. | Fast distributed transactions and strongly consistent replication for OLTP database systems | |
Horikawa | Latch-free data structures for DBMS: design, implementation, and evaluation | |
US11886422B1 (en) | Transactional protocol for snapshot isolation without synchronized clocks | |
EP4189914B1 (en) | Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems | |
Aguilera et al. | The Many Faces of Consistency. | |
González-Aparicio et al. | A new model for testing CRUD operations in a NoSQL database | |
CN110377614A (zh) | 一种分布式环境下的订单处理锁系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20231102 Address after: Room 426, Building 6, No. 600, 21st Street, Baiyang Street, Qiantang New District, Hangzhou City, Zhejiang Province, 310018 Applicant after: Hangzhou Youpin Technology Co.,Ltd. Address before: Room 217, Building 6, No. 600, 21st Street, Baiyang Street, Economic and Technological Development Zone, Hangzhou City, Zhejiang Province, 310018 Applicant before: Hangzhou Meiba Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |