HonorJoey Blog

Thinking will not overcome fear but action will.

Kafka(二)-Kafka入门

消息队列之Kafka第二篇

安装与配置 本节详细介绍 Kafka 运行环境的搭建,为了节省篇幅,本节的内容以 Linux CentOS 作为安装演示的操作系统,其他 Linux 系列的操作系统也可以参考本节的内容。具体的操作系统的信息如下: [root@node1 ~]# uname -a Linux node1 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37...

Kafka(一)-初始Kafka

消息队列之Kafka第一篇

初识Kafka Kafka 起初是 由 LinkedIn 公司采用 Scala 语言开发的一个多分区、多副本且基于 ZooKeeper 协调的分布式消息系统,现已被捐献给 Apache 基金会。目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera、Storm、Spark...

分布式-Raft算法(二)如何复制日志

分布式协议与算法之Raft算法第二篇

介绍 在 Raft 算法中,副本数据是以日志的形式存在的,领导者接收到来自客户端写请求后,处理写请求的过程就是一个复制和应用(Apply)日志项到状态机的过程。 如何理解日志 副本数据是以日志的形式存在的,日志是由日志项组成,日志项究竟是什么样子呢?其实,日志项是一种数据格式,它主要包含用户指定的数据,也就是指令(Command),还包含一些附加信息,比如索引值(Log index)、...

分布式-Raft算法(三)如何解决成员变更问题

分布式协议与算法之Raft算法第三篇

介绍 关于成员变更,不仅是 Raft 算法中比较难理解的一部分,非常重要,也是 Raft 算法中唯一被优化和改进的部分。比如,最初实现成员变更的是联合共识(Joint Consensus),但这个方法实现起来难,后来 Raft 的作者就提出了一种改进后的方法,单节点变更(single-server changes)。 配置 是集群各节点地址信息的集合。比如节点 A、B、C 组成的集群,...

分布式-Raft算法(一)如何选举领导者

分布式协议与算法之Raft算法第一篇

介绍 Raft 算法属于 Multi-Paxos 算法,它是在兰伯特 Multi-Paxos 思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多。 除此之外,Raft 算法是现在分布式系统开发首选的共识算法。绝大多数选用 Paxos 算法的系统(比如 Cubby、Spanner)都是在 Raft 算法发布前...

分布式-Paxos算法(二)Multi-Paxos

分布式协议与算法之Paxos算法第二篇

介绍 Basic Paxos 只能就单个值(Value)达成共识,一旦遇到为一系列的值实现共识的时候,它就不管用了。虽然兰伯特提到可以通过多次执行 Basic Paxos 实例(比如每接收到一个值时,就执行一次 Basic Paxos 算法)实现一系列值的共识。这就出现了Multi-Paxos。 兰伯特提到的 Multi-Paxos 是一种思想,不是算法。而 Multi-Paxos 算法...

分布式-Paxos算法(一)Basic-Paxos

分布式协议与算法之Paxos算法第一篇

介绍 提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代名词,因为当前最常用的一批共识算法都是基于它改进的。比如,Fast Paxos 算法、Cheap Paxos 算法、Raft 算法等等。而很多同学都会在准确和系统理解 Paxos 算法上踩坑,比如,只知道它可以用来达成共识,但不知道它是如何达成共识的。 兰伯特提出的 Paxos 算法包含 2 个部...

HTTP状态码

介绍HTTP协议的状态码

状态码 RFC 标准把状态码分成了五类,用数字的第一位表示分类,而 0~99 不用,这样状态码的实际可用范围就大大缩小了,由 000~999 变成了 100~599。这五类的具体含义是: 1××:提示信息,表示目前是协议处理的中间状态,还需要后续的操作; 2××:成功,报文已经收到并被正确处理; 3××:重定向,资源位置发生变动,需要客户端重新发送请求; 4××:客户端错...

HTTP传输大文件的方法

HTTP协议之传输大文件的方法

四种方法 数据压缩,分块传输,范围请求,多段数据 数据压缩 通常浏览器在发送请求时都会带着“Accept-Encoding”头字段,里面是浏览器支持的压缩格式列表,例如 gzip、deflate、br 等,这样服务器就可以从中选择一种压缩算法,放进“Content-Encoding”响应头里,再把原数据压缩后发给浏览器。 不过这个解决方法也有个缺点,gzip 等压缩算法通常只...

Golang多版本管理神器gvm

gvm安装和遇到的问题解决

缘起 最近编译 GRPC 遇到了点坑,编译各种报错,经搜索调研发现用 mod 模式编译时对版本要求1.13及以上,。比如我的 go1.12.4 就无法编译,必须得 go1.13.xx 版本才能编译。为了解决这种尴尬的场景只能再在主机安装个 go1.13.xx 版本,那么有没有什么优雅的方式来实现本机多版本 Golang 版本的管理呢,能很方便的进行不同版本的切换,这也是本文的目的,推荐一款...