分布式事务一致性方案

http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性...阅读全文

2017.03.09 00:09* jey恒
阅读:11256 评论:0

go-redis源码分析(一):redis协议

redis.v5是一款基于golang的redis操作库,封装了对redis的各种操作 源码地址是https://github.com/go-redis/redis Redis客户端的工作本质上是基于tcp协议向redis server传输符合redis协议的命令请求,并根据redis协议解析server端的返回值我们可以通过telnet工具来模拟这一过程,例如ping命令我们可以这样发送请求 $ telnet 127.0.0.1 6379 Trying 127.0.0.1... Connect...阅读全文

2017.03.09 04:09 蔡健雅的红色高跟鞋
阅读:2496 评论:0

gRPC服务发现&负载均衡

gRPC服务发现&负载均衡 构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案: 1、集中式LB(Proxy Model) 在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起请求,由LB以某种策略,比如轮询(Round-Robin)做负载均衡...阅读全文

2017-03-13 15:01:10 SOFTFN
阅读:7474 评论:0

一起用golang之Go程序的套路

系统性地介绍golang基础的资料实在太多了,这里不再一一赘述。本文的思路是从另一个角度来由浅入深地探究下Go程序的套路。毕竟纸上得来终觉浅,所以,能动手就不要动口。有时候几天不写代码,突然间有一天投入进来做个东西,才恍然发觉,也只有敲代码的时候,才能找回迷失的自己,那可以忘掉一切的不开心。 Hello world package main import ( "fmt" ) func main() { fmt.Println("hello world") } go程序结构从整体上来说就是这样的,...阅读全文

2017.03.13 21:44 山楂大卷
阅读:2373 评论:1

基于consul构建golang系统分布式服务发现机制

在分布式架构中,服务治理是一个重要的问题。在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极其麻烦且容易出错。 之前在一个C/C++项目中,采用ZooKeeper进行服务治理,可以很好的维护服务之间的关系,但是使用起来较为麻烦。现在越来越多新的项目采用consul进行服务治理,各方面的评价都优于ZooKeeper,经过几天的研究,这里做一个总结。 zookeeper和consul比较 开发语言方面,zookeeper采...阅读全文

2017.03.16 13:41 失去梦想的咸鱼
阅读:1584 评论:0

动手实现一个JSON验证器

最近做毕设的时候,有个功能需要验证JSON字符串的合法性,最简单的做法是直接用Go的第三方JSON库做一个反序列化,但这样做给我有种杀鸡用牛刀的感觉,毕竟我不需要真正的反序列化它,单纯的验证和反序列化的性能差距直观感觉上还是比较大的。 分析 既然要验证JSON的有效性,那么必然需要清楚的知道JSON格式,这个在JSON官网已经给我们画出来了: 从官方的图上面可以看出,JSON的组成一共有五部分: object: 以左大括号({)开头表示对象的开始。 array: 以左中括号([)开头表示数组的开...阅读全文

2017-03-20 15:01:24 疯狂的爱因斯坦
阅读:1172 评论:0

Excelize - Golang 操作 Office Excel 文档类库

Excelize 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于微软的 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。 安装 go get github.com/Luxurioust/excelize 创建 XLSX package main import ( "fmt" "os" "github....阅读全文

2017-03-02 18:26:19 xuri
阅读:12325 评论:0

Mac上安装Go环境和VS Code

1.下载SDK 到https://golang.org下载对应的SDK(需要翻墙) Mac版本如下: 1.1 安装版:go1.8.darwin-arm64.pkg下载完成之后,直接双击打开安装即可1.2 压缩版:go1.8.darwin-arm64.tar下载完成后需要解压,然后自己移动到要存放的路径下,并且配置环境变量等信息。 2.安装Go环境 选择1.8版本的安装版,双击安装。安装完成后,打开terminal ,输入如下命令,查看安装的版本: go version 3.配置环境变量 打开te...阅读全文

2017.03.24 12:20 许瘦子来世
阅读:3871 评论:1

Go语言中优雅停止的Once&Done

简述一个WebServer中,我们往往需要在服务停止前等待已有的任务完成,避免强制当断打断了业务流程,导致事务性操作被意外破坏。优雅停止中还有一个超时的问题,但不在本文讨论范围,就跳过咯。也就是常说的柔性关闭,也有说是优雅中止的。golang通过chan的设计,可以很方便的实现优雅中止,但实际运用中却也有些坑要小心。业务模型Server接收Client投递的Task,并将Task排入Queue逐个完成,假设Task都是一些耗时任务,可能有以下原型(伪代码):var server Serverva...阅读全文

2017-03-30 《三分热度》
阅读:6538 评论:2

Windows下Sublime Text 安装ctags插件支持golang

ctags简介 ctags可以对编程语言的源文件结构构建索引,实现快速的跳转,包括对象、变量、方法等。 Windows下安装ctags 下载安装包 解压安装包,将ctags.exe文件拷贝到C:/Windows/System32目录下 在cmd下执行命令ctags --version验证安装是否成功 Sublime Text安装ctags插件 在窗口选择Preferences -> Package Control -> Install Package 在输入框中输入ctags搜索待安装插件,选择...阅读全文

阅读:1112 评论:0

和我一步步部署 kubernetes 集群

​本系列文档介绍使用二进制部署 kubernetes 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群;在部署的过程中,将详细列出各组件的启动参数,它们的含义和可能遇到的问题。部署完成后,你将理解系统各组件的交互原理,进而能快速解决实际问题。所以本文档主要适合于那些有一定 kubernetes 基础,想通过一步步部署的方式来学习和了解系统配置、运行原理的人。集群详情Kubernetes 1.6.1Docker 17.04.0-ceEtcd 3.1.5Flanneld 0.7 v...阅读全文

2017-04-13 18:30:25 osnull
阅读:1552 评论:0

golang crontab

注册任务到调度器里,当任务要执行的时候会使用goroutines调用,这样每个任务都不会发生阻塞。 Golang不仅仅是兼容了linux标准的crontab格式,而且扩展了秒。也就是说正常的crontab是 分 时 小时 月 星期,而robfig cron是 秒 分 时 日 月 星期。 c := cron.New() c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") }) c.AddFunc...阅读全文

2017-04-24 21:00:30 zhangzhihai
阅读:2546 评论:0

Golang发送邮件

package main import ( "bytes" "crypto/tls" "encoding/base64" "errors" "fmt" "io" "mime" "mime/multipart" "mime/quotedprintable" "net/smtp" "net/textproto" "os" "path/filepath" "strings" ) const MemMaxSize = (1 << 20) * 10 func SendMail(from, to, pw, ...阅读全文

2017-04-25 15:00:24 路人甲777
阅读:2254 评论:0

Golang实现snowflake算法(分布式唯一id生成器)

package main import ( "errors" "fmt" "sync" "time" ) const ( twepoch = int64(1417937700000) // 默认起始的时间戳 1449473700000 。计算时,减去这个值 DistrictIdBits = uint(5) //区域 所占用位置 NodeIdBits = uint(9) //节点 所占位置 sequenceBits = uint(10) //自增ID 所占用位置 /* * 1 符号位 | 39 时...阅读全文

2017-04-25 15:00:25 路人甲777
阅读:9316 评论:0

第三届 GopherChina 大会

上周末参加 GopherChina 第三届大会,感受不错。经过三年时间,Go 的发展非常火爆。会议规模从原来的几百人到上千人,还有很多站在座位两侧听的朋友。大会的内容也是从 Go 本身,到架构,到容器等相关领域都有涉及,可以说干货不错。办大会大会是一件辛苦事,非常感谢 Astaxie 一直以来的努力。讲好一个主题,也会需要很多技巧的,也非常感谢参与大会的各个讲师。言归正传,来聊聊大会的内容。 语言上 的 Go 每种语言都有自己的特色,Go 也不例外。学习 Go 的时候,难免会带入别的语言经验,造...阅读全文

2017-05-01 22:48:37 傅小黑
阅读:1768 评论:1

go依赖管理-govendor

Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。 下面简要介绍一个我在项目中用到的 -- govendor。该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。对于 govendor 来说,依赖包主要有以下...阅读全文

阅读:41332 评论:3

golang使用protobuf

为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用 跟Json相比protobuf性能更高,更加规范 编解码速度快,数据体积小 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了 但也失去了一些便利性 改动协议字段,需要重新生成文件。 数据没有可读性 安装 在go中使用protobuf,有两个可选用的包gopro...阅读全文

2017-05-03 17:00:46 花间隐虎
阅读:3387 评论:0

堆实现的Top-K算法,元素流中筛选极值集合-博文

package main //@description 元素流中获取Top-K的元素,元素需实现Comple接口 //@author chenbintao //@data 2017-03-31 14:19 初稿 // 2017-03-31 17:44 编译验证通过 import ( "fmt" "log" ) //元素接口设计,参与排序的元素,需要实现接口内的方法 type ELEM interface { //比较当前元素与o元素大小,true:大于o...阅读全文

2017-05-05 12:42:19 hansegod
阅读:1515 评论:0

采用interface实现的限时调用方法-博文

在实时性要求高的工程项目中,对于方法执行的时间有较高的要求,本示例程序,实现了一种安全的传入任意参数的方法限时调用工具类,能执行方法的最大容忍运行时间,保证服务不超时。//@description 超时运行方法,限制方法的运行时间 // 需要实现抽象接口AppRuning的Run方法 // 调用时TimeOutRun(timeout, fun, args...) // timeout超时时间(ms),fun实现Run()的回调方法,args...为方法调用参数列表 //...阅读全文

2017-05-05 12:43:19 hansegod
阅读:968 评论:1