目录 - 代码阅读

faas-provider


faas-provider是一个模板,只要实现了这个模板的接口,就可以自定义实现自己的provider。 faas-provider OpenFaaS官方提供了两套后台provider: Docker Swarm Kubernetes 这两者在部署和调用函数的时候流程图如下: 部署一个函数 调用一个函数 provider要提供的一些API有: List / Create / Delete 一个函数 /system/functions 方法: GET / POST / DELETE 获取一个函数 /system/function/{name:[-a-zA-Z_0-9]+} 方法: G
[阅读全文]

gateway-reading


OpenFaaS的Gateway是一个golang实现的请求转发的网关,在这个网关服务中,主要有以下几个功能: UI 部署函数 监控 自动伸缩 架构分析 从图中可以发现,当Gateway作为一个入口,当CLI或者web页面发来要部署或者调用一个函数的时候,Gateway会将请求转发给Provider,同时会将监控指标发给Prometheus。AlterManager会根据需求,调用API自动伸缩函数。 源码分析 依赖 github.com/gorilla/mux github.com/nats-io/go-nats-streaming github.com/nats-io/go-nats
[阅读全文]

2018-03-21 线下分享内容


参与人数: 3 人 cannot take address of temporary variables 延伸阅读 https://stackoverflow.com/questions/10535743/address-of-a-temporary-in-go https://stackoverflow.com/questions/40926479/take-the-address-of-a-character-in-string https://golang.org/ref/spec#Address_operators neochain teleport Teleport 是一个
[阅读全文]

2018-04-11 线下分享内容


参与人数: 9 人 微服务相关的开源项目,直接根据 Github 讲解,三个相关的项目链接如下: teleport是socket框架 tp-micro是它的扩展,实现了微服务 ants是该微服务的网关、配置中心、代码生成器、部署工具之类的 语音实录 以下内容是分享活动的实录回顾。 参与人数: 9人 参与者的自我介绍 演示 xiaoneai/ants 分析 tp-micro 和 teleport 框架代码 答疑 确定线下分享形式(标准包和开源项目) 语音实录 语音实录(文字版本 by 录音宝)
[阅读全文]

2018-04-11 线下分享内容语音实录(文字版本 by 录音宝)


在开始前的话,我就先闻着大概介绍一下。我我叫李亚春。李亚坤。那个网名就是亨利出实验,然后嗯13年开始写go,嗯写过几个开盘项目,然后主要有一个爬虫用猪,这个还有这个嗯开炮。今天我们要要介绍的一个然后还有就是一个黑狗,这就是一个外部框架。我叫吴良肖,然后我啊我毕业两年,然后我是从毕业的时候开始写够的,然后到现在没有开源项目,所以我的目标就是有一个开源项目。我叫武帝陵一个比较低的,然后我是整体来说,去年年底是开始觉得自己也写两个小工具放到D卡上面,因为现在我们公司要搬到S上面,学习架构云的与。BW好,我叫朱静涛,嗯够的话,我十年吧是对就接触这个语言,然后看他语法就特别特有吸引力,跟我之前是写开心嘛
[阅读全文]

2018-04-18 线下活动


参与人数: 14 人 Go 标准包阅读 Go 版本:go 1.10.1 strings builder.go builder_test.go compare.go compare_test.go example_test.go export_test.go reader_test.go reader.go 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(1)) runtime.ReadMemStats(&m1) defer
[阅读全文]

2018-04-25 线下活动


参与人数: 15 人 Go 标准包阅读 Go 版本:go 1.10.1 strings replace.go replace_test.go search.go search_test.go 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 Boyer-Moore 算法 延伸阅读 Boyer-Moore_string_search_algorithmde Boyer-Moore字符串搜索算法 字符串匹配的Boyer-Moore算法 grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
[阅读全文]

2018-05-10 线下活动 - Go 标准包阅读


参与人数: 20 人 Go 标准包阅读 Go 版本:go 1.10.1 strings strings.go(进度50%) 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 重头戏:Rabin-Karp search Rabin-Karp 算法的思想: 假设待匹配字符串的长度为M,目标字符串的长度为N(N>M); 首先计算待匹配字符串的hash值,计算目标字符串前M个字符的hash值; 比较前面计算的两个hash值,比较次数N-M+1: 若hash值不相等,则继续计算目标字符串的下一个长度为M的字符子串的has
[阅读全文]

2018-05-17 线下活动 - Go 标准包阅读


参与人数: 12 人 Go 标准包阅读 Go 版本:go 1.10.1 strings strings.go 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 // Remove if golang.org/issue/6714 is fixed bp := copy(b, a[0]) return len(s) >= len(prefix) && s[0:len(prefix)] == prefix 各种开发语言都有的短路机制;字符串底层也是可以用作切片的; 为什么要判断这个错误: if c =
[阅读全文]

2018-05-24 线下活动 - Go 标准包阅读


参与人数: 10 人 Go 标准包阅读 Go 版本:go 1.10.1 net/http server.go 问题 Next Protocol Negotiation = NPN Expect 100 Continue support 见参考资料 header提到了:Expect和host 判断了 header里面的HOST,但是后面又删除,为什么? server.go#L980 delete(req.Header, "Host") 判断是否支持 HTTP2 (isH2Upgrade) // isH2Upgrade reports whether r re
[阅读全文]

2018-05-31 线下活动 - Go 标准包阅读


参与人数: 10 人 Go 标准包阅读 Go 版本:go 1.10.2 net/http server.go 问题 func (s *Server) doKeepAlives() bool { return atomic.LoadInt32(&s.disableKeepAlives) == 0 && !s.shuttingDown() } 为什么要用 atomic.LoadInt32(&s.disableKeepAlives) == 0 ? 原子操作比用锁更节约一点性能。 server.go#Shutdown 不保险 panicChan := m
[阅读全文]

2018-06-14 线下活动


参与人数: 12 人 Go 标准包阅读 Go 版本:go 1.10.2 net/http server.go h2_bundle.go 问题 WriteHeader(statusCode int) 要先调用 header.set() 再调用 WriteHeader() 然后调用 Write() 如果在调用 Write() 之后,还有比较多的逻辑要处理,则一定要紧跟着马上调一下 Flush() 然后调用 Flush() HTTP2 不支持 Hijacker 使用了 Hijacker 之后不能再使用 Request.Body type Hijacker interface
[阅读全文]

2018-06-28 线下活动


参与人数: 10 人 Go 标准包阅读 Go版本:go 1.10.2 net包 http/server.go http/request.go textproto/reader.go 读取位置 textproto/reader.go(140行) 问题 1.各个系统的回车换行符区别 注意:10.13及其以上是macOS系统 2.URI,URL和URN的区别 查看详情 3.HTTP CONNECT方法介绍 会议讨论小结 可以建立一个代理服务器到目标服务器的透明通道(tcp连接通道),中间完全不会对数据做任何处理,直接转发(支持https,一种翻墙的手段,专线独
[阅读全文]

Go 夜读总结


源码总结 YouTube 2018-08-23 多路复用资源池组件剖析 https://youtu.be/CDfrRzgmR4E 2018-08-17 sync.Pool 源码分析及适用场景 https://youtu.be/jaepwn2PWPk 2018-08-02-(runtime goroutine调度实现) https://youtu.be/98pIzaOeD2k 2018-06-28-(net/http/server.go、request.go和net/textproto/reader.go) https://www.youtube.com/watch?v
[阅读全文]

Go 快速入门


创建一个新函数 faas-cli new –lang node hell-node 构建函数 faas-cli build -f hello-node.yml 推送函数到docker仓库 faas-cli push -f hello-node.yml 部署函数 faas-cli deploy -f hello-node.yml 稍等几秒钟,等待部署,然后就可以从postman发送get或者post请求。 在rancher中的状态 函数的状态
[阅读全文]

OpenFaaS介绍及源码分析


关于我 网名: Lucas Github:https://github.com/zhenfeng-zhu 博客:https://zhenfeng-zhu.github.io/ 知乎:https://www.zhihu.com/people/zhu-zhen-feng-96/activities 专栏:https://zhuanlan.zhihu.com/openfaas-cn 微信:zhuzhenfeng1993 主要内容 OpenFaaS的简介 OpenFaaS的快速入门 OpenFaaS的基础组件 OpenFaaS的源码分析 OpenFaaS的定制
[阅读全文]

OpenFaas 介绍及源码分析


关于我 网名: Lucas Github:https://github.com/zhenfeng-zhu 博客:https://zhenfeng-zhu.github.io/ 知乎:https://www.zhihu.com/people/zhu-zhen-feng-96/activities 专栏:https://zhuanlan.zhihu.com/openfaas-cn 微信:zhuzhenfeng1993 主要内容 OpenFaaS的简介 OpenFaaS的快速入门 OpenFaaS的基础组件 OpenFaaS的源码分析 OpenFaaS的定制
[阅读全文]

golang中goroutine的调度


郑宝杨(boya) 2018-08-01 listomebao@gmail.com 阅读源码前可以阅读的资料 Goroutine背后的系统知识 golang源码剖析-雨痕老师 go-intervals 也谈goroutine调度器 golang的调度模型概览 调度的机制用一句话描述: runtime准备好G,P,M,然后M绑定P,M从各种队列中获取G,切换到G的执行栈上并执行G上的任务函数,调用goexit做清理工作并回到M,如此反复。 基本概念 M(machine) M代表着真正的执行计算资源,可以认为它就是os thread(系统线程)。 M是真正调度系统的执行者,每个M就像一个勤劳
[阅读全文]

queue-worker源码分析


异步函数和同步函数 在OpenFaaS中同步调用函数时,将会连接到网关,直到函数成功返回才会关闭连接。同步调用是阻塞的。 网关的路由是:/function/<function_name> 必须等待 在结束的时候得到结果 明确知道是成功还是失败 异步函数会有一些差异: 网关的路由是:/async-function/<function_name> 客户端获得202的即时响应码 从queue-worker中调用函数 默认情况下,结果是被丢弃的。 查看queue-worker的日志 docker service logs -f func_queue-worker 利用r
[阅读全文]

多路复用资源池组件剖析


2018-08-23 22:00:00 分享会之后的答疑。 源代码地址:pool#workshop 一个网友在分享会之后的个人理解:对是独占资源对象的复用,提升了最后的 qps,独占式方法 TestChanPool() 函数中使用了从资源池获取 worker 对象,执行完毕后再放回资源池,如果获取不到则阻塞等待,因此,100 000 请求,每个请求占用 10ms,可用 worker 对象 50 个,则最后 100 000*1050 =20s ,视频中测试结果也显示 21s 符合预期。而 TestWorkshop() 函数中使用回调函数对 worker 进行加锁,每个线程使用的那一刻是 wo
[阅读全文]

监视器 - watchdog


监视器 监视器提供了一个外部世界和函数之间的非托管的通用接口。它的工作是收集从API网关来的HTTP请求,然后调用程序。监视器是一个小型的Golang服务——下图展示了它是如何工作的: 上图:一个小型的web服务,可以为每个传入的HTTP请求分配所需要的进程。 每个函数都需要嵌入这个二进制文件并将其作为ENTRYPOINT 或 CMD,实际上是把它作为容器的初始化进程。一旦你的进程被创建分支,监视器就会通过stdin 传递HTTP请求并从stdout中读取HTTP响应。这意味着你的程序无需知道web和HTTP的任何信息。 轻松创建新函数 从CLI创建一个函数 创建函数最简单的方法是使用Fa
[阅读全文]