- 博客(110)
- 资源 (10)
- 收藏
- 关注

原创 LevelDb实现原理
引言 LevelDb本质上是一套存储系统以及在这套存储系统上提供的一些操作接口。为了便于理解LevelDB的存储结构以及工作流程,我们可以从两个不同的角度来分析一下LevleDb的原理:静态角度和动态角度。静态角度:主要了解系统如何对数据进行存储的,其数据是如何组织管理的;动态角度,主要是了解系统是如何对数据进行操作的,其操作流程是怎么回事,系统是如何运转起来的。LevelDb整体架构及其存储
2017-04-28 17:27:15
1301

原创 Kafka——性能逆天的存在
Kafka——性能逆天的存在(by 刘延允,2016-12-17)0、引言Kafka是LinkedIn开源出来的一款消息服务器,用scala语言实现;这货的性能是百万级的QPS(估计是挂载了多块磁盘),我随便写个测试程序就是十万级。1、Kafka基本概念在Kafka中消息是按照Topic进行分类的;每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理
2016-12-20 11:39:49
16328
3

原创 Binglog格式与主从复制——Mysql
一Mysql Binlog协议格式二主从复制各种文件偏移量说明三通过Binlog恢复数据四通过Relay log恢复数据一个Binlog格式文件,前四个字节是:0xfe62696e;对应0xfe、’b’、’i’、’n’,这是雷打不动的公理。后面是一系列的Binlog Event,每个Event包括Header与Data两部分。Mysql这帮人跟我们一样俗,定义一个消息先定个头、再定一个消息体
2016-11-30 14:07:14
2166

原创 基于MYSQL的Binlog增量数据同步服务
系统工作原理 基于MYSQL日志增量数据同步原理: - 1、DBAsync伪装自己为mysql slave,向mysql master发送dump协议 - 2、mysql master收到dump请求,开始推送binary log给DBAsync - 3、DBAsync解析binary log,将数据改动同步到下游(MQ、DB…)DBAsync工作流程 工作流程: - 1、启动解析配置文
2016-08-10 16:45:31
9494

原创 Mysql主从同步中Binlog Dump线程僵尸问题
Mysql主从同步中Binlog Dump线程僵尸问题问题起因 自己开发程序伪造为mysql的从服务器,不停重连、以及重启后出现如下错误: too many connections(1040) 在主服务上运行:show processlist发现大量Binlog Dump线程 Mysql主从同步机制主库上记录二进制日志,也就是binlog日志。备库将主库的二进制日志复制
2016-07-20 15:32:35
22655
转载 MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适。 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类。 结合实际工作中碰到的问题,以寻找答案的方式来剖解技术,很多时候我们都不是在创造新技术,而是在应用技术。 为了更有效率与效果的用好技术,我们需要了解一些技术的原理与工作方式。 带着问题从使用者的角度去剖析技术原理,并将开源
2017-06-16 10:51:58
878
转载 Rsync同步算法
rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输。rsync中一项与其他大部分类似程序或协定中所未见的重要特性是镜像是只对有变更的部分进行传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。rsync利用由澳洲电脑程式师Andrew Tridgell发明的算法。这里不介绍其使用方法,
2017-05-18 10:14:59
1943
1
原创 Bitcast存储引擎特性
Bitcast存储引擎:由一棵hash tree在内存中管理全量的key,根据key可以获取value在磁盘文件上面的postion,进一步获取value本身的值。写入流程比较简单,顺序写一次磁盘文件,更新hash tree;读取也比较简单,根据key从内存的hash tree中获取value在磁盘上面的位置,然后读取磁盘即可。 数据文件也有像LevelDb数据归并的过程,其过程都是类似于red
2017-05-03 11:17:14
2321
转载 结合Wireshark分析DNS 协议
摘要: 本文简单介绍了DNS协议理论知识,给出URL解析步骤,详细讲述了DNS报文各个字段含义,并从Wireshark俘获分组中选取DNS相关报文进行分析。一、概述1.1 DNS 识别主机有两种方式:主机名、IP地址。前者便于记忆(如www.yahoo.com),但路由器很难处理(主机名长度不定);后者定长、有层次结构,便于路由器处理,但难以记忆。折中的办法
2017-04-07 09:57:12
792
原创 Base64编码规则
Base64编码规则是一种用64个字符来表示任意二进制数据的方法。 平时用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。Base64的原理很简单: 1. 首先,准备一个包含64个字符的数组
2017-04-06 14:34:49
722
原创 Kafka消息队列实现业务端确认的方案
参考TCP协议滑动窗口的方式,实现业务端消息的确认;需要自己维护消费到的位置。 根据Kafka消息队列的两个特性: 1. 每个分区的消息只能被一个消费者消费。 2. 每个分区中消息offset是有序递增的。 每个分区在内存中维护一个相对应的滑动窗口,消息的offset为其序列号;只有小于序列号SEQ1的所有消息都被正确处理,才更新消费位置,并把窗口往后滑动。
2017-02-17 10:28:25
1714
原创 Kafka跨集群同步工具——MirrorMaker
MirrorMaker是为解决Kafka跨集群同步、创建镜像集群而存在的;下图展示了其工作原理。该工具消费源集群消息然后将数据重新推送到目标集群。MirrorMaker使用方式 启动mirror-maker程序需要一个或多个consumer配置文件、一个producer配置文件是必须的其他参数是可选的。 kafka-run-class.sh kafka.tools.MirrorMaker
2017-02-16 17:57:40
13210
原创 Golang RPC调用例子程序(实现超时机制)
package mainimport ( "fmt" "log" "net" "net/rpc" "time")func main() { log.SetFlags(log.Lshortfile | log.Lmicroseconds) log.Println("=======begin====== ") testRpc() ti
2017-02-05 10:54:09
3934
转载 kafka配置文件说明 - server.properties
server.properties中所有配置参数说明(解释)如下列表: 参数 说明(解释) broker.id =0 每一个broker在集群中的唯一表示,要求是正数。当该服务器的IP地址发生改变时,broker.id没有变化,则不会影响consumers的消息情况 log.dirs=/data/kafka-logs kafka数据的存放地址,多个地址的话用逗号分割 /data/kafk
2017-01-20 09:35:33
571
原创 运行中的处理器所处的三种状态--写在2016年最后一贴
做应用层开发的这图都应该看过很多遍了。 1. 最底层是硬件层支撑所有软件层的运行以及特定功能的实现;像CPU、内存、鼠标、键盘、硬盘、光驱、网卡等等。 2. 在硬件之上的是设备驱动程序,用于驱动硬件设备;这一层相当于硬件对应的软件实现。 3. 再往上是操作系统内核层这是操作系统的最核心的部分。通常内核层会实现一套框架便于硬件驱动层的扩展,驱动层可以动态加载与删除;不然插个U盘、放个摄像头重启一
2016-12-30 16:15:15
1927
原创 Mysql 设置所有机器都可访问
GRANT ALL PRIVILEGES ON . TO ‘user’@’%’ IDENTIFIED BY ‘password’ WITH GRANT OPTION; FLUSH PRIVILEGES; 设置用户名为:user,密码为:password的账号可能通过任意一台机器访问数据库
2016-12-27 17:00:17
4886
1
原创 最简单的Redis客户端实现——Golang
使用Golang分析Redis协议,实现一个简单客户端;使用方法简单,Connect完成后直接Write、Read进行操作,或者使用Cmd。可有助于理解Redis协议,其实挺简单的。package redisimport ( "bufio" "errors" "fmt" "io" "net" "strconv" "time")const (
2016-11-30 16:00:40
1594
原创 Go语言string与[]byte类型转化避免拷贝
在Go语言中string类型与[]byte强制类型转化的是后会发生内存拷贝,这是由于这两种类型的特性所决定的; string类型是不允许修改内容,[]byte是可以修改的。下面提供两个函数使用时不会发生内存拷贝吗,但是使用过程中药慎重,确保不会修改底层内容,否则很大可能会导致程序异常import ( "reflect" "unsafe")func String(b []by
2016-11-30 15:39:36
7935
原创 RedisProxy 系统设计与使用说明
RedisCloud是一套基于GO语言实现的Redis分布式解决方案, 对于使用方来说, 使用RedisCloud与使用原生的 RedisServer 没有区别 (有些Redis原生命令在RedisCloud作为命令黑名单不予支持), 上层应用可以像使用单机的 Redis 一样使用多个Redis服务器;RedisCloud会处理请求的转发, 在线扩容、缩容, 以及Redis服务器的主备故障切换等工
2016-11-24 11:39:56
8139
1
原创 GO-log日志封装
Go封装日志: 支持归档输出,一个小时压缩归档一份最多保留三天的日志支持日志级别自定义如果没有指定输出文件默认输出到控制台。支持输出文件名行号,以及时间、日志界别 如: info 10:08:40.826836 handler.go:81 package loggerimport ( "fmt" "log" "os" "os/exec"
2016-08-12 15:23:08
4378
原创 mysqldump 使用方法参数说明
常用用法导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql导出数据库结构(不含数据) mysqldump -u username -p -d dbname > dbname.sql导出数据库中的某张数据表(包含数据) mysqldump -u username -p dbname tablename > ta
2016-08-11 14:12:30
933
原创 基于Redis的分布式锁实现方式
分布式锁在功能上面要满足: 原子性的获取、释放;具有超时机制; 获取、释放的原子性:获取做不到原子可能会导致,多服务同时占有锁。 超时机制:无超时机制可能会导致锁一直不能被释放,比如业务程序获取锁后挂掉了;假如超时机制后也会存在其他隐患,比如业务程序确实需要很长时间处理业务,但是超时时间设置不当,可能会出现同时占有锁的情况。 基于Redis的实现方式:采用Key-Value结构
2016-07-25 16:12:55
794
原创 Linux系统下通过Socket文件描述符寻找连接状态
Proc虚拟文件系统下面有许多数字命名的子目录,这些数字表示系统当前运行的进程号;其中/proc/N/fd目录下面保存了打开的文件描述符,指向实际文件的一个链接。如下:[root@XXXXXXX_10_1_17_138 song_test]# ll /proc/25465/fdtotal 0lrwx------ 1 root root 64 Apr 14 09:36 0 -> /dev
2015-04-14 10:34:36
8891
原创 Redis客户端连接方式Hiredis简单封装使用,连接池、屏蔽连接细节
工作需要对Hiredis进行了简单封装,实现功能:1、API进行统一,对外只提供一个接口;2、屏蔽上层应用对连接的细节处理;3、底层采用队列的方式保持连接池,保存连接会话;4、重连时采用时间戳进行控制,每隔一定时间(3s)重连一次,防止频繁重试造成的不必要浪费。先看一下Hiredis的常用数据结构与API://hiredis/hiredis.h/* Context for
2015-03-17 11:12:10
18482
1
转载 求有环单链表中的环长、环起点、链表长
1.判断单链表是否有环 使用两个slow, fast指针从头开始扫描链表。指针slow 每次走1步,指针fast每次走2步。如果存在环,则指针slow、fast会相遇;如果不存在环,指针fast遇到NULL退出。 就是所谓的追击相遇问题: 2.求有环单链表的环长 在环上相遇后,记录第一次相遇点为Pos,之后指针slow继续每次走1步,fast每次走2步。在下次相遇
2015-03-09 15:11:33
1046
原创 分布式搜索elasticsearch 搜索结果排序不一致性问题
想象这一种情况,如果搜索结果中得分出现相同的情况下:由于搜索会在分片的副本之间均衡的轮询请求,可能会出现请求在不同的副本之间返回的循序不同,从而影响排序结果的稳定性。搜索接口有提供preference参数:curl localhost:9200/_search?preference=xyzabc123。可以使用的参数: _primary,_primary_first,_local,_onl
2015-02-03 10:16:14
9007
原创 Lucene实现自定义分词器(同义词查询与高亮)
今天我们实现一个简单的分词器,仅仅做演示使用功能如下:1、分词按照空格、横杠、点号进行拆分;2、实现hi与hello的同义词查询功能;3、实现hi与hello同义词的高亮显示;MyAnalyzer实现代码:public class MyAnalyzer extends Analyzer { private int analyzerType; public MyAna
2015-01-28 10:12:11
2220
原创 Lucene实现自定义相似度计算公式
假如我们在特殊的应用场景中,需要忽略tf、df所产生的影响,可以如下实现:1、实现自己的相似度计算方式:public class MySimilarity extends DefaultSimilarity { @Override public float tf(float freq) { return 1.0f; } /** Implemented
2015-01-26 10:45:37
4410
转载 推荐系统简介——基于内容的推荐
最近闲下来又开始继续折腾推荐系统了,声明一下,本文只是介绍一下最基础的基于内容的推荐系统(Content-based recommender system)的工作原理,其实基于内容的推荐系统也分三六九等Orz,这里只是简单的较少一下最原始的、最基本的工作流程。基于内容的推荐算法思路很简单,它的原理大概分为3步:1、为每个物品(Item)构建一个物品的属性资料(Item Profil
2015-01-13 09:52:06
1363
转载 推荐系统简介——基于协同过滤的推荐
1、推荐系统简介 个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。 推荐系统主要处理的有两类内容:一个是User,一个是Item。系统的目标也很明确,就是向User推荐Item。 应用了推荐系统的例子有很多,比如:知名的电商:Amazon,全球有名的在线影片租赁商:Netflix,国内的新闻应用:今日头条。2、推荐系统分类2
2015-01-13 09:49:50
1333
转载 elasticsearch集群生态,分片以及水平扩展.
elasticsearch用于构建高可用和可扩展的系统。扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵向扩展也有一定的局限性。真正的扩展应该是横向的,它通过增加节点来传播负载和增加可靠性。对于大多数数据库而言,横向扩展意味着你的程序将做非常大的改动来利用这些新添加的设备。对比来说,Elasticsea
2014-12-02 09:32:06
6791
转载 分布式搜索 Lucene全文检索基本原理
一、总论根据http://lucene.apache.org/java/docs/index.html 定义:Lucene 是一个高效的,基于Java 的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据 和非结构化数据 。结构化数据: 指具
2014-10-15 10:39:32
2824
原创 分布式搜索elasticsearch 索引文档的检索 入门
1、首先将如下数据提交到ES中建立索引{"number":32768,"singer":"杨坤","size":"5109132","song":"今夜二十岁","tag":"中国好声音","timelen":319}{"number":32769,"singer":"汪峰","size":"6001697","song":"我爱你中国","tag":"中国好声音","timelen":3
2014-10-14 17:17:45
3051
原创 分布式搜索elasticsearch 索引文档的增删改查 入门
1、RESTful接口使用方法为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口。RESTful接口URL的格式:http://localhost:9200///[]其中index、type是必须提供的。id是可选的,不提供es会自动生成。index、type将信息进行分层,利于管理。index可以
2014-10-14 15:47:09
46944
1
原创 分布式搜索elasticsearch 环境搭建
1、elasticsearch安装elasticsearch的安装超级easy,解压即用(要事先安装好java环境)。到官网 http://www.elasticsearch.org下载最新版的 elasticsearch 运行包;下载完解开有三个包:bin 是运行的脚本,config 是设置文件,lib 是放依赖的包。plugins 的文件夹,把插件放到这个文件夹
2014-10-14 12:40:17
9821
原创 分布式搜索elasticsearch 基本概念
ElasticSearch官网:http://www.elasticsearch.org/先上一张elasticsearch的总体框架图:ElasticSearch是基于Lucene开发的分布式搜索框架,包含如下特性:分布式索引、搜索索引自动分片、负载均衡自动发现机器、组建集群支持Restful 风格接口配置简单等。下图是ElasticSearc
2014-10-14 11:48:17
8654
原创 使用CURL封装HttpClient
#include #include using std::string;class HttpClient{public: static size_t WriteData(char *data, size_t block_size, size_t block_count, string *response) { if(data == NULL) retu
2014-09-29 16:17:39
6182
转载 淘宝Tair分布式缓存系统 总体结构分析
简介tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, tair 可以配置数据的备份数目, tair自动将一份数据的不同备份放到不同的主机上, 当有主机发生异常, 无法正常提供服务的时候, 其于的
2014-07-15 11:41:13
2662
转载 淘宝Tair分布式缓存系统 内部结构分析
Tair的内部结构内部结构" title="淘宝Tair分布式缓存数据库系统 内部结构" style="margin:0px; padding:0px; border:0px; list-style:none"> 图 1 Tair整体架构图一个Tair集群主要包括client、configserver和dataserver 3个模块。Configserv
2014-07-15 11:39:38
2723
转载 TCP网络流量回放工具TCPReplay使用说明
[摘要]: 本文总结了tcpreplay的安装使用经验. 我是在cygwin上试验的.[目录]:(Created by TxtBrowser) 1. 什么是tcpreplay 2. 安装指南 3. 使用指南 . 3.1 tcpprep(pcap pre-processor) . 3.1.1 根据报文源IP确定client
2014-05-22 09:24:12
42085
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人