一文了解EPaxos核心协议流程

简介: EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景。但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPaxos讲得通俗一点的文章。EPaxos算法理论虽好,但由于其实在晦涩难懂,工程实现上也有很多挑战,实际应用落地尚未成熟。本文将用通俗易懂的语言介绍EPaxos算法,由浅入深、一步一步的让只有Paxos或Raft等分布式一致性算法基础的同学都能轻易看懂EPaxos,真正将晦涩难懂的EPaxos,变的平易近人,带入千万家。

image.png

作者 | 祥光(严祥光)
来源 | 阿里技术公众号

引言

EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景。但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPaxos讲得通俗一点的文章。EPaxos算法理论虽好,但由于其实在晦涩难懂,工程实现上也有很多挑战,实际应用落地尚未成熟。

本文旨在通俗易懂地介绍EPaxos算法,由浅入深、一步一步的让只有Paxos或Raft等分布式一致性算法基础的同学都能轻易看懂EPaxos,真正将晦涩难懂的EPaxos,变的平易近人,带入千万家。

在《一文了解分布式一致性算法EPaxos》中,从Paxos的问题引出EPaxos,介绍了EPaxos的基本概念与直观理解,相信读者已经对EPaxos有了整体的印象。

本文将从Paxos与EPaxos对比的角度,介绍EPaxos核心协议流程。上一篇文章最后留下的思考题,相信在阅读完本文后,都能找到答案。阅读本文需要一些Paxos或Raft等分布式一致性算法背景。

一 EPaxos基本思想

EPaxos是一个Leaderless的一致性算法,无需选举Leader,任意副本均可发起提议。

Leaderless也可以看作每个副本都是Leader,从Multi-Paxos或Raft的角度看,如果使用多Group,将每个Leader划分到不同的Group,每个副本担任一个Group的Leader,同时担任其它所有Group的Follower,好像也可以做到类似Leaderless的效果。

使用多Group实现的Leaderless,每个Group独立的对一系列Instance达成一致,每个Group产生一条Instance序列,不同Group产生的Instance彼此独立,不能确定先后顺序。因此跨Group的一致性是一大问题,在一致性层面无法解决,往往需要在上层使用分布式事务来解决。

EPaxos解决了这个问题,实现了真正的Leaderless。EPaxos通过跟踪Instance之间的依赖关系,确定不同Group产生的Instance的相对顺序,然后通过排序将多Group产生的多条Instance序列合并成一条全局的Instance序列,实现了跨Group的一致性,也即实现了真正的Leaderless。

EPaxos先运行共识协议,使各副本对Instance的值和Instance依赖的相对顺序达成一致,随后运行排序算法,基于前面已经达成共识的Instance的相对顺序,对Instance进行全局排序,最终得到一致的全局Instance序列。

以上是站在Multi-Paxos或Raft使用多Group实现Leaderless的角度引出EPaxos的基本思想,实际Group是一致性算法之外的概念,这里引入Group只是为了方便介绍,实际EPaxos中并没有Group的概念,但与Paxos或Raft类似,可以在EPaxos之上实现多Group。

二 EPaxos的Instance

EPaxos的Instance与Paxos有所不同,Paxos的Instance事先分配序号,但EPaxos的Instance不事先分配序号,各副本可以并发的乱序提交,但跟踪记录Instance之间的依赖关系,最后根据依赖关系排序。这里先总结一下不同点:

image.png

EPaxos的Instance与Paxos的不同点

Paxos的Instance由全局连续递增的InstanceID标识,InstanceID也是Instance的序号,全局唯一,连续递增。

EPaxos的Instance空间是二维的,每个副本拥有其中一行,因此由二维的R.i标识,其中R为副本标识,i为副本内连续递增的整数,每开始一个新的Instance就加一。副本R拥有的Instance序列为R.1,R.2,R.3,...... R.i,......

EPaxos的Instance相对Paxos还有一些额外的属性:

  • state标识Instance当前的状态,可取值pre-accepted、accepted、committed。因为EPaxos的Instance的状态比较多,所以需要专门的state字段标识。
  • deps为依赖的Instance集合,存放所有依赖的Instance的标识,即要在前面执行的Instance。deps保存了Instance之间的相对顺序,后续将基于deps对Instance进行排序。
  • seq为Instance的序列号,其值为deps中所有Instance的seq的最大值加一,反映Instance提议的顺序,后续排序的时候使用。

EPaxos的Instance的deps和seq属性与Instance的值一样,也需要在各副本之间达成一致,后续各副本将独立的基于deps和seq对Instance进行排序。因为EPaxos的排序算法是确定性的,各副本基于相同的deps和seq对Instance进行排序,最终会得到一致的全局Instance序列。

将Instance看作图的顶点,deps就是顶点的出边,图的顶点和边都确定并在各副本之间达成一致之后,各副本对图进行确定性的排序,最终得到一致的Instance序列。

三 EPaxos共识协议

Paxos提交一个值需要两阶段,而EPaxos的Instance多了依赖集合deps和序列号seq,为了确定这些属性的值,EPaxos比Paxos多了一个阶段。完整的EPaxos有三阶段,但并非每个阶段都是必须的,下表将Paxos与EPaxos的协议流程进行对比:

image.png

Paxos与EPaxos的协议流程对比

EPaxos与Paxos相比,Prepare阶段和Accept阶段类似,但EPaxos多了PreAccept阶段,也是EPaxos最关键的一个阶段。正因为EPaxos多了PreAccept阶段,Instance的状态更多了,所以引入专门的state属性来标识Instance当前所处的状态(pre-accepted、accepted、committed)。没有引入Prepare阶段的状态,是因为Prepare阶段没有提议值,可以通过本地有无提议值来与其它状态区分。通常情况下,EPaxos只运行PreAccept阶段,即可Commit,Prepare阶段和Accept阶段都能跳过。

EPaxos与Paxos类似,在任意阶段如果发现Instance被抢占,都需要回退到Prepare阶段重新开始。

1 Prepare阶段

Prepare阶段的作用,EPaxos与Paxos类似,都是为了争取提议权,同时学习之前已经提议的最新值。在EPaxos中,因为每个副本都拥有各自独立的Instance空间,在自己的Instance空间上提议,相当于Multi-Paxos的Leader,所以与Multi-Paxos类似,通常情况下可直接跳过Prepare阶段,直接从下一阶段开始。

2 PreAccept阶段

PreAccept阶段是EPaxos特有的,其作用是确定Instance的依赖集合deps和序列号seq,同时尽量让提议值、deps和seq在各副本间达成一致。若PreAccept阶段已经达成一致,则直接到Commit阶段(Fast Path),否则需要运行Accept阶段,然后才到Commit阶段(Slow Path)。

PreAccept阶段是如何确定Instance的依赖集合deps和序列号seq的呢?其实比较简单,从副本本地已存在的Instance中,收集需要在前面执行的Instance,即本地deps集合,本地seq即本地deps中的所有Instance的seq的最大值加一。最终的依赖集合deps取大多数副本的本地deps集合的并集,最终的序列号seq则取他们的本地seq的最大值。

各副本并发提议的时候,不同副本的本地deps和本地seq都可能不一样,那么PreAccept阶段如何才能达成一致呢?如果有足够多的副本(Fast Quorum)的本地deps和本地seq都相同,则已经达成了一致。否则,最终的依赖集合deps取大多数(Slow Quorum)副本的本地deps的并集,最终的序列号seq取它们的本地seq的最大值,然后运行Accept阶段达成一致。

PreAccept阶段的Fast Quorum始终包含提议者,会在后面讨论原因。Fast Quorum的值不小于Slow Quorum。假设副本总数为N,可容忍F个副本同时失效,N = 2F + 1,则Fast Quorum = 2F,优化后的EPaxos可优化至F + [ (F + 1) / 2 ],Slow Quorum = F + 1。Fast Quorum取值的推导这里先不做介绍,会在后续文章中详细讨论,Slow Quorum即大多数副本,与Paxos的Accept阶段相同。

3 Accept阶段

Accept阶段的作用,EPaxos与Paxos类似,但Paxos只将提议值同步到大多数副本,EPaxos需要将提议值、deps和seq都同步到大多数副本,一旦形成多数派则决议达成。若在PreAccept阶段已经达成决议,则可跳过Accept阶段,直接进入Commit阶段。

4 Commit阶段

Commit阶段的作用,EPaxos与Paxos类似,都是将达成的决议异步发送给其它副本,让其它副本学习到决议,不同的是EPaxos的决议不仅包括决议值,还包括deps和seq。

四 EPaxos排序算法

与Paxos不同,EPaxos的Instance提交后,它们的顺序还没有确定,因此EPaxos需要一个额外的排序过程,对已提交的Instance进行排序。当Instance被提交,并且其依赖集合deps中的所有Instance也都提交后,就可以开始一次排序过程。

将EPaxos的Instance看作图的顶点,Instance的依赖集合deps看作顶点的出边,Instance的值和依赖集合deps达成一致后,图的顶点和边就在各副本之间达成一致,因此各副本会看到相同的依赖图。

EPaxos对Instance排序的过程,类似于对图进行确定性的拓扑排序。但需要注意的是EPaxos的Instance之间的依赖可能形成环,即图中可能会有环路,因此不完全是拓扑排序。

为了处理循环依赖,EPaxos对Instance排序的算法需要先寻找图的强连通分量,环路都包含在了强连通分量中,如果把一个强连通分量整体看作图的一个顶点,则所有强连通分量构成一个有向无环图(DAG),然后对所有的强连通分量构成的有向无环图进行拓扑排序。

EPaxos排序算法的流程如图1所示,其中由背景色圈起来的部分是强连通分量:

image.png

EPaxos排序算法

寻找图的强连通分量一般使用Tarjan算法,它是一个递归算法,实测发现递归实现很容易爆栈,也给工程应用带来了一定的挑战。

不同强连通分量中的Instance按照确定性的拓扑顺序排序,同一强连通分量中的Instance是并发提议的,理论上可以按任意确定性规则排序。EPaxos为每个Instance计算了一个seq序列号,seq的大小反映了Instance提议的顺序,同一强连通分量里面的Instance按照seq大小排序。实际seq可能重复,并不能保证全局唯一递增,EPaxos论文并未考虑到这一点,实际可以使用seq加副本标识排序。

事实上,随着新的Instance不断的运行,旧的Instance可能依赖新的Instance,新的Instance又可能依赖更新的Instance,如此下去可能导致依赖链不断延伸,没有终结,排序过程一直无法进行,形成活锁。这也是EPaxos工程应用的一大挑战。

因为Instance排序算法是确定性的,各副本基于一致的依赖图对Instance排序后,将得到一致的Instance序列。

五 EPaxos案例

下面使用一个具体的案例,介绍EPaxos的核心协议流程,如下图所示,系统由R1、R2、R3、R4、R5,5个副本组成,水平方向代表时间,值A、B、C的提议流程如图所示。

image.png

EPaxos共识协议

案例中各Instance的属性取值如下表所示:

image.png

EPaxos核心协议流程案例中Instance的属性

1 提议值A

首先R1运行PreAccept阶段发起提议值A,它首先获取自己的本地deps和本地seq,此时它本地还没有任何Instance,所以本地deps为空集,本地seq为初始值1,它持久化提议值A、本地deps和本地seq。

然后R1向R2、R3广播PreAccept(A)消息,消息携带提议值A、本地deps、以及本地seq(图中未标示),此时R1、R2、R3组成Fast Quorum。PreAccept消息可以只广播给Fast Quorum中的副本,EPaxos论文中将这种优化称为Thrifty优化。

R2、R3收到PreAccept(A)消息后,分别获取自己的本地deps和本地seq,与R1类似,本地deps为空集,本地seq为1,持久化后回复R1。

R1收到Fast Quorum中的副本的本地deps和本地seq都相同,决议达成,最终的deps为空集,seq为1,运行Commit阶段提交。

2 提议值B

接下来R5运行PreAccept阶段发起提议值B,此时它本地也还没有任何Instance,所以本地deps为空集,本地seq为初始值1。R5本地持久化后,向R3、R4广播PreAccept(B)消息。

R4回复的本地deps为空集,本地seq为1,R3此时本地已经有了值A的Instance,因此R3回复的本地deps为{1.1},也即图上标示的{A},本地seq为2,即A的Instance的seq加一。

Fast Quorum中的副本的本地deps和seq不都相同,因此需要运行Accept阶段,最终的deps取大多数副本的本地deps的并集为{1.1},也即图上标的{A},最终的seq取大多数副本的本地seq的最大值为2,通过Accept阶段,将提议值B、最终的deps、最终的seq达成多数派。最后运行Commit阶段提交。

3 提议值C

最后R1运行PreAccept阶段发起提议值C,此时R1本地已经有了值A的Instance,因此本地deps为{1.1},也即图上标示的{A},本地seq为3。R1本地持久化后,向R2、R3广播PreAccept(C)消息。

R2和R3此时本地已经有了值A和值B的Instance,因此R2、R3回复的本地deps为1.1,5.1},也即图上标示的{A,B},本地seq为3,即B的Instance的seq加一。

Fast Quorum中除了提议者R1以外的其它副本的本地deps和seq都相同,因此决议已经达成,最终的deps为{1.1,5.1},也即{A,B},seq为3,运行Commit阶段提交。

4 排序

提议值A、B、C的Instance按照它们的依赖集合deps画出的依赖关系如下图(左)所示:

image.png

提议值A、B、C的Instance之间的依赖关系(左),排序之后的顺序(右)

A的Instance的deps为空集,因此没有出边;B的Instance的deps为{A},因此有一条出边指向A;C的Instance的deps为{A,B},因此有两条出边,分别指向A和B。

依赖关系图中没有循环依赖,已经是一个有向无环图(DAG)。因此顶点A、B、C各自是一个强连通分量,进行确定性的拓扑排序后得到它们的顺序:A <— B <— C,如图如图(右)所示。

六 EPaxos讨论

1 Instance冲突

EPaxos引入Instance冲突(Interfere)的概念(与Parallel Raft类似,与并发冲突不是一个概念),若两个Instance的值之间没有冲突(例如访问不同的key),则它们的先后顺序无关紧要,甚至可以并行处理,因此EPaxos只处理有冲突的日志之间的依赖关系。

EPaxos的Instance的依赖集合deps,存放的是需要在该Instance之前执行的Instance。引入冲突之后,deps中存放的是与该Instance冲突的Instance。

冲突是一个与具体应用相关的概念,引入冲突之后,所有Instance不再是全序的,变成了偏序的,减少了依赖,降低了Slow Path的概率,提高了效率。

2 Fast Quorum

关于Fast Quorum取值的推导,留待后续文章介绍,这里先讨论下,为什么PreAccept阶段的Fast Quorum始终包含提议者。

EPaxos在每个阶段,提议者总是本地先持久化成功之后,再广播消息给其它副本。也就是说提议者总是在Quorum中,因此判断是否达成Quorum时,提议者总是可以算一票。

在PreAccept阶段,提议者将其本地deps和seq包含在了PreAccept消息中,作为其它副本计算它们本地deps和seq的基础,使得提议者的本地deps和seq总是包含在最终的deps和seq中,因此PreAccept阶段的Fast Quorum始终包含提议者。

EPaxos总是先本地持久化成功之后再广播给其它副本,这样可以减小Fast Quorum,但也导致本地持久化与网络消息收发不能并行进行,降低了一些效率,同时也使得提议者不能容忍本地磁盘损坏的情况,这些都是EPaxos工程应用必须面对的问题。

Fast Quorum的值为什么不会小于Slow Quorum呢?这里无需推导Fast Quorum的取值,从直观上就可以得出这个结论。在Paxos中一个副本提议一个值,所有副本只会有两种结果,接受或者不接受这个值。而在EPaxos中每个副本都可能给出不同的deps和seq,因此需要更多的副本给出相同的结果才能保证在有副本失效后能恢复出正确的结果。

七 EPaxos伪代码

到这里,相信读者已经可以看懂EPaxos核心协议流程的伪代码了。EPaxos核心协议流程伪代码如下图所示,为了简单,省略了提议ID(Proposal ID,或者叫Ballot Number,投票编号)相关的部分,这部分与Paxos相同。

伪代码中将日志视为命令(Command),每个Instance对一条Command达成一致,每个副本使用一个二维数组cmds保存收到的Command。

image.png

EPaxos核心协议流程伪代码

八 总结

EPaxos通过显示维护Instance之间的依赖关系,不仅去除了对Leader的依赖,还使得Instance可以并发的乱序提交,可以更好的进行Pipelining优化,同时显式维护依赖也使得乱序执行成为可能。EPaxos支持乱序确认、乱序提交、乱序执行,理论上可以有更高的吞吐量。同时也可以看到一些EPaxos工程应用的挑战,这些都是EPaxos工程落地要解决的问题。

本文从Paxos与EPaxos对比的角度,介绍了EPaxos核心协议流程,但EPaxos的内容决不仅仅只有这些,特别是Failover场景下,如何保证日志序列的顺序性。

思考

最后留下几个思考题,感兴趣的同学可以先思考思考:

  1. Instance的seq为什么会重复,什么情况下会重复?
  2. Fast Quorum的取值如何推导?
  3. 如果一个Instance的共识协议流程还未完成,其提议者就宕机了,其它副本该怎么处理这个Instance?

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码发展系列专访之五:低代码的最大价值点是“技术平民化”吗?

话题&#xff1a;低代码专访编辑 | LLBin前言&#xff1a;2019年开始&#xff0c;低代码爆火。有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。CSDN随后展开低代码平…

梦幻跨服购买需要登录服务器未响应,梦幻西游8月4日定期维护公告:跨服购买限制放宽...

核心提示&#xff1a;法宝”系统新增“多套法宝切换”功能。亲爱的玩家朋友&#xff1a;为保证服务器的运行稳定和服务质量&#xff0c;《梦幻西游2》所有服务器将于2015年8月4日上午8:00停机&#xff0c;进行每周例行的维护工作。预计维护时间为上午8:00&#xff5e;9:45。如果…

深度技术揭秘 | 大促狂欢背后,如何有效评估并规划数据库计算资源?

简介&#xff1a; 经过“双11”、“618”这类互联网促销活动的验证&#xff0c;越来越多的互联网公司采用不定期营销活动来刺激消费&#xff0c;达到提升营收能力的目标。然而&#xff0c;在每一次业务狂欢的背后&#xff0c;如何科学地为促销活动准备相应的计算资源就变成了困…

学画画软件app推荐_今日推荐:拍照摄影APP之稀缺软件篇

你也许热衷拍摄或喜欢摄影&#xff0c;那么日常的拍摄主要的工具离不开手机&#xff0c;好的拍照摄影APP当然也必不可少。一个好的拍照软件更加重要&#xff0c;有时候市面上常用的拍照软件不能满足你特殊的拍摄手法&#xff0c;经常需要重新编辑或修改才能达到效果&#xff0c…

干货|一文读懂阿里云数据库Autoscaling是如何工作的

简介&#xff1a; 阿里云数据库实现了其特有的Autosaling能力&#xff0c;该能力由数据库内核、管控及DAS&#xff08;数据库自治服务&#xff09;团队共同构建&#xff0c;内核及管控团队提供了数据库Autoscaling的基础能力&#xff0c;DAS则负责性能数据的监测、Scaling决策算…

jq动态渲染后获取不到元素高度_浏览器的渲染机制

面试肯定会问到这个吧~So&#xff1a;再一次的屡屡浏览器的渲染机制~在渲染一开始会先从网络层获取请求文档&#xff08;HTML、XML&#xff09;的内容&#xff0c;然后再进行以下基本流程3.1 解析HTML 》 DOM树从HTML文本解析到HTML语法树&#xff0c;再解析到文档对象树&#…

数字时代的抉择,金蝶 EBC 的破局

今年 10 月&#xff0c;Gartner 发布了企业在 2021 年需要关注的重要战略科技趋势&#xff0c;其中“可组装的企业”一词引起热议。Gartner 认为原本为了提高效率而建立的静态业务流程很脆弱&#xff0c;在疫情的冲击下容易变得支离破碎&#xff0c;因此企业应具有不断重组与改…

自己动手从0开始实现一个分布式RPC框架

简介&#xff1a; 如果一个程序员能清楚的了解RPC框架所具备的要素&#xff0c;掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异步调用、熔断降级等技术&#xff0c;可以全方位的提升基本素质。虽然也有相关源码&#xff0c;但是只看源码…

deb 中标麒麟_「图」百度网盘Linux版放出deb包客户端:新增支持Ubuntu 18.04 LTS

6月中旬发布的百度网盘Linux版本中&#xff0c;首先适配了中标麒麟桌面操作系统软件(兆芯版)V7.0。而今天Ubuntu官方推特最新微博表示&#xff0c;继发布Linux rpm包客户端之后&#xff0c;官方今天又推出了deb包客户端&#xff0c;新增支持Ubuntu 18.04 LTS。目前百度网盘已经…

KubeVela 成为 CNCF 沙箱项目,让云端应用交付更加简单

简介&#xff1a; KubeVela 就是这样一个面向用户的上层平台项目。对于业务开发者来说&#xff0c;KubeVela 简单、易用&#xff0c;它可以让开发者以极低的心智负担和上手成本在 Kubernetes 上定义与部署应用... 但更重要的是&#xff0c;对于平台团队来说&#xff0c;KubeVel…

携程梁建章:要让元宇宙技术成为真宇宙探索、旅游的灵感来源

“我们要把旅游做的更有交互性&#xff0c;更有沉浸感&#xff0c;更有趣&#xff0c;远远抛开元宇宙。” 携程集团联合创始人&#xff0c;董事局主席梁建章在12月9日于澳门伦敦人举办的全球合作伙伴峰会上&#xff0c;发表了对热门话题“元宇宙”的看法并表示&#xff0c;激发…

shell两个时间字符串插值_Shell 脚本速成

0x00 前言这段时间快速把 Micropoor 的内网课程看完了一遍&#xff0c;里面出现了很多 Shell 脚本。Shell 脚本有什么好处&#xff1f;无需安装其他软件适合任务自动化&#xff0c;擅长系统管理任务通过 Shell 编程&#xff0c;大大提高渗透效率。0x01 第一个 shell 脚本功能&a…

Quick Audience组织和工作空间功能解读

近期&#xff0c;Quick Audience完成了权限系统全面升级&#xff0c;可以解决集团企业不同品牌、不同运营组织&#xff0c;不同消费者运营的诉求&#xff0c;精细化保障企业数据访问安全&#xff0c;提升管控的灵活度。 Quick Audience整个系统分为组织管理和工作空间两层。一个…

mac安装python环境教程_python mac下安装虚拟环境的图文教程

Mac 下 Flask 框架 workon命令找不到 ---- 最终解决方案&#xff08;详解具体实现操作过程中遇到的坑&#xff09;2018年08月17日 00:02:05Jasonmes阅读数&#xff1a;622 Mac 下 Flask 的 全网最详细搭建1.安装virtualenv和virtualenvwrapper sudo pip install virtualenv# 以…

数据智能构建管理平台Dataphin V2.9.4.3版本发布

简介&#xff1a; Dataphin发布V2.9.4.3版本升级多项产品能力&#xff0c;该版本在产品功能和用户体验上都进行了优化和提升&#xff0c;旨在为用户提供更完善的产品能力和体验&#xff0c;以加速企业数据中台建设进程。 1 产品简介 Dataphin是阿里巴巴集团OneData数据治理方…

host文件注释 ubuntu_Redis and MongoDB 设置密码验证(scrapy)(win)(ubuntu)

1 . Rediswin101.找到 redis.windows.conf ,对其进行编辑。将 # requirepass foobared 更改为 requirepass yourpassword 2.重新启动 redis-server 服务,如: redis-server redis.windows.conf (以redis.windows.conf为配置启动redis-server)ubuntu1.ubuntu下Redis的配置文件为…

阿里云罗小飞:阿里云边缘云,从资源到场景的产品演进

2021年7月1日&#xff0c;以“云集影从&#xff0c;融网聚生”为主题的GIDC全球互联网数据大会在上海成功举行。本次大会由中国信通院指导&#xff0c;艾迪网主办&#xff0c;邀请来自政府、产业等多领域的专家&#xff0c;围绕“新基建”、“绿色数据中心”、“云网协同”、“…

乾通嗖嗖抢先布局多元化用工 实现全流程数智化人力管理

12月9日&#xff0c;乾通互连战略升级暨乾通嗖嗖媒体发布会在北京举行。在发布会上&#xff0c;乾通互连对外宣布组织架构再升级&#xff0c;未来将围绕薪酬社保福利及多元化用工两大业务板块进行战略布局&#xff0c;推出多元化用工解决方案——乾通嗖嗖。 乾通嗖嗖通过线上多…

那些年,我们一起做过的性能优化

简介&#xff1a; 性能优化是一个体系化、整体性的事情&#xff0c;印刻在项目开发环节的各个细节中&#xff0c;也是体现技术深度的大的战场。文章以Quick BI的复杂系统为背景&#xff0c;详细介绍性能优化的思路和手段&#xff0c;以及体系化的思考。 一直以来&#xff0c;性…

中继承父类实现父类方法的快捷键_关于封装、继承

在初期&#xff0c;很多人对于java中一些定义的认识比较模糊&#xff0c;今天我就来详细讲一讲我所认识的封装和继承。1、封装1.1&#xff09;概念&#xff1a;将类的某些信息隐藏在内部&#xff0c;不允许外部程序直接访问&#xff0c;而是通过该类提供的方法来实现对隐藏信息…