原文: A Million WebSockets and Go
作者: Sergey Kamardin
译文: 性能优化实战:百万级WebSockets和Go语言
译者: 曼托斯
这一次,我们使用平均感知器(Average Perceptron)算法来预测美国国会的投票。
我们知道, Go语言为并发编程提供了简洁的编程方式, 你可以以"同步"的编程风格来并发执行代码, 比如使用go
关键字新开一个goroutine。 对于网络编程,Go标准库和运行时内部采用 epoll/kqueue/IoCompletionPort
来实现基于 event-loop
的网络异步处理,但是通过netpoll
的方式对外提供同步的访问。具体代码可以参考 runtime/netpoll、net和internal/poll。
Package poll supports non-blocking I/O on file descriptors with polling.
This supports I/O operations that block only a goroutine, not a thread.
This is used by the net and os packages.
It uses a poller built into the runtime, with support from the
runtime scheduler.
当然,我们平常不会设计到这些封装的细节,正常使用net
包就很方便的开发网络程序了, 但是,如果我们想自己实现基于epoll
的 event-loop
网络程序呢?
原文: TCP Socket Implementation On Golang by Gian Giovani.
译者注: 作者并没有从源代码级别去分析Go socket的实现,而是利用
strace
工具来反推Go Socket的行为。这一方法可以扩展我们分析代码的手段。
源代码级别的分析可以看其实现: net poll,以及一些分析文章:The Go netpoller, The Go netpoller and timeout
Go语言是我写web程序的首选, 它隐藏了很多细节,但仍然不失灵活性。最新我用strace工具分析了一下一个http程序,纯属手贱但还是发现了一些有趣的事情。
下面是strace
的结果:
|
|
google/pprof是一个性能可视化和分析工具,由Google的工程师开发。虽然自称不是Google官方的工具,但是项目挂在google的team下,而且还在Google其它项目中得到应用,是非常好的一个性能剖析工具。
go tool pprof 复制了一份google/pprof
的代码, 封装了一个golang的工具,用来分析Go pprof包产生的剖析数据,也就是最终数据的处理和分析还是通过gogole/pprof
来实现的。
这样,你至少就用两种方式来分析Go程序的 pprof
数据:
go tool pprof
: Go封装的pprof
的工具pprof
: 原始的pprof
工具最近在设计一个多分区多副本的消息系统,以前对kafka有一些了解,在阅读了阿里的RocketMQ、小米的Pegasus等分布式系统后,再仔细阅读的kafka的复制设计,整理出本篇文档,可以和其它系统做一个对比。
Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
7年过去了, kafka已经成为一个羽翼丰满的发布订阅平台、消息存储、流处理的工具。财富500强企业中有三分之一的公司使用了kafka平台。也就是在昨天(2017年11月1日),kafka发布了它的1.0.0
版本。
本文主要参考了Jun Rao(饶军)的Intra-cluster Replication in Apache Kafka, Jun Rao毕业于清华大学,哥读到博士,后来在IBM、LinkedIn工作,在LinkedIn期间任Kafka组的技术leader。2014年Kafka一帮人成立了Confluent公司,推广Kafka的商业应用,Jun Rao是共同创始人。
最近需要将一个项目的master分支用另一个分支完全替换, 查找了相关资料,最后追溯到stackoverflow上的一个提问: How to replace master branch in git, entirely, from another branch?。
网友给出了两种方案。
假设需要将seotweaks
分支替换成master
。
1、
|
|
-s ours
是--strategy=ours
的简写。
2、
如果上面的操作有问题, 还可以使用下面这个方法:
|
|
-m
用来重命名分支。
This might remove commits in origin master。