Raft只读操作实现要点

STM32F407ZGT6深度解析:LQFP144与Cortex-M4的工程价值 嵌入式系统设计中,MCU选型本质是算力、外设与物理封装的系统权衡。LQFP144封装不仅提升引脚密度,更通过裸露焊盘(EPAD)、优化热阻(25℃/W)和高耐压GPIO(82个5V tolerant)支撑工业级可靠性;Cortex-M4内核则凭借硬件FPU与DSP指令集,将浮点FFT、卡尔曼滤波、FOC电机控制等算法从Linux平台下沉至实时单片机。其技术价值在于打破‘资源堆砌’误区,实现ADC采样、USB通信、SDIO存储、LCD驱动、CAN总线等多外设协同的确定性调度。典型应用场景涵盖智能门禁、环境监控 阅读详情

Leader直连

640?wx_fmt=other

所有的客户端最终都只会链接到Leader。客户端开始时随机挑选一个节点,如果这个节点不是Leader,就通过响应告诉客户端Leader的地址,然后客户端再去连Leader。

Follower转发

640?wx_fmt=other

客户端可以链接任意节点,客户端的指令会被Follower转发到Leader来执行。

只读操作也必须经过majority确认

只读操作一般只需要读取当前节点的状态机就可以了。但是存在网络分区的情况会导致当前的节点数据严重落伍。被分区隔离开来的Leader和Follower全然不知整个集群已经经过了新一轮的选举,自己的数据已经严重落伍了。所以不论客户端连接的是Follower还是Leader,都不能直接读取状态机来处理只读操作。

640?wx_fmt=other

Raft对只读操作的处理办法是

  1. 只读请求最终也必须依靠Leader来执行,如果是Follower接收请求的,那么必须转发

  2. 记录下当前日志的commitIndex => readIndex

  3. 执行读操作前要向集群广播一次心跳,并得到majority的反馈

  4. 等待状态机的applyIndex移动过readIndex

  5. 通过查询状态机来执行读操作并返回客户端最终结果。

在步骤1到步骤2之间,如果Leader刚刚当选,还必须等待no-op操作同步完成。

上面的步骤看起来很复杂,其中最重要的就是心跳广播,这是为了确认当前集群没有被网络分区。

只读操作没那么快

因为只读操作也要经过一次RPC,所以它并没有我们想想的那么快,它可能和写操作性能差不多。所以并不能通过扩展节点数量来得到整体集群读性能的提升,甚至不升反降。

折中的方案就是单独提供一个特殊的只读指令,在一致性要求不高的场合使用这个特殊指令。这样就可以通过扩展集群数量来提升读性能。但是在遇到网络分区时会导致数据陈旧的问题,要看业务场景是否可以容忍。

只读操作的进一步优化

标准的强一致只读操作是完全是在Leader端进行的。这里可以做一步改进让只读操作主要在Follower端进行。

  1. Follower接收到只读指令后,向leader索要当前的readIndex值。

  2. Follower端等待自身的状态机的applyIndex移动过readIndex。

  3. Follower端通过查询自身的状态机来执行读操作并返回客户端最终结果。

leader向follower返回readIndex也不是简单的直接返回,而是需要重复前面的标准步骤1~步骤3,来确认网络没有分区。这还是一次RPC操作,无法省略。但是毫无疑问,它分担了leader的压力,可以让leader有更多的资源来处理自身的读写操作。

只读操作的终极优化

前面提到的方法无法避免额外的RPC操作来确认网络没有被分区,所以性能没有非常明显的得到优化。 Raft的论文中提到了另一种可以大幅提升只读操作性能的优化方案,同时还告诫读者不到万不得已不要使用。

因为这个额外的RPC操作只是为了确认网络没有被分区,当前节点有无被孤立,新的leader是否有产生。而新leader的产生是需要经历一次完整的选举过程的,这个选举过程有一定的时间才能完成。所以这个分区的状态是可以被缓存一小段时间的。这段时间内不可能出现leader的变更。

leader收到majority的心跳响应后,在接下来的一小段时间里不必去广播心跳来确认分区情况,而可以直接查询当前节点的状态机返回客户端结果。

之所以作者不推荐折中方案是考虑到时钟漂移。比如一个定时任务在系统非常繁忙的时候是不能得到准时执行的,会产生偏差,偏差的时间取决于系统的繁忙程度、Full GC是否正在进行、虚拟机是否正在迁移等特殊情况。

640?wx_fmt=jpeg

关注公众号「码洞」,加入我们一起进阶Raft协议算法

Raft算法的Java实现 自己这几天在学习Redis的Sentinel高可用解决方案,Sentinel选主使用的是著名的Raft一致性算法,本文对Raft的选主作了介绍,具体的算法内容,请参考 Raft 英文Paper Raft的整体结构 Raft 通过选举一个高贵的领导人,然后给予他全部的管理复制日志的责任来实现一致性。 而每个 server 都可能会在 3 个身份之间切换: 领导者 候选者 跟随者 而影响他们身份... 阅读详情

相关推荐

Nacos如何实现Raft算法与Raft协议原理详解

前言 大名鼎鼎的Paxos算法可能不少人都听说过,几乎垄断了一致性算法领域,在Raft协议诞生之前,Paxos几乎成了一致性协议的代名词。但是对于大多数人来说,Paxos算法太难以理解了,而且难以实现。因此斯坦福大学的两位教授Diego Ongaro和John Ousterhout决定设计一种更容易理解的一致性算法,最终在论文"In search of an Understandable Consensus Algorithm"中提出了Raft算法! Raft 适用于数据一致...

Jack章臣的博客 3448

【学习笔记】如何理解Raft中的ReadIndex?

Raft作者Diego Ongaro在其博士论文《CONSENSUS: BRIDGING THEORY AND PRACTICE》中对ReadIndex进行了相关阐述:(以下内容来自机翻) 6.4 Processing read-only queries more efficiently       只读客户端命令只查询复制的状态机;他们不会改变它。因此,我们很自然地会问,这些查询是否可以绕过Raft日志,Raft日志的目的是以相同的顺序将更改复制到服务器

Cassie_zkq的博客 2340

自己动手实现RAFT算法

自己动手实现RAFT算法前段时间学习了一下分布式系统的raft算法,相比较Paxos协议,理解起来确实容易多了,于是就产生了自己动手实现一套基于raft一致性协议的分布式缓存的想法,经过大约两个月的空闲时间,终于完成了一个可以运行的python版本aducode/simple-raft-py模块划分项目主要包括如下几个模块: 1. server: main loop所在,在main loop中处理

兒戲BLOG 9559

raft算法介绍

raft算法中,写入请求的一般执行过程: 接收到写入请求的node,将请求转发给leader。 leader将写入请求记录到leader自己的log中。 leader向其他节点发起append请求,可能包含旧数据的append。 leader确认半数以上的node已经成功append之后,执行commit。 commit之后可以执行apply,也就是执行写入请求,apply完成之后,认为请求执行成功,返回。 leader节点fail后,如何产生新的leader 每个node都和leader之间保证着心

cocoti的博客 2398

Nacos 实现 AP+CP原理[Raft 算法 ]

一、什么是 Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它。为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(leader selection)、日志复制(log replication)、安全(safety),并且使用了更强的一致性来减少了必须需要考虑的状态。 Raft算法将 Server划分为3种状态,或者也可以称作角色: 【1】Leader:负责 Client交互和 log复制,同一时刻系统中最多存在1个。 【2】F

m0_37235955的博客 8970

口撕raft面试100问

19,cap是什么20,zab算法21,实现paxos算法的工程还有哪个?raft…22,23,为什么zk不用raft?其实论文中有提到翻译:可以在不向日志中写入任何内容的情况下处理只读操作。然而,如果没有额外的措施,这将有返回陈旧数据的风险,因为响应请求的leader可能已经被它不知道的新leader所取代。线性化读取必须不返回陈旧的数据,Raft需要两个额外的预防措施来保证这一点,而不使用日志。首先,leader必须拥有提交条目的最新信息。

yxg520s的博客 3756

Raft 读请求性能分析

使用Leader Lease,保证整个集群只有一个Leader,Leader接收到都请求后,记录下当前的commitIndex为readIndex,当applyIndex大于等于readIndex 后,则可以读取状态机中的数据返回。(1)在每个Term开始时,由于新选出的Leader可能不知道上一个Term的commitIndex,所以需要先在当前新的Term提交一条空操作的日志;Leader把每次读请求作为一条日志记录,以日志复制的形式提交,并应用到状态机后,读取状态机中的数据返回。

谢谢大家的关注 919

Java实现RAFT算法的分布式一致性协议

在分布式系统的设计与实现中,维持一致性是一项至关重要的任务。RAFT算法,作为一种易于理解和实现的共识算法,被广泛应用于构建可信赖的分布式系统。RAFT通过定义一系列角色、规则和状态,确保了在节点间可靠的复制数据。本文将简要介绍RAFT算法的核心概念,为深入探索其内部工作机制和实践应用奠定基础。在没有集中控制的分布式系统中,当多个节点需要协调他们的操作并且保持状态一致时,就会出现分布式一致性问题。这类问题在系统中扮演关键角色,因为它们确保了数据在各个节点间的一致性,无论这些节点分布在何处。

weixin_32445049的博客 1087

分布式一致性算法 - raft 图解

前言 应用服务架构的发展是一个循序渐进的过程,从最开始的单机架构逐步演化到如今的基于微服务的分布式架构。与此同时,应用服务最底层的数据支撑 – 数据存储服务也逐渐由单节点单副本逐步往多节点多副本的方向演进。 多副本节点通过数据复制技术,可以实现分布式容灾,提高服务的可用性,降低单点故障带来的风险;同时多节点部署,还可以很大程度上提高整个系统的吞吐量,降低访问延迟。但是与此同时,基于 CAP 理论,多副本技术也带来了一致性的问题。 raft 算法的诞生正是为了解决在分布式场景之下的数据一致性问题。本文我们将从

zzzsmm的博客 1140

基于WEKWS模型的语音唤醒关键词识别

本文所使用的模型网络结构继承自论文《Compact Feedforward Sequential Memory Networks for Small-footprint Keyword Spotting》,文中研究了将低秩矩阵分解与传统FSMN相结合的紧凑型前馈顺序记忆网络(cFSMN)用于远场关键字检测任务。

YuZhou的博客 6600

植物叶绿体基因组分析全攻略:从共线性到密码子偏好性

本文全面解析植物叶绿体基因组分析流程,从共线性分析到密码子偏好性研究。详细介绍了叶绿体基因组结构特征、测序数据获取与质量控制、基因组组装与注释方法,以及比较基因组学和进化分析技术。特别关注IR区边界变异分析和选择压力评估,为植物系统发育研究和物种鉴定提供实用指南。

weixin_28475533的博客 222

利用Go语言模拟实现Raft协议

本文将从头开始复现个人利用 Go 语言模拟实现 Raft 的过程,系统实现包括本地 Raft 节点注册,Raft 节点的投票和选举,心跳监听,超时选举,Http监听,日志复制,日志提交。 本文按照个人思路,将每一部分分块进行讲解,并提供了代码,理论上可以直接运行,同时也能让初学者更好的验证每一步的代码。

qq_62306969的博客 3401

Wireshark、Fiddler、Charles 三款抓包工具的本质差异与选型指南

抓包工具是网络调试与接口分析的基础能力,其核心在于理解OSI模型分层原理——不同工具工作在不同协议层级,解决不同维度问题。Wireshark面向网络层(L2/L3),可捕获原始数据帧与TCP握手细节,适用于DNS异常、丢包重传等底层问题定位;Fiddler和Charles则工作在应用层(L7),作为HTTP(S)代理实现HTTPS解密、请求改写与弱网模拟,是API调试与移动端测试的首选。技术价值体现在:精准匹配问题域(如证书固定需Fiddler脚本绕过,iOS调试依赖Charles证书信任链),避免‘用显微

weixin_28831341的博客 254

当前只读状态:是_Raft 只读(read-only)优化

Raft 只读操作优化为什么需要优化只读操作raft是一个为分布式集群达成一致性的协议。对于集群需要保证一致性的数据,每次一操作其实都要确认此操作是否在集群中达成了一致。从是否会改变数据的角度,操作就分两个只读操作与写操作。只读操作顾名思义就是不会对数据做任何的改动。写操作包含了增删改等需要修改数据的操作,通俗说就是这次操作处理完后,数据有可能跟操作前不一样。正是因为只读操作不对数据进行修改,所以...

weixin_39977276的博客 1388

UOS忘记密码别慌!用LiveCD工具5分钟搞定,附命令行救援模式详细步骤

本文详细介绍了UOS系统密码遗忘时的两种解决方案:图形化LiveCD工具和命令行救援模式。针对普通用户,LiveCD工具提供5分钟快速重置密码的便捷操作;而技术人员可通过命令行深度解析系统分区挂载与密码修改流程。文章还包含安全加固建议,帮助用户预防类似问题发生。

weixin_27032989的博客 592

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制

本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。

tcp8optimizer的博客 317

raft php 实现,raft协议的一些要点

raft协议是一致性协议中相对容易理解的一个实现,类似的还有zab,paxos等一致性算法。etcd是基于raft协议的,k8s依赖于etcd,下面介绍下raft协议的一些要点1,Raft算法的节点数量问题Raft协议中主节点心跳失效后follower成为candidate并且在n/2个节点投票成为主节点,在RAFT协议集群中如何确认n是多少?动态增加机器如何变化n,超时多久应该认为节点为n-1...

weixin_30800615的博客 289

vivado:差分信号和单端信号 的相互转换 IBUFDS OBUFDS

FPGA能处理的都是单端信号,但有些输入信号是差分的,这时候就需要把差分信号转为单端信号。

qq_52137732的博客 1万+

etcd中Raft协议

文章目录前言Raft协议Leader选举日志复制 前言 文章内容来自:《etcd技术内幕》 — 百里燊,感兴趣的读者可以去读一下。 Paxos 算法和 Raft 算法: Paxos 算法诞生于 1990 年,这是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—Raft 算法。 Raft协议 在正式开始介绍 Raft 协议之间,我们有必要简单介绍一下其相关概念。在分

qq_43949280的博客 3162

从理论到实践:利用FilterSolutions高效设计7阶椭圆低通滤波器

本文详细介绍了如何利用FilterSolutions软件高效设计7阶椭圆低通滤波器。文章从理论入手,对比了巴特沃斯、切比雪夫等经典滤波器特性,阐述了在要求高衰减陡度(如62dB抑制)和严格通带波纹(0.2dB)时,椭圆滤波器是最优选择。通过分步实战教程,指导读者完成从软件参数设置、性能验证到实际电路布局与调试的全过程,助力射频与高速数字信号处理工程师将理论转化为可靠设计。

jupi8的博客 561

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

大华 DSs 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。大华 DSS存在SQL注入漏洞,攻击者 pota/services/itcBuletin 路由发送特殊构造的数据包,利用报错注入获取数据库敏感信息。攻击者除了可以利用 SQL注入漏词获取数据库中的信息例如,管理员后台密码、站点的用户人人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限poc验证是否存在漏洞如果你想查询用户名和密码。

holyxp的博客 4005

你也可以用Java来实现RAFT协议

基于 Java 实现的轻量级 RAFT 底层框架 ——Airy-raft,它以高负载、低延迟、丰富接口和清晰逻辑,为分布式应用开发提供强力支撑,助力开发者快速构建可靠的分布式系统.

qq_22928269的博客 786

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

什么是Raft

本文章来源于:https://github.com/Zeb-D/my-review ,请star 强力支持,你的支持,就是我的动力。 [TOC] 背景 理解分布式 多个参与者 针对 某一件事 达成完全 一致 :一件事,一个结论 已达成一致的结论,不可推翻 分布式共识算法 Paxos:被认为是分布式共识算法的根本,其他都是其变种,但是 Paxos 论文中只给出了单个提案的过程,并没有给出复制...

在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【raft】学习八:ReadIndex

本文主要了解了一下一致性的一些基本知识,以及跟随etcd/raft的代码逻辑,探讨了一个只读请求需要经历哪些操作,主要探讨了两种方式:readIndex和lease read。

qq_40859492的博客 1428

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Raft算法原理

简介 关于Raft算法,有两篇经典的论文,一篇是《In search of an Understandable Consensus Algorithm》,这是作者最开始讲述Raft算法原理的论文,但是这篇论文太简单了,很多算法的细节没有涉及到。更详细的论文是《CONSENSUS: BRIDGING THEORY AND PRACTICE》,除了包括第一篇论文的内容以外,还加上了很多细节的描述。在...

跨链技术践行者 1万+
上一篇: Raft协议精解
下一篇: Raft客户端实现要点
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值