服务器
文章平均质量分 77
lkness
学不见其长,但日有所增
展开
-
raft算法学习备忘
一种分布式一致性共识算法的实现方式,机制相比于其它例如paxos来说无论从可读性还是实现机制上要简单很多,并且可以证明其正确性。raft论文只提出想法与证明,具体实现参考官网下面的章节,包含了各种语言的实现。golang最出名的raft算法实现就是etcd团队开源的。raft算法将集群划分为一主多从,由主节点接收写操作,所以包含了集群自动选主,如果暂时没有选出主节点,集群是不可用状态,等待选出主节点(一般几百ms内就可以选出主节点)。原创 2023-08-25 14:10:57 · 507 阅读 · 0 评论 -
redis7.0rdb源码解析
rdb(redis database)是redis持久化方法中的一种,通过一次性将redis内存中的数据全量快照落盘,达到持久化的目的。rdb的实现方法分为阻塞和非阻塞,阻塞就是执行快照期间不执行其它业务逻辑保证数据一致性,非阻塞就是fork子进程使用fork时候的主进程数据来落盘同时主进程还能对外提供服务。rdb的触发方式也分为手动和自动,手动就是redis客户端调用save或者bgsave,自动就是通过配置文件的save字段配置触发条件以及别的例如主从复制、flushall、shutdown时触发。原创 2023-06-19 11:06:27 · 218 阅读 · 0 评论 -
paxos-simple
上周给组里分享课程,其中讲到了paxos,觉得没讲好,遂决定看看paxos论文,看的时候有的枯涩的地方就翻译到文本里记录,翻译得越来越多,索性都翻译了吧 ...1 介绍在实现一个容错分布式系统时,人们认为Paxos算法理解起来很困难,大概对于很多读者来说最初的陈述是用的希腊语。事实上,它是分布式算法中最简单也最明显的一种。它本质上是一个共识算法-the “synod” al翻译 2018-01-15 22:53:20 · 403 阅读 · 0 评论 -
Erlang词法分析器、语法分析器(lexer-leex,yac-yecc)
一、简介一门编程语言的编译器或者解释器通常功能分解为两步: 1、读取源码文件然后分析它的结构 2、处理这些结构,例如生成目标程序lexer和yacc就是能完成第一步以便生成程序段的工具。而第一步的任务又能分为两个子任务: 1、分割源码文件内容为很多tokens(lexer) 2、分析出程序的分级结构(yacc)二、lexer(词法分析工具) lexer的源就是一个正则表达式表,其正则规则符合目标程...原创 2018-04-15 22:24:33 · 1699 阅读 · 0 评论 -
【从零开始构建erlang服务器】-04协议层
一、简介协议的作用很重要,通信协议可以理解为两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常 见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。编码规范就是我们通常所说的编解码,序列化。不光是用在通信工作上,在存储工作上我们也经常用...原创 2018-04-16 21:10:08 · 707 阅读 · 0 评论 -
【从零开始构建erlang服务器】-03用户层和日志
一、简介 上一篇讲了创建服务器项目以及添加ranch网络库,本篇利用网络库创建client socket消息处理的用户层代码以及服务器开发调试运维的日志集成。二、编写用户层代码 前面知道网络层处理客户端连接,以及可以将客户端socket文件描述符授权给其它worker进程来一对一为客户端服务(得益于erlang actor模型的轻进程,可以做到一个连接一个进程),而网络库我们使用的ranch,因此...原创 2018-04-11 21:46:00 · 357 阅读 · 0 评论 -
【从零开始构建erlang服务器】-01网络库
一、简介 网络库是服务器的基础。有了网络库,服务器就能接收外界消息,提供服务。因此开始就从网络库入手。这里先构建基础的TCP通信网络库。至于UDP、WebSocket这些通信手段暂不说。二、gen_tcp erlang的底层是c语言封装的,因此其socket通信在beam层也是经过封装的,更易使用。告别跟系统绑定的select/poll/epoll/iocp/kqueue的...原创 2018-04-05 14:24:01 · 1259 阅读 · 2 评论 -
【从零开始构建erlang服务器】-02构建应用
【从零开始构建erlang服务器】-03构建应用一、简介开始一个erlang服务器应用的构建。项目管理工具使用rebar3。配置方式参考:ubuntu16+ideaIC+rebar3搭建erlang开发环境二、新建应用服务器应用名:erlserver,终端执行:rebar3 new app erlserver===> Writing erlserver/src/erlserver_app...原创 2018-04-05 18:04:26 · 601 阅读 · 0 评论