归档: 2018

理解 Nsq (四)源码解析

Overview上一节我们介绍了 Nsq 的一些基本概念,那么我们从这节开始就单刀直入 Nsq 源码探个究竟。 本节先看 nsqd 的入口源代码文件 nsq/apps/nsqd.go 先看 main 方法吧: 123456func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT,

那些年,我们一起改过的配置文件 -- 常见配置文件类型简介

Overview在程序员日常开发中,配置文件是一个非常常见的需求。 配置文件可以定制程序的逻辑,一段代码生成的程序可以灵活地适应多个需求。几乎所有的程序都需要或者隐形需要配置文件,因为它们需要根据配置文件来决定在代码中使用怎样的逻辑来运行。 对于大部分的程序来说,他们需要的配置文件常常是一个 K-V 类型的结构,可以理解为一个 Key 为字符串, Value 也为字符串的一个 Map。字符串可以被

常见数据库简介

MySQL 派系MySQL在国内来说,MySQL 是一个最常见的数据库了。他是一种关系数据库管理系统(Relational Database Management System:RDBMS),目前由 Oracle 公司维护。特点: 源代码使用 C 和 C++ 编写,性能稳定。 支持多种数据库引擎(MyISAM,InnoDB,Memory,MyRocks etc..)可以满足不同场景下的需要。 I

常用的文件系统简介

文件系统应该是计算机软件当中比较底层的部分,可能很多程序员都不会接触到。今天简单地学习了一下,做下笔记。 FAT 文件系统FAT 文件系统起源于二十世纪七十年代,当时用于 DOS 系统。当时的设计比较简单,后来由于存储媒介的发展渐渐有一些增强的版本出现。所以现在主要包含这这几个版本:FAT8,FAT12,FAT16,FAT32。这几个版本后面带的数字是啥意思呢?其实就是「簇」的编码地址所占用的宽度

理解 Nsq (三)基础概念

上一节中,我们成功编译了 nsq 和对应的基础组件,并使用配套的 cli 工具完成了简单的生产者消费者模型。那么在这一节中,我们就来详细地了解下 nsq 的一些基础概念吧。 本节我们主要来了解 nsq 的一些基础概念。 Featuresnsq 主要有以下功能: 支持分布式的拓扑结构,避免单点 支持无缝水平扩展(没有 broker 的概念) 低延迟(这个主要看benchmark) 负载均衡与消息多

理解 Nsq (二)初体验

上一节已经把 Golang 环境搭好了,这一节可以正常开搞。这一节我打算把 nsq 从源代码编译,然后简单试用下。 Install from source code第一步是下载源代码进行编译。 12345678910$ git clone [email protected]:nsqio/nsq.git $GOPATH/src/github.com/nsqio/nsq$ cd $GOPATH/src/gi

理解 Nsq (一)设置 Golang 开发环境

Nsq 是一个 Golang 实现的消息队列,现在应该特性已经比较稳定了。看了下代码量,还 OK,那么最近开始倒腾倒腾他。 开始倒腾之前,先把环境搭好,那么我来在我的两个主要工作环境上把 Golang 环境搭好。 macOS首先我在公司的电脑的 macOS 系统装上 Golang 吧,直接最新版本开怼:1brew install go 可以说安装是相当傻瓜化了。 准备一个 hello world

多级缓存的设计与实现

Overview 总览在高并发量的后端业务中,多级缓存是一个非常常见的设计。事实上,多级缓存策略在计算机硬件也是普遍存在的。 为什么会有多级缓存?通常缓存都是比原数据要小的,设立缓存的目的很简单:某些数据经常用到,我们不想每次都去最深的地方(这里一般是指数据库)去找,所以我们就在更方便取到数据的地方把这些数据保存起来。 那么,为什么要用多级缓存呢?对于所有的数据来说,并不是每一份数据使用的频率都一

为什么不建议在 Redis 使用大 Key

Preview公司里某位工程师小斌发现在一个 Redis 集群中的 some_big_list 经常出现慢查询,而且 QPS 特别高。初步定位是出现了一个热点的 Key。12newexplore> llen some_big_list500000 上面的命令发现,这个 some_big_list 是一个大 Key,导致 Redis Server 的服务器 CPU idle 很低,结果出现了慢

Code Review 二三事

最近对 Code Review 这套流程有比较多的想法,不吐不快。 Part1Code Review 属于 “结对编程” 的一种实现,而且是一种比较高效的实现。在快手的 Server 端,Code Review 是一个不可或缺的工作流程,主要因为这几个原因: 快手开发节奏很快,但鉴于目前整套自动化测试设施不够完善,可能很多代码修改过后没有经过测试就直接上线了,这非常考验一次性写对代码的能力。 团