分布式缓存系统客户端关键技术研究
分布式缓存设计

分布式缓存设计缓存是提高系统性能的关键组件之一,而分布式缓存则在分布式系统的环境下实现了数据的共享和高效访问。
本文将介绍分布式缓存的设计原理和实践,以及一些常见的分布式缓存方案。
一、缓存的作用缓存是将计算结果、数据库查询结果等常用数据存储在高速读写的存储介质中,以提高系统的性能和响应速度。
在分布式系统中,缓存的作用尤为重要,可以减轻后端数据库的压力,提高系统的可扩展性和可用性。
二、分布式缓存的设计原则1. 数据一致性:分布式缓存需要保证数据的一致性,即缓存中的数据和后端存储中的数据保持同步。
常见的解决方案包括使用缓存更新策略、缓存伪装技术等。
2. 高可用性:分布式缓存需要保证在各种异常情况下都能够正常工作,如节点故障、网络分区等。
常见的解决方案包括使用数据复制、故障检测与恢复机制等。
3. 高性能:分布式缓存需要具备快速读写的能力,以满足系统对高并发读写的需求。
常见的解决方案包括使用缓存预热、数据分片、分布式存储等。
4. 可扩展性:分布式缓存需要支持系统的水平扩展,以应对日益增长的数据访问需求。
常见的解决方案包括使用分布式哈希、一致性哈希等。
三、常见的分布式缓存方案1. Redis:Redis 是一个开源的高性能分布式缓存系统,支持多种数据结构和丰富的功能,如持久化、发布订阅、事务等。
它通过将数据存储在内存中,提供了非常快速的读写性能。
2. Memcached:Memcached 是一个免费的、高性能的分布式内存对象缓存系统,适用于访问模式相对简单的场景。
它通过缓存的方式,将数据存储在内存中,从而提供快速的数据访问速度。
3. Hazelcast:Hazelcast 是一个开源的分布式缓存和计算平台,支持多种数据结构和分布式计算模型。
它可以无缝地集成到 Java 应用中,提供快速的数据访问和计算能力。
四、分布式缓存的设计实践1. 数据划分:根据业务需求和数据访问特点,将数据划分到不同的缓存节点中。
可以采用按数据分片方式,将数据均匀地分布在不同的节点上,提高并发读写能力。
软件开发中的缓存技术

软件开发中的缓存技术现代软件开发中,性能和用户体验一直是非常关键的话题。
为了解决这个问题,缓存技术被广泛应用于各种软件系统中。
缓存技术可以分为多种类型,包括本地缓存、分布式缓存和反向代理缓存等。
在本文中,我们将探讨软件开发中如何正确地应用缓存技术以提高系统性能。
1. 本地缓存在软件开发中,常常需要将数据存储到本地缓存中以提高访问速度。
本地缓存通常是指将数据存储在内存中,以便于快速访问。
本地缓存适用于一些数据量较小而且访问频次较高的情况。
例如,浏览器可以将最近访问过的网页缓存到本地,下次访问同样的网页时就可以直接读取本地缓存,而不必重新下载。
在使用本地缓存时,需要注意以下几点:1.1 缓存失效机制本地缓存通常会设置缓存失效时间,以防止缓存中的数据过时。
在设置缓存失效时间时,需要考虑到数据的更新频率和重要性。
例如,在开发一个消息系统时,需要用到消息的发送时间,在缓存中存储消息的发送时间可能并不合适,因为这些数据可能会被频繁更新,而且对系统的性能影响不大。
因此,在这种情况下,可以将缓存失效时间设置得比较短,以适应数据更新频率。
1.2 缓存容量控制由于本地缓存是存储在内存中的,因此需要考虑缓存容量的控制。
如果缓存容量过小,那么可能会导致缓存命中率过低,从而无法达到预期的性能提升效果。
如果缓存容量过大,那么可能会导致系统的内存占用过大,从而影响稳定性。
因此,在使用本地缓存时,需要根据实际情况进行合理的容量控制。
2. 分布式缓存分布式缓存通常指将缓存数据分布在多台服务器上。
分布式缓存可以解决单台服务器无法存储大量数据的问题,同时还可以提高系统的可扩展性和容错性。
在使用分布式缓存时,需要注意以下几点:2.1 一致性问题由于分布式系统中存在多个缓存节点,因此在数据的读取和写入过程中,需要保证数据的一致性。
简单地说,就是多个节点之间需要保证缓存数据的同步。
如果数据不同步,可能会导致数据的不一致性,从而影响系统的正确性。
RDMA技术在大规模分布式存储系统中的应用研究

RDMA技术在大规模分布式存储系统中的应用研究随着互联网技术的飞速发展,数据量的增长呈现出爆炸式的增长趋势,因此,大规模分布式存储系统应运而生。
在这样的背景下,RDMA(Remote Direct Memory Access)技术的应用逐渐成为研究的热点。
本文将对RDMA技术在大规模分布式存储系统中的应用进行研究和探讨。
一、RDMA技术概述RDMA是一种实现高效数据传输的技术,它的核心思想是让计算机之间的数据直接在内存中进行传输,而不需要通过CPU进行中转。
该技术的实现基于网络适配器,通过网络适配器在内存之间传递数据。
RDMA技术主要有两种不同的实现方式:一种是基于InfiniBand网络的RDMA,另一种是基于RoCE(RDMA over Converged Ethernet)网络的RDMA。
二、RDMA技术在大规模分布式存储系统中的应用在大规模分布式存储系统中,RDMA技术有着广泛的应用。
一方面,RDMA 技术可以提高数据传输效率,从而加快分布式存储系统的工作效率;另一方面,RDMA技术可以提高系统的可靠性和稳定性,从而保障数据的安全性和可用性。
1. RDMA技术在高性能存储环境中的应用在高性能存储环境中,RDMA技术可以提高数据访问速度和吞吐量,从而提升系统性能。
传统的存储系统中,数据必须通过CPU和内存进行缓存,然后才能进行数据传输,而RDMA技术则可以直接在内存之间进行数据传输,从而避免了数据拷贝和CPU参与的过程,提高了存储性能。
2. RDMA技术在分布式文件系统中的应用在分布式文件系统中,RDMA技术可以有效地提高数据传输效率和存储性能。
RDMA技术可以避免数据拷贝和CPU参与的过程,从而提高文件系统的性能。
此外,RDMA技术还可以提高文件系统的可靠性和可用性,从而保障数据的安全性和可持续性。
3. RDMA技术在云存储中的应用在云存储中,RDMA技术可以提高数据传输速度和吞吐量,从而提高云存储系统的性能。
分布式系统原理

分布式系统原理分布式系统,顾名思义,是指由多台计算机组成的系统,通过网络连接并协同工作,以实现共同的目标。
在如今的网络时代,分布式系统已经广泛应用于各个领域,如云计算、大数据处理以及物联网等。
本文将介绍分布式系统的原理,包括其基本概念、架构模式以及关键技术等方面的内容。
一、分布式系统的基本概念分布式系统是由多个自治的计算机节点组成,这些节点通过网络进行通信和协作,共同完成任务。
分布式系统的核心特点就是分布性和并行性。
其中,分布性指的是各个计算机节点分布在不同的物理位置上,通过网络连接实现通信和数据交换;并行性指的是节点间的并行计算,以提高系统的性能和扩展性。
二、分布式系统的架构模式1. 客户端-服务器模式(Client-Server)客户端-服务器模式是最常见的分布式系统架构模式之一。
在这种模式下,系统由一个或多个服务器节点提供服务,而客户端节点向服务器请求服务。
服务器负责处理客户端的请求,并返回结果。
这种模式的优点是结构简单、易于管理和维护,适用于大部分任务。
2. 对等网络模式(Peer-to-Peer)对等网络模式是一种去中心化的分布式系统架构模式。
在这种模式下,每个节点既是客户端,又是服务器,节点之间互为平等,可以相互通信和协作。
对等网络模式的优点是灵活性高、可扩展性好,适用于大规模的分布式计算和资源共享。
3. 消息传递模式(Message Passing)消息传递模式是一种基于消息通信的分布式系统架构模式。
在这种模式下,节点之间通过发送和接收消息进行通信和协作。
消息传递模式的优点是解耦性好、可靠性高,适用于异步通信和分布式事务处理。
三、分布式系统的关键技术1. 一致性协议在分布式系统中,一致性是一个重要的问题。
一致性协议是为了解决节点之间的数据一致性问题而设计的协议。
常见的一致性协议有基于主从复制的一致性协议和基于多数派决策的一致性协议等。
2. 分布式存储分布式存储是为了解决数据存储的可靠性和扩展性问题而设计的技术。
面向存储服务的分布式缓存系统研究

地访 问。频繁的数据访 问会带来信息传输 上延迟 的增加和性
能下降 ,使用合适 的缓存技术能够有效地解决该 问题l。 J J
中,得到 D C ce的架构 ,如 图 2所示。 — ah
_ _ 『
糯
罂
理 / r、 、
蒺
圈 1 成员企业构架
应用
服 器 I 服务 务 I 器
作者简介 : 王 侃( 8 一) 男, 士研究生, 1 7 , 硕 9 主研方向:网络存储 ,
W AN G Kan, H EN C Zhikui -
(ot r ol e Daa iesyo T cn lg , l n16 2 ) S f eC lg , l nUnvri f eh oo y Dai 16 0 wa e i t a
[ sr c]I eds iue n i n n,h ihf q ec f e t d t acs l d e l ei ytm efr n e Ai n ths Abtat nt ir tdevr mettehg r un yo moe aa ces e st ad ci sse p r mac . miga i h tb o e r a o n n o t
g v n Di ia i i e . g t lsmulto e u t de n ta e t a Ca h y t m a h t n t e r s o s i e o y t m n n r a e t e t r ug p to yse ai n r s l mo sr t h tD— c e s s e c n s or h e p n e t fs s e a d i c e s h h o h u f s t m s e m mo ee e tv l , r f ci e y whih i p o e e o a c iti u e n r n e t c mp r dwiht ed srb td c c e s t m rCa h . c r v sp r r n ei t d srb t d e vi m n , o a e t h i ti u e a h yse Da t c e m f m n he o
分布式系统技术的研究和应用

分布式系统技术的研究和应用随着信息技术的快速发展,我们身处的数字化世界正在经历前所未有的变革。
在这个背景下,分布式系统技术逐渐成为了一种重要的技术手段,被广泛应用于各种应用场景中。
本文将对分布式系统技术的研究和应用进行探讨。
一、分布式系统技术的定义分布式系统技术是指将一个大型系统分割成为多个独立的部分,并且这些部分可以在不同的计算机上运行,相互协作以完成整个系统的功能。
分布式系统的核心在于多个实体通过网络互相协作,将各自处理的数据、计算结果传输给其他实体,而整个系统的动态性、可靠性、可扩展性、安全性等也得以保障。
二、分布式系统技术的研究方向在分布式系统技术的研究方向中,主要包括分布式计算、分布式存储、分布式通信等多个领域。
1、分布式计算分布式计算是指在多个计算机上分布式地执行计算任务,以达到提高计算效率和处理能力的目的。
分布式计算的重点在于任务的分解和调度,如何将任务分解为多个子任务,并且如何解决任务之间的依赖关系和结果的整合。
分布式计算相关的技术包括任务分解、任务调度、数据管理、结果收集等。
2、分布式存储分布式存储是指将大量数据分散保存在多个节点上,并且利用网络协议将这些节点组织成一个分布式存储系统,以达到数据备份、高可用、负载均衡等目的。
分布式存储的关键在于数据的分区、分片和备份策略,以及数据的读写一致性问题等。
分布式存储相关的技术包括数据分区、数据备份、数据一致性控制、容错处理等。
3、分布式通信分布式通信是指将多个计算机通过网络协议连接在一起,以形成一个分布式系统,并实现各个节点之间的消息传递、数据交换等功能。
分布式通信的关键在于网络传输协议、消息格式、消息路由等。
分布式通信相关的技术包括网络协议、消息编解码、消息路由、QoS控制等。
三、分布式系统技术的应用场景分布式系统技术可以广泛应用于各领域的分布式应用中,如大规模数据处理、云计算、大数据分析、移动互联网、物联网、分布式数据库等。
以下是分布式系统技术在不同领域的典型应用:1、大规模数据处理在大规模数据处理领域,分布式系统技术可以被用于构建分布式计算平台,如Hadoop和Spark等。
基于分布式数据缓存技术的Web-OLAP系统研究

Ke o d : b i r u d e v o m n; nieA a t a Po es g O A ) i r ue a a h yw r s We ;ds b t n i n e t O l n l i rc si ( L P ;ds b td dt c c e t e i r n yc l n t i a
C O L- a ,X E Q ag I G Qul A iun I i ,D N i-n j n i
( ol eo I omai c neadTcnl y ajn nvrt eoa ts n so ui,N ni ins 10 6 C i ) C lg .n r tnSi c n eh o g ,N ni U i syo rn ui d A t n ts aj gJagu2 0 1, hn e f f o e o g e i fA ca ra c n a
关 键 词 : b 分布 式环 境 ; L ; 布 式 数 据 缓 存 We ; O AP 分 中图 分 类 号 : P 1 T31 文献标志码 : A
Re e r h o e O LAP y tm s d n diti t d d t a he t c no o y s a c fW b— s se ba e o srbu e a a c c e h l g
s a py i ce sn u e f h o c re ti q iyt e - AP s s m i h i r ue n i n n, b OL y tm h r l n r a ig n mb ro e c n u r n n u r o W b OL y t n t e d si td e v r me t a We - AP s s t e tb o e b s d o h it b t d d t a h e h i u s r u h o w r .T e o e alf me r f h y tm n e e p e so f a e n t e dsr u e aa c c e t c nq e Wa b o g t r a d h v r l r i f a wo k o e s se a d t x r s in o t h t e d sr ue aa c c e w r ie u a d t e ma a e n lo t m o h it b t d d t a h a e i n d h i i td d t a h e e gv n o t n h n g me t g r h f e d sr u e aa c c e w s d sg e ,F n l , tb a i t i ia l y a p l a in c s a i e .T e a p ia in r s l s o s t a h t o a mp o e t e i q i f ce c ft e We — n a p i t a e w s gv n c o h p l t e ut h w h tt e meh d c n i rv h n ur ef in y o h b c o y i O AP s se i it b t d e v r n n , a d g e t h  ̄ n t e r s o s i . L y tm n d sr u e n io me t n r al s o e h e p n e t i y me
分布式数据缓存技术研究

增, 众多频繁 的数 据访 问 , 对应 用服 务器 和数 据库要 求 越来 越 高, 如何合理提高数据访 问效率且对服务器不产生过多压力 , 成
为提 升系统性 能的关键 , 服务器 与数据库 之间增加 缓存可 以 在 解决 这个 问题 。
1 数据缓存 2 分布式数据缓存
11 缓 . 存
p r r n e a d u ga e d t c e s e iin y ef ma c n p rd a a a c s f ce c . o Ke wo d y rs D t a h n Ditiu e P r r a c p i s t n Daa a c s a ac c ig s b td r eo f m n eo t miai o t ce s
数 据缓存 的意义在于将大量 的数据 拉到应用 程序层 , 大 将
在计算 机系统中 , 缓存就是开辟一个用来保存数据 的空 间 , 使用缓存 , 就不 需要 频繁 地访 问存储 在 内存 或硬 盘 中的数据 。 当执行一个操作 , 将操作结果放人缓存 中后 , 可以很迅速 的重 复
访 问这些 数据 。
Ab t a t sr c Ca h n e h o o y i moe a d moe w d l s d i y tm p l ain o a a s n t e r s ac fd t a h n t e a t o s c i g tc n l g s r n r i ey u e s se a p i t sn w d y .I h e e r h o aa c c ig, h u h r n c o
( 苏州大学计算机科学与技术学院 江苏 苏州 2 50 ) 10 6
摘 要
缓存技 术在 系统 中的应用越来越广 泛。主要对数据缓存进行研 究 , 着重研 究 了分布式模 式下的数据缓存 技术。将数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1概述随着互联网和云计算[1]的高速发展,数据量呈爆炸式增长,许多新型应用对海量数据的处理提出了更高更复杂的需求。
在移动互联网领域火爆的社交网站、购物网站、微博、12306[2]等应用都呈现了用户规模大、数据并发量大、用户对时延敏感的特点;物联网应用也是在向各个领域渗透,医疗卫生,交通轨道,智能家居等,成千上万的智能终端产生的数据量和并发量是惊人的。
传统的关系型数据库和存储系统已无法满足这些应用的规模和对数据处理的要求。
分布式缓存[3]和NoSQL[4]的产生为解决这个难题提供了高并发低时延、海量数据存储和处理的技术解决方案。
NoSQL(Non relational,或者Not Only SQL)是云计算的关键技术之一,它简化了数据库设计,弱化了传统RDBMS不常用的功能,如数据存储上通常是schema-free而不需要固定的表结构,架构上采用Mas⁃ter/Slave或share-nothing使之增强可扩展性,事务上采用最终一致性而非强一致性[5]等,这些简化弱化或丢弃了RDBMS的一些强大但非必须的功能,但在海量存储、扩展性和可用性等方面却具备关系型数据库无法比拟的优势。
它们作为替代传统关系型数据库的核心技术,具有广泛的应用场景。
分布式缓存基于键-值型(Key-Value)[6]数据模型,是应用最广泛的一种NoSQL,它最大的优势在于对高并发的支持和它的可扩展性(scalability),非常适合处理具有3V特性(Volume,Velocity,Variety)的数据。
顾名思义,分布式缓存的特点主要体现在“分布式”和“缓存”上面,其中分布式主要是指数据是分布式存储的,规模和容量可以做到很大,同时容量和性能是线性扩展的,应用不需要关心数据存储在那个节点上,对应用来说就是一个非常大的统一的存储池,在存储容量或性能不够时,只需要对分布式缓存系统本身进行节点的增加,对应用是透明的,不需要应用做任何修改;其次缓存特点是指分布式缓存的性能非常好,主要体现在并发可以做到很高,通常单节点的都可以达到几十万的并发,时延可以做到很低,通常是毫秒级别的延迟。
根据很多行业分析师的观点,如果没有分布式缓存这一关键技术的支撑,云计算的潜能,特别是数据密集型的应用,将会有很大局限性[7]。
分布式缓存的代表有开源的Redis[8]、memcached[9]、亚马逊的Dynamo、淘宝的tair等,其中应用热度较高的是Redis,它支持丰富的数据类型,性能优越,适用于数据变化快且数据规模适合内存容量的场景。
尽管在实际应用中已经部署了大量的NoSQL系统,但它们都是针对不同的应用场景和需求而提出的相应解决方案,各有明显的局限。
有关分布式缓存系统的研究大部分都集中在服务端,主要是数据模型及索引算法、数据管理、数据安全、可用性与可靠性、弹性资源供给、敏捷性与自适应等方面[10]。
针对客户端的研究比较少。
结合当前分布式缓存系统在实际应用中遇到的问题和困境,总结了客户端在设计上的经验教训和不足,结合最新技术发展进行作者简介:屠雪真(1998-),女,本科,CCF会员(98790G),研究方向:云计算和大数据。
收稿日期:2019-01-11分布式缓存系统客户端关键技术研究屠雪真(河南大学计算机与信息工程学院,河南开封475001)摘要:分布式缓存作为支撑海量数据处理的关键技术方案,近年来受到了广泛关注和应用。
从分布式缓存的工程实践出发,研究分布式缓存系统的客户端关键技术,提出了一种针对分布式缓存系统客户端的优化设计,通过异步多线程、双缓冲队列、连接池组和精准重试等设计,较好地解决了抗突发业务量冲击、重试雪崩效应等痛点,提高了客户端的适应能力和性能。
实验证明,相比原客户端,采用优化技术的客户端能更好地适应突发业务量的冲击。
关键词:分布式缓存;客户端;NoSQL技术;云计算;多线程了优化和改进,解决了业务瞬间冲击、CPU利用率过高、重试雪崩等影响客户端稳定的问题。
2相关研究分布式缓存通常使用通用X86服务器组成集群,通过多副本的方式保证数据的可靠性。
分布式缓存系统架构一般都是参考Dynamo论文[11],它由1个管理节点、若干个数据服务节点组成的集群、若干个客户端组成。
并通过分布式Hash和路由算法将应用程序提交的存取操作映射到一个确定的数据节点上。
管理节点负责整个集群系统的运维管理与监控。
通常提供基于命令行的客户端工具和基于Web页面的图形化界面两种操作方式,实现对集群状态的监控和管理。
数据服务节点是最核心的模块,在逻辑上由集群与数据分布层和数据存储层两个层面组成。
集群与数据分布层实现管理集群内部节点间通信、自动故障切换、副本复制与数据同步、智能数据再平衡与数据迁移等功能,它实现了线性扩展能力和许多ACID事务特性。
数据存储层实现数据在内存或磁盘中的可靠存储和快速检索。
客户端提供访问分布式缓存系统的API接口,是应用程序访问分布式缓存集群进行数据存取的主要方式,通常是以支持C、C#、Java等编程语言的动态链接库或驱动程序包的形式存在。
客户端能获取到服务节点列表并感知集群的变化,记录数据服务集群的连接关系和数据分布策略,实现数据读写请求的路由;它管理应用的访问请求并提供同步和异步机制,知道数据在集群中的具体存储位置,并将请求直接发送到正确节点上。
分布式缓存系统中客户端的设计优劣也会直接影响到系统的整体性能[12]。
因此,分布式缓存系统对客户端也有严苛的性能和稳定性要求[13]。
在数据管理方面,客户端聚合数据返回结果,客户端需要能够支持包括预留缓存、通读、通写和延迟写在内的各种数据访问模式,还要支持多种数据一致性水平。
在数据分区方面,客户端基于哈希算法将用户请求直接定位至目标服务器节点,客户端驱动的数据路由方法具有响应延迟低、网络开销小等优点,是目前主流的数据路由方式。
在实现上客户端需要有更好的算法实现数据均衡分布及应对非均匀访问。
负载均衡对消除系统性能短板和保障服务质量等具有重要作用,负载均衡的实现以客户端均衡为主,有利于扩展机制的实现。
在数据一致性方面,在同步复制中,客户端需要等待复制操作全部完成才能得到响应,性能开销大,但可以保障即时一致性;异步复制不必等待复制操作挖出即可返回结果,性能和扩展性较优,可以保障数据的最终一致性,但却牺牲了即时一致性,这意味着应用可能会在某一时刻读取到不一致数据。
客户端需要有一种较优的数据副本控制协议来灵活兼顾一致性和性能等多方面的需求。
在数据安全方面,客户端需要和缓存服务端实现身份认证、授权和加密等操作。
高并发是研究分布式缓存最关注的一点。
优化的客户端设计能够最大程度地利用服务端的性能,与传统的客户端不同的是高并发客户端采用了事件驱动的模型,显著提升了数据的访问性能[14]。
对于业务来说,除了通过高并发最大限度地提高性能以外,还需要客户端能够灵活应对突发的大业务量冲击[15]。
为此,分布式缓存系统客户端一般采用多线程、线程间异步通信、连接池等方案来优化业务处理和网络传输环节。
即便如此,现有的分布式系统客户端依然面临3个主要痛点。
(1)抗冲击能力差,无法有效应对突发的系统负荷[16]。
同一型号的成千上万智能终端为省电缺省设置在同一秒开机或关机,会导致业务量瞬间急剧飙升,会导致短时间内大量业务超时。
(2)CPU利用率过高。
多线程可以利用CPU多核,但是多个线程对连接等临界区数据的锁争用,在每秒几十万的并发场景下,不仅降低了客户端性能,而且高频的线程唤醒以及用户态和内核态的切换,还会导致CPU利用率过高。
(3)重试雪崩效应。
上层业务负责重试,但是客户端并不精确掌握后台服务端的具体状况,如果服务端负荷很重,简单重试会导致服务器越来越繁忙,重试越来越多,产生重试雪崩,最终整个系统崩溃。
3客户端优化设计及关键技术针对上述痛点,提出了一种优化的客户端架构设计。
为抗击业务瞬间冲击,增加消息缓存队列以平滑突发业务量的处理;为减少多个线程对消息缓存队列的锁争用,采用双缓存队列技术,同时引入客户端连接组,消除了多个线程对连接的锁争用;最后针对错误码进行分类和精准重试,仅对部分可重试成功的错误码进行重试,确保不影响性能的前提下达到最大的准确率。
这些优化系统地解决了业务高并发场景下业务瞬间冲击、CPU 利用率过高和重试雪崩效应等典型问题。
如图1所示,优化客户端在架构上由如下模块组成。
API 接口:对外提供同步接口和异步接口的调用。
同步接口采用阻塞方式获取数据,一般性能较差。
异步接口不阻塞应用,是在Socket 收到响应数据后,再执行回调操作异步获取数据。
如果应用是同步的,使用异步接口并不能提升性能,所有的业务线程还是会阻塞。
只有应用是纯异步的,异步接口才能发挥它的性能。
业务线程的主要工作是封装请求task,对象的序列化,封装发送的协议,并将task 路由到对应连接的队列上;在响应返回时,对收到的数据进行反序列化为对象。
路由是通过请求的key,选择对应的连接节点。
路由机制的设计要考虑平衡性和单调性。
平衡性是指key 尽可能均匀地分布到所有的节点上。
单调性是指当集群有变化时,哈希的结果应能够保证已分配的内容可以被映射到原有的或者新的缓存服务中。
选择器线程的主要工作是读取连接的队列,将队列上的task 的数据发送到服务端,读取服务端返回的数据并通知业务线程,对失败的节点进行自动重连。
网络框架采用基于HTTP/2的gRPC,应用只需关系自己的逻辑,不用关心如何处理网络,代码简单清晰,并可避免业务线程阻塞等等,提升系统吞吐能力。
网络层协议使用Protocol Buffers 来高效地处理消息的编解码操作,对数据进行序列化和反序列等。
消息队列采用双缓冲队列设计,分成全局队列和本地队列。
业务线程通过消息队列与选择器线程交互。
业务线程向全局队列发送消息,选择器线程先从全局队列批量获取消息到本地队列,然后无锁操作本地队列进行处理。
连接池组是在客户端建立的和每个服务节点对应的连接池,这样可以避免获取和释放连接时的锁争用。
本文为每个选择器线程针对每个服务端节点都对应一个连接池,即每个选择器线程对应一个连接池组。
选择器线程在业务量突增时补偿性建立部分连接,同时在业务闲时可以主动释放部分连接。
序列化主要是将对象转换为二进制,反序列化是将二进制转换为对象。
可以根据不同的数据类型,使用不同的序列化方式。
3.1线程设计为了充分利用多核处理器的并发处理能力,DCACHE客户端采用异步多线程的设计。
线程分成两类:业务线程和选择器线程,线程数量均可以配置。
业务线程负责组包、接受响应、业务逻辑处理。
选择器线程负责网络收发包,收到响应包后调Client 注册的回调函数进行处理以及在业务闲时主动释放部分链路,同时在业务量陡升时补偿性建立部分连接。