关闭

[置顶] 深入理解Go Channel

Golang使用Groutine和channels实现了CSP(Communicating Sequential Processes)模型,channles在goroutine的通信和同步中承担着重要的角色。在GopherCon 2017中,Golang专家Kavya深入介绍了 Go Channels 的内部机制,以及运行时调度器和内存管理系统是如何支持Channel的,本文根据Kavya的ppt学...
阅读(400) 评论(0)

[置顶] 再读分布式一致性算法Raft论文

Raft是一个管理日志副本一致性的算法。相比Paxos结果一样,并且一样高效,但是理解起来更加的容易。Raft将一致性的主要元素分离开来,比如leader选举,log 复制,安全等。同时,也提供了一个新的机制实现cluster membership改变,其使用多数的原则来保证安全性。一致性算法一致性算法的意义就是保证一致性的一组机器能够在其部分成员出现故障的时候依然能够存活下来(提供服务)。在Raf...
阅读(993) 评论(1)

[置顶] 对象存储对比 - Haystack

经过一段时间的调研,对分布式对象系统有了一点浅显的认识,暂不谈和文件系统的区别(其实还是有点傻傻分不清),姑且认为对象存储和文件系统最大的区别就是API,文件系统提供了完整POSIX语义,往往具有层次化的目录结构,对文件可以进行精细的操作(open, read, write, seek, delete等),相对会复杂一些。相比之下,对象存储就简单的多,对象本义是**B**inary **L**arg...
阅读(137) 评论(0)

[置顶] SeaweedFS索引-CompactMap

SeaweedFS提供了几种不同的needle索引策略,包括memory, btree, blotdb, leveldb四种,其中默认的是memory,也是其内部唯一自己实现的一种索引,btree使用google的btree开源实现,boltdb和leveldb都依赖一个db.memory的索引实现,使用了一个叫CompactMap(这是作者自己起的名)的数据结构。本文后面将会重点介绍compact...
阅读(750) 评论(0)

一致性哈希算法

前面专门介绍过几种常见的数据分片(Sharding),主要包括范围分片(Range)和哈希(Hash)分片两种大的策略,其中哈希分片最简单的Round Robin方法(直接按照机器数取模)存在一个明显的缺点,当机器数增加或者减少的时候,所有的数据都要进行重新的哈希分配。这个问题的本质原因是因为机器和数据哈希分布之间强耦合,因此针对这个缺陷主要有两个解决方案一种是引入虚拟桶的概念,分两步映射(key-...
阅读(309) 评论(0)

操作系统页表管理

原文地址:http://kdf5000.com/2017/03/12/操作系统页表的管理/学过操作系统的都知道,在操作系统中存在一个虚拟内存的概念,它用于内存的管理,使得应用程序认为它有一段连续的内存,大大地简化了程序员码代码的难度。程序员只用关注在这个连续的虚拟内存段中怎么使用内存,不用关心在物理内存中到底用那一段内存,进程运行的时候操作系统会自动进行映射。操作系统是怎么做到的呢?实际上操作系统为...
阅读(544) 评论(0)

mmap内存映射

内存映射是个很有用,也很有意思的思想。我们都知道操作系统分为用户态和内核态,用户态是不能直接和物理设备打交道的,如果想把硬盘的一块区域读到用户态,则需要两次拷贝(硬盘->内核->用户),但是内存映射的设计只需要发生一次的拷贝,大大的提高了读取数据的效率。那么内存映射的原理和内核是如何实现的呢?因为内存映射涉及到虚拟内存的管理,虚拟内存到物理内存的映射,因此在详细介绍内存映射前先普及(回忆)一下相关的...
阅读(348) 评论(0)

Golang RPC性能测试

最近刚好要使用Golang的RPC,因此对Golang标准库的RPC进行了一下测试,看看其性能到底如何。RPC服务端和客户端的实现完全使用RPC的net/rpc标准库,没有经过特殊的优化,主要针对下面三个场景进行测试。测试之前需要先说明一下,Go的rpc连接是支持并发请求的,就是说一个一个连接可以并发的发送很多个请求,不像http协议一问一答的模式。测试环境操作系统:Centos 6.8 (Linu...
阅读(649) 评论(0)

使用Python和BitTorrentSync定期给Kindle推送电子书

Kindle伴侣最近发现一个很好用的Kindle电子书分享网站Kindle伴侣,资源丰富,除了提供各种热门图书免费下载,还提供了很多关于Kindle的使用技巧,里面个人最喜欢的功能就是每周一书,使用BitTorrent每周自动同步热门电子书。使用的是著名的同步软件Resilio Sync, 最开始是在自己电脑上安装了软件同步,但是要一直开着,感觉好麻烦,有时候电脑还要关了,影响同步。刚好手里有个闲置...
阅读(785) 评论(0)

面向HBase的内存key-value缓存的实现

0x01 背景之所以要实现这个缓存主要原因如下(但是由于不是实际业务场景需求,所以可能不太准确,也可能不存在这个需求): * 非结构化数据的爆炸式增长 * 处理速度的要求越来越高 * HBase是面向硬盘的 * 内存容量越来越大 * 热点数据可以在内存放下0x02 设计方案通常的要实现缓存,主要是在有两个大方向实现,一个是在客户端实现,另一个时在服务端实现 * 客户端实现 - 修改H...
阅读(4361) 评论(0)

基于docker的hadoop分布式集群

Hydra-hadoop项目地址:https://github.com/KDF5000/hydra-hadoop 使用docker在单机部署hadoop和hbase的分布式环境,本项目具有一下特征: * 使用serf和dnsmasq 作为集群节点管理和dns解析 * 可以自定义集群hadoop和hbase的配置,配置完后只需重新build镜像即可 * ssh远程登录集群节点容器项目目录ser...
阅读(678) 评论(0)

二分k-均值算法

前面介绍过k-means聚类算法,通过不断的更新簇质心直到收敛为止,但是这个收敛是局部收敛到了最小值,并没有考虑全局的最小值.那么一个聚类算法怎么才能称得上效果好呢?要想评价一个算法的好坏,首先需要有一个标准,这也是我们设计算法的时候要首先考虑的,我们设计算法的目的是什么,设计的算法要达到的什么效果,这样才能明确设计算法的目标.一种度量聚类算法效果的指标是SSE(Sum of Squard Erro...
阅读(1506) 评论(0)

回溯法解0/1背包问题

背包问题(Knap sack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,我们如何选择,才能使得物品的总价值最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。0/1背包问题是背包问题的一个特例,在选择物品时只有两种选择,选或不选.解决0/1背包问题就是一个寻找最优解的过程,可以使用动态规划的方法解决.当然最简单...
阅读(484) 评论(0)

k-means聚类算法

k-means聚类算法 优点: 容易实现 缺点: 可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型: 数值型护具 k-均值是发现给定数据集的k个簇的算法.k有用户决定.每一个簇通过旗质心,即簇中所有点的中心描述. 工作流程: 首先随机确定k个初始点作为其质心.然后讲护具集中的每个点分配到一个簇中,也就是分配到距其最近的质心对应的簇.这一步完成时后,每个簇的质心更新为该簇...
阅读(791) 评论(0)

归并排序和快速排序比较

1 . 归并排序和快速排序1.1 归并排序归并排序的思想就是讲数组分为两部分然后对两部分进行排序,然后讲排序后的两部分进行合并,主要的难度在于合并部分,合并的时候需要重新开一个临时数组保存合并的结果,然后再复制到原数组. 下面是归并排序的python实现# coding:utf-8 __author__ = 'devin'''' data: array low,high: index of arr...
阅读(430) 评论(0)
54条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:120489次
    • 积分:1698
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:3篇
    • 译文:0篇
    • 评论:10条
    最新评论