如何编写一个分布式数据库

大家好, 我是开源项目 分布式 NewSQL 数据库 TiDB 和 分布式缓存 Codis 的 创始人 刘奇, 之前在京东, 豌豆荚做 infrastructure 相关的事情, 现在在创业 (PingCAP), 方向是分布式数据库. 最近如果有朋友关注开源社区或者HackerNews 的话,可能会发现一个叫 TiDB 的数据库项目吸引了一些眼球(https://github.com/pingcap/tidb ) 。 这是我们开源的第一个东西,短短几天得到了过千Star,特别感谢大家的支持和鼓励...阅读全文

阅读:14968 评论:0

Go语法简略 - 依赖注入

通过对web应用框架背后原理的探索,引入了依赖注入的概念。如果你需要读懂或者写一个框架的话,依赖注入的思想绝对能帮到你。本文记录对依赖注入的探索。 区分依赖和宿主 现在我们把问题简化一下: package main import "fmt" func MethodA(name string, f func(a int, b string)) { fmt.Println("Enter MethodA:", name) f(3030, "zdd") // 给f注入参数 fmt.Println("Ex...阅读全文

阅读:9459 评论:2

Go语言随机测试工具go-fuzz

在Go 1.5发布时,前Intel Black Belt级工程师,现Google工程师Dmitry Vyukov同时发布了Go语言随机测试工具go-fuzz。在 GopherCon2015大会上,Dmitry Vyukov在其名为“[Go Dynamic Tools]”的presentation中着重介绍了go-fuzz。 go-fuzz是一款随机测试(Random testing)工具。对于随机测试想必很多人都比较陌生,我也不例外。至少在接触go-fuzz之前,我从未在golang或其他编程语...阅读全文

十二月 8, 2015 bigwhite
阅读:5294 评论:1

Go成功的项目

nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者skynet:分布式调度框架Doozer:分布式同步工具,类似ZooKeeperHeka:mazila开源的日志处理系统cbfs:couchbase开源的分布式文件系统tsuru:开源的PAAS平台,和SAE实现的功能一模一样groupcache:m...阅读全文

2016-03-16 21:58 findumars
阅读:4740 评论:0

Golang优秀开源项目汇总(持续更新。。。)

Golang优秀开源项目汇总(持续更新。。。) 我把这个汇总放在github上了, 后面更新也会在github上更新。 https://github.com/hackstoic/golang-open-source-projects 。 欢迎fork, star , watch, 提issue。 资料参考来源:http://studygolang.com/projects 监控系统 序号 名称 项目地址 简介 1 OpenFalcon http://github.com/open-falcon/...阅读全文

2016-07-23 23:55 hackstoic
阅读:6154 评论:0

Canonical 用 Go 做了这五个超酷的项目

前不久,Google 的 Go 问鼎 TIOBE 排行榜,成为 2016 年年度编程语言。Go 因其易学性及务实性受到大家的喜爱。抛开长篇累牍的理论,Go 更注重的是实践经验,因此越来越多的用户将其应用到工业环境中。在 Canonical 中也一样!作为 Go 的支持者,我们用 Go 做了五个超酷的项目: 1、Juju Juju 堪称是“DevOps工作经验的结晶”,能使用 Charms 将应用程序体系结构部署到 EC2,OpenStack,Azure,HP 数据中心,甚至是基于 Ubuntu ...阅读全文

2017-01-25 01:00:09 编辑部的故事
阅读:5088 评论:0

Golang包管理工具Glide,你值得拥有

“依赖地狱”是每个程序员在成长之路上都会面临的情况,首先我们通过语义化版本来控制软件的版本,然后在我们的项目里通过指定软件版本来达到控制依赖的目的。 如:你的项目A依赖多个项目B1,B2,B3,而B1,B2,B3又依赖着其它项目C1,C2...。一个项目依赖这多个项目,当项目C1修复BUG版本发生变化,如果A依旧使用旧版本,势必引起未知的问题。所以,你需要意识到包依赖管理的重要性。 在Go语言中,我比较推荐大家使用Glide作为包管理器。它能够自动识别Godeps的包管理,十足的很方便。本节介绍...阅读全文

2017.03.22 23:43 陈_在路上
阅读:1336 评论:0

老司机带你用 Go 语言实现 MapReduce 框架

老司机带你用 Go 语言实现 MapReduce 框架  MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。简而言之,就是将任务切分成很小的任务然后一个一个区的执行最后汇总,这就像小时候我们老师经常教育我们一样,大事化小,小事化了(瞬间感觉那时候老师好言简意赅啊!!!)思想就这么一个思想,那么按照这个思想在现代软件定义一切的世界里面,我们怎么运用这样的方式来解决海量数据的处理,这篇就告诉你一个这样的一个简单的实现使用 Go 语言。 上车了  简单...阅读全文

阅读:2584 评论:0

golang中开启gctrace

如何开启打印gc信息 只要在程序执行之前加上环境变量GODEBUG gctrace =1 ,如: GODEBUG gctrace =1 ./xxxx.exe or GODEBUG gctrace =1 go run main.go 程序将会显示gc信息,如下 gc 1 @2.104s 0%: 0.018+1.3+0.076 ms clock, 0.054+0.35/1.0/3.0+0.23 ms cpu, 4->4->3 MB, 5 MB goal, 4 P gc 2 @2.241s 0%: 0...阅读全文

阅读:5118 评论:6

Golang gRPC实践 连载五 拦截器 Interceptor

Interceptor grpc服务端提供了interceptor功能,可以在服务端接收到请求时优先对请求中的数据做一些处理后再转交给指定的服务处理并响应,功能类似middleware,很适合在这里处理验证、日志等流程。 在自定义Token认证的示例中,认证信息是由每个服务中的方法处理并认证的,如果有大量的接口方法,这种姿势就太蛋疼了,每个接口实现都要先处理认证信息。这个时候interceptor就站出来解决了这个问题,可以在请求被转到具体接口之前处理认证信息,一处认证,到处无忧,看代码吧,修改...阅读全文

2017-04-14 14:00:40 徐学良
阅读:4178 评论:0

Golang gRPC实践 连载六 内置Trace

内置Trace grpc默认提供了客户端和服务端的trace日志,可惜没有提供自定义接口,当前只能查看基本的事件日志和请求日志,对于基本的请求状态查看也是很有帮助的,客户端与服务端基本一致,这里已服务端开启trace为例,修改hello项目的server代码: server/main.go package main import ( "net" "net/http" pb "git.vodjk.com/go-grpc/example/proto" // 引入编译生成的包 "golang.org/...阅读全文

2017-04-14 14:00:41 徐学良
阅读:2181 评论:0

用Go语言写一个Windows的外挂 (上)

本人在一家互联网金融公司上班,对于一家互联网金融公司,最基本的功能就是客户入金和出金,而出金的稳定性是很重要的,出金不畅容易导致投资人恐慌,本文讲的是出金,出金接口我们对接的是招商银行的银企直联系统,那么银企直连系统是一个什么样的程序呢? 没错,这个程序是运行在Windows上的,并且需要插入USBKey才能正常工作,这就意味着,不能简单的使用命令行进行运维管理。 看到这里,做运维的同学的内心应该和我一样是崩溃的。。 跟大家解释一下,这个服务是做什么的,大家可以把这个程序当成是我们的业务系统和招...阅读全文

2017-05-22 11:00:36 ZhengXujin
阅读:11856 评论:1

golang实现dns域名解析(一)

本文将详细讲解如何用go语言一步一步实现dns域名解析的过程,并简单介绍点dns有关的知识,直接开始正题吧。 首先我们要了解dns解析的过程,没有了解的请看这里DNS入门(转)很详细。扫盲结束后,我们需要了解下dns报文格式,知道了报文的格式是怎样的,才可以写代码构造dns请求包: dns请求和应答都是用相同的报文格式,分成5个段(有的报文段在不同的情况下可能为空),如下: Header段是报文的头部,它定义了报文是请求还是应答,也定义了其他段是否需要存在,以及是标准查询还是其他。 Header...阅读全文

阅读:4468 评论:0

使用golang进行证书签发和双向认证

前言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。证书签发涉及到了非对称加密方面的知识,这里介绍使用golang中的x509标准库进行证书自签发,还有证书签发后如何使用golang进行双向认证. 自签发证书 生成根证书 根证书是CA认证中心给自己颁发的证书,是信任链的起始点.这里我们自己做CA使用openssl命令来生成根证书. 首先生成私钥 openssl genrsa -out key.pem 2048 然后根据私钥提取公钥 openssl rsa -in...阅读全文

2017-06-05 23:06:14 pinecone
阅读:8328 评论:0

记一次获得3倍性能的go程序优化实践,及on-cpu/off-cpu火焰图的使用

先把结论列在前面: Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。 on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成一张火焰图比较繁琐(尤其是off-cpu图),但绝对值得拥有! 之前一直使用Logstash作为日志文件采集客户端程序。Logstash功能强大,有丰富的数据处理插件及很好的扩展能力,但由于使用JRuby实现,性能...阅读全文

阅读:4843 评论:4

cosmos tendermint irisnet 的amino编解码解析

# amino编解码,加解密 --- ## amino编解码 amino编解码可以称之为protobuf3的一次升级,再protobuf3的基础上添加了对`interface`的直接支持,也就说:可以直接把序列化好的数据unmarshal到一个接口对象中,但是这需要把定义的`interface`和实现`interface`的对象事前注册到amino的编解码对象中。具体例子如下: ``` cdc := amino.NewCodec() cdc.RegisterInterface...阅读全文

阅读:1593 评论:0

从简历被拒到收割今日头条offer,我花了一年时间

一、印象中的头条 1.老板张一鸣跟我是福建老乡,龙岩市在我朋友说来就是山沟沟,能走出美团王兴和头条张一鸣让我卯足了去龙岩吃特产老鼠干的欲望。 2.给的钱多,笔试也贼难。参加过头条笔试的同学都知道,头条笔试可以笔试三次,就是不论你有没有参加都有三次机会。笔试就5道算法题,两个小时,去年第一次看到算法题就自闭了,第一次挂了。第二次又很认真地做,做到一半放弃了。没过几天又邀请我做第三次,有一种强行被侮辱的感觉。 3.内推被拒。正如我标题所说,简历被拒。去年3月份在知乎上看到一个头条大佬说可以内推春季实...阅读全文

2019.07.16 12:00 Java高级架构
阅读:6388 评论:0

用golang写一个语言(编译器,虚拟机)

github: https://github.com/elvin-du/tinyscript 整个项目包括三个东西: 1. 创建了一个自己的语言 2. 编译器 3. 虚拟机 golang实现的一个编译器,用来编译一个自己创建的语言(用来玩的),最后写了一个自定义虚拟机用来运行自定义语言。 ## 语言介绍 为了跨平台(其实是为了方便开发 ^ ^),所以这个语言没有静态编译成硬件指令集,最后的机器码是我自己的定义的,和MIPS类似的(其实就是一个mips子集)虚拟...阅读全文

阅读:1967 评论:0

Go语言学习 - Chan的工作原理

我们创建了一大堆线程, 现在我们想要实现线程间的同步, 这其中的关键就是chan(通道)的使用, 如果没有通道, 你应该怎么去做线程间同步呢? time.Sleep吗? Introduction type hchan struct { dataq_size uint // 缓冲槽大小 buf unsafe.Pointer // 缓冲槽本体 elem_type *_type // 槽内数据类型 } 复制代码 缓冲槽的工作方式就是上图那样, 每当你往通道里写消息, 消息会先存到缓冲槽里, 而后才被取...阅读全文

2020年07月08日 xiaohan.liang?
阅读:640 评论:0

谈谈自己对GO的Mutex的理解

目前GO已经更新到了1.14的版本咱们一般人如果直接去看mutex的源码的话,其实是比较难理解为什么写成了现在这个样子,尤其是加锁里面的各种逻辑判断太多了,各种位运算一脸懵逼,其实我们只要掌握它最初的设计思想,那么后面新增的逻辑,理解起来都很简单了。 Mutex最初版本 Mutex第一版代码加上注释不过才109行。非常精简,下面介绍一下我对第一版Mutex源码的理解 // Mutex有state和sema两个成员变量,这一点是在1.14没有变化的 // 其中 state 字段代表当前锁的状态,s...阅读全文

2020-07-24 10:32:33 iuoui
阅读:705 评论:0