ServerPush & ClientPull前两天总结了一下HTTP2相关的发展过程,其中最重要的两点是:实现了服务端Push和多路复用。本篇结合目前见过的一些实现Push&Pull的实例,总结一下数据交互的实现方式: etcd v2里的长轮询 long polling的方式 k8s-apiserver的stream的方式 service center和config cente ...
gRPC的HTTP2实现
因为最近工作上要做跟gRPC代理相关的东西,在端午假期出门看央美毕业展累得半死之后,还是决定最后一天宅家里看看gRPC的transport的实现,顺便能更了解HTTP2协议。之前写过gRPC负载均衡接口和拦截器相关的笔记,感觉挖的坑越来越多啦。 grpc server之前就大致看过grpc和go-rpc的实现,总结来说go写的服务端都是一个意思,都是accept conn之后开单独的gorouti ...
记go-RPC的实现
Remote Procedure CallRPC是一种进程间通信协议,它允许程序调用另一个地址空间的过程或函数。开发RPC的动机和核心问题就是如何执行另外一个地址空间上的函数和方法,就像本地调用一样。 在网络通信中,RPC相当于一种约束Request和Response的协议。目前RPC框架大致有两种不同的侧重,一种是偏向于服务治理,提供了丰富的功能,适用于大型服务的微服务拆分和管理,另一种侧重于跨 ...
记fastHTTP协程池的实现
golang的net/http包实现了处理连接时比较简单粗暴,相比之下有性能更好的http库,项目里用到过的fasthttp就是一个很好的实现,Go开发HTTP的另一个选择fasthttp中总结了它跟标准库实现的几点不同: net/http 的实现是一个连接新建一个 goroutine,fasthttp 是利用一个 worker pool做了协程池,复用 goroutine,减轻 runtim ...
HTTP协议与go的实现
HTTP协议HTTP协议是规范服务端和客户端请求应答标准的应用层协议,即它是一个应用层的请求响应协议。客户端的请求和服务端响应共同构成了一次HTTP事务,他们之间的通信通过HTTP报文进行。HTTP1.1的报文是纯文本的,协议规定了报文的格式,报文格式都是起始行+Header+Body的格式,只是请求起始行包含方法+URI,响应起始行是状态码和状态消息。 TCP连接管理在TCP/IP协议族里,H ...
IO多路复用与Go网络库的实现
去年在读UNP等几本书时都涉及到IO及相关知识,不过由于点很零散,当时没有总结。趁这次看golang net包的机会,结合之前看的比较基础的概念写了这篇博客,记录下现在的理解,方便以后回顾。 IO多路复用Unix网络编程里总结了5种IO模型,其中只有异步IO模型是异步IO,因为只有异步IO的recvfrom是不阻塞进程的。首先每个IO读操作都包括以下两个过程,书里说的异步就是指发起读操作时,数据从 ...
容器网络和kube-proxy笔记整理
前段时间作死把hexo的图片显示搞崩了,长时间不想写东西,也不知道自己在瞎忙什么。为了重新进入学习状态,还是老老实实把以前写过的东西汇总一下吧。 写了一半发现容器网络的内容太多太杂 挖个坑 以后填 Linux Bridge第一次对Linux Namespace有了解是看了这篇博客,按照博客介绍的方法模拟了docker0网桥来隔离两个网络命名空间。docker run一个容器之后,docker会 ...
KubeController异步事件处理Infomer的实现
前两年根据Kube-Infomer的框架,写过route-controller实现gorouter和kubenretes集群中应用路由的转发,还写过一个stack-controller实现AOS的堆栈管理,当时对照1.5和1.7版本的代码做了些总结。1.9之后informer已经完全迁移到client-go了,根据1.9的代码整理一遍框架的源码实现。informer作为异步事件处理框架,完成了事件 ...
Kubelet数据源的合并
Kubelet的功能简单总结就是根据系统中pod的变化,来处理pod的生命周期。它向下通过底层docker等接口处理pod的启动 更新停止,它向上通过list watch获取pod的信息来做任务识别和分发。这一节主要总结下kubelet三个数据来源合并的过程,代码参考1.7版本,是17年写的了,最近整理搬运到博客。 kubelet的Pod来源有三个,分别是manifest http以及apiser ...
TCP 连接建立与断开
时隔多年重新学习TCPIP,主要看了博客TCP的那些事儿和 TCP/IP详解卷一,这里以问题驱动的形式,对应书做些小测试,来验证和解释一些概念和问题。主要总结socket函数与tcp连接建立断开之间的关系,tcp状态变迁,KeepAlive以及RST异常场景。之后写了Go的HTTP实现,要再总结一下tcp trouble shooting。 socket拾遗Linux内核认为套接字就是有描述符的打 ...