最新 | 最热门 | 最高评价

+0  [转]通过 raft 的 leader lease 来解决集群脑裂时的 stale read 问题

Tag: Go
鸟窝 发于 2017年05月08日 16:36 | 点击: 389 | 展开摘要
PingCap联合创始人、CTO 黄东旭写的一篇解决Raft网络分区的一种方案: 通过 raft 的 leader lease 来解决集群脑裂时的 stale read 问题。本文转载之。

问题: 当 raft group 发生脑裂的情况下,老的 raft leader 可能在一段时间内并不知道新的 leader 已经被选举出来,这时候客户端在老的 leader 上可能会读取出陈旧的数据(stale read)。 比如,我们假想一个拥有 5 个节点的 raft group:

查看全文: http://www.udpwork.com/item/16257.html

+0  [转]Golang调度器源码分析

Tag: Go
鸟窝 发于 2017年05月04日 19:37 | 点击: 498 | 展开摘要
原文: Golang调度器源码分析, 作者: 无心之祸

为什么Golang需要调度器?

Goroutine的引入是为了方便高并发程序的编写。 一个Goroutine在进行阻塞操作(比如系统调用)时,会把当前线程中的其他Goroutine移交到其他线程中继续执行, 从而避免了整个程序的阻塞。

由于Golang引入了垃圾回收(gc),在执行gc时就要求Goroutine是停止的。通过自己实现调度器,就可以方便的实现该功能。 通过多个Goroutine来实现并发程序,既有异步

查看全文: http://www.udpwork.com/item/16252.html

+0  [译]Go 调度器: M, P 和 G

Tag: Go
鸟窝 发于 2017年05月04日 19:27 | 点击: 421 | 展开摘要
这是另一篇关于Go调度器(scheduler)的文章。 原文: GO SCHEDULER: MS, PS & GS by Uber工程师 Povilas。

网上已经有很多关于Go调度器的文章了, 比如Golang调度器源码分析,多看一些,可以加深记忆,也可以对比查看文章中是否有不准确的地方,更全面的了解Go的调度器。

我决定深入了解Go的内部机制, 因为很长时间没人写关于Go scheduler的文章了, 我觉得这是一个很有趣的知识点,所以让我们开始吧。

基础知

查看全文: http://www.udpwork.com/item/16253.html

+0  Go HTTP Redirect的知识点总结

Tag: Go
鸟窝 发于 2017年04月20日 14:10 | 点击: 411 | 展开摘要
HTTP 规范中定义了返回码为 3xx 代表客户端需要做一些额外的工作来完成请求,大部分3xx用来做转发(redirect)。

状态码的详细说明可以参照规范或者 wikipedia、维基百科, 以下是代码的简短介绍。

300 Multiple Choices: 返回多个可供选择的资源

301 Moved Permanently: 请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一

302 Found: 请求的资源现在临时从不

查看全文: http://www.udpwork.com/item/16218.html

+0  gRPC的那些事 - interceptor

Tag: gRPC | Go
鸟窝 发于 2017年04月17日 13:41 | 点击: 519 | 展开摘要
gRPC-Go 增加了拦截器(interceptor)的功能, 就像Java Servlet中的 filter一样,可以对RPC的请求和响应进行拦截处理,而且既可以在客户端进行拦截,也可以对服务器端进行拦截。

利用拦截器,可以对gRPC进行扩展,利用社区的力量将gRPC发展壮大,也可以让开发者更灵活地处理gRPC流程中的业务逻辑。下面列出了利用拦截器实现的一些功能框架:

Go gRPC Middleware:提供了拦截器的interceptor链式的功能,可以将多个拦截器

查看全文: http://www.udpwork.com/item/16216.html

+0  gRPC的那些事 - streaming

Tag: Go
鸟窝 发于 2017年04月07日 11:29 | 点击: 647 | 展开摘要
gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。 gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。 客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。

gRPC具有以下重要特征:
强大的IDL特性

查看全文: http://www.udpwork.com/item/16201.html

+0  [转]gRPC服务发现&负载均衡

Tag: gRPC | Go
鸟窝 发于 2017年03月26日 00:07 | 点击: 533 | 展开摘要
原文出处: gRPC服务发现&负载均衡, 作者: softfn。

构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:

1、集中式LB(Proxy Model)

在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB

查看全文: http://www.udpwork.com/item/16189.html

+0  一个有特色的有限状态机

Tag: Go
鸟窝 发于 2017年03月22日 23:18 | 点击: 1561 | 展开摘要
gofsm是一个简单、小巧而又特色的有限状态机(FSM)。

github已经有了很多状态机的实现,比如文末列出的一些,还为什么要再发明轮子呢?

原因在于这些状态机有一个特点,就是一个状态机维护一个对象的状态,这样一个状态机就和一个具体的图像实例关联在一起,在有些情况下,这没有什么问题,而且是很好的设计,而且比较符合状态机的定义。但是在有些情况下,当我们需要维护成千上百个对象的时候,需要创建成千上百个状态机对象,这其实是很大的浪费,因为在大部分情况下,对象本身自己会维护/保

查看全文: http://www.udpwork.com/item/16029.html

+0  [译]Go Slice 秘籍

Tag: Go
鸟窝 发于 2017年03月22日 20:17 | 点击: 478 | 展开摘要
这是 Golang官方的一个总结: SliceTricks

由于引入了内建的append的方法, 包container/vector的很多方法都被移除了,可以被内建的append和copy方法代替。

下面是栈vector的操作方法的实现,使用slice实现相关的操作。

AppendVector

1

a = append(a, b...)

Copy

1
2
3
4

b = make([]T, len(a))
copy(b, a)
// 如果a不为空,也可以用下面

查看全文: http://www.udpwork.com/item/16187.html

+0  前端架构的设计与进化

Tag: First Category
s5s5 发于 2017年03月21日 10:04 | 点击: 488 | 展开摘要
上周参加了一门这个课,笔记一下

架构

开发模式

通用模型

模板引擎

基础类库

组件框架

避免GOOGLE

大厂

选合适的

不用时怎么办

代码结构

团队和业务快速变化

开发行为耦合

多特性多并行

主线是什么

开发规范

编码

设计思路

模块拆分

结构分层

工具平台

工程化过程

框架支撑

研发效率(质量)

代码管理

运营支撑

运维监控

流程边界

流程

分工跨界

活动开发

平台化

经验沉淀

核心理念

查看全文: http://www.udpwork.com/item/16185.html

+0  编写地道的Go代码

Tag: Go
鸟窝 发于 2017年03月10日 10:36 | 点击: 917 | 展开摘要
在阅读本文之前,我先推荐你阅读官方的 Effective Go文档,或者是中文翻译版: 高效Go编程,它提供了很多编写标准而高效的Go代码指导,本文不会再重复介绍这些内容。

最地道的Go代码就是Go的标准库的代码,你有空的时候可以多看看Google的工程师是如何实现的。

本文仅作为一个参考,如果你有好的建议和意见,欢迎添加评论。

注释

可以通过 /* …… */ 或者 // ……增加注释, //之后应该加一个空格。

如果你想在每个文件中的头部加上注释,需要在版权注释

查看全文: http://www.udpwork.com/item/16139.html

+0  为 Go Mutex 实现 TryLock 方法

Tag: Go
鸟窝 发于 2017年03月09日 17:49 | 点击: 433 | 展开摘要
Go标准库的sync/Mutex、RWMutex实现了sync/Locker接口, 提供了Lock()和UnLock()方法,可以获取锁和释放锁,我们可以方便的使用它来控制我们对共享资源的并发控制上。

但是标准库中的Mutex.Lock的锁被获取后,如果在未释放之前再调用Lock则会被阻塞住,这种设计在有些情况下可能不能满足我的需求。有时候我们想尝试获取锁,如果获取到了,没问题继续执行,如果获取不到,我们不想阻塞住,而是去调用其它的逻辑,这个时候我们就想要TryLock方法

查看全文: http://www.udpwork.com/item/16169.html
|<<<1234567>>>| 一共49页, 586条记录