跬步 On Coding

像OpenResty一样使用Golang开发Web App

https://github.com/zhu327/glualor

最近在公司内网读过一篇Gopher Lua的文章, 感觉在Golang中使用Lua VM的模式跟OpenResty是一样一样的. 在Github上找了一圈net/http的到Gopher Lua的绑定, 然而并没有. 造轮子的机会来了 ^_^

gluaweb

虽然看过几本Golang的书, 也读过几个开源项目的代码, 来腾讯后还上过两门Golang的课, 但是却没有写过一个Golang的项目, 从新读过net/http标准库的文档, 再看看Gopher Lua的例子就写了gluaweb

服务治理与RPC

以前写过Django中使用zerorpc的方法,但是由于我们的Django是运行在gevent下,而zeromq需要启动一个后台进程处理消息,与gevent使用的greenlet携程是冲突的。

在Java的世界里,Spring Cloud全家桶覆盖了微服务的方方面面,专注于服务治理的框架也有阿里的Dubbo,微博的Motan。但是Python这边没有找到合适的轮子,甚至于好的RPC框架也没有,只有gRPC,Thrift这种跨语言的RPC框架。而这些跨语言的RPC框架基本上也是基于C/C++的Python port。

在github上全局搜索Python rpc,找到一个原生支持gevent的MPRPC,而且也找到了微博Motan的Golang版本,所以考虑读Motan-go的源码学习一下什么是服务治理,再基于MPRPC实现自己的轮子。这就有了doge

OpenResty与API Gateway

公司业务向微服务方向迁移实践中, API Gateway成为接入层最重要的部分, 在完成开发的同时给同事做了一次OpenResty的分享, 以下是分享的内容整理.


当我谈论高性能时我们谈论什么 ?

讨论时间, 大家自由发挥

  • 机器
  • 语言
  • 架构
    • reactor
    • coroutine
    • cache

好几个月都没写过Blog,写个小记

Openresty

公司业务向微服务迁移过程中接触到API Gateway这种中间件,评估了各种开源方案后,选择了在Openresty基础上实现的Kong.为了在Kong的基础上做二次开发,开始学习Openresty.

还是在好几年做测试的时候用过lua语言写测试脚本,lua语言特性很简单,想捡起来也很快.更多的感触是由于学习过Torando的源码,理解了Reactor模型,协程这些概念.学起Openresty只需要把相关概念套上去就很好理解了.这就是知识体系建立的好处,虽然不同语言,不同框架,还是能快速上手.

https://github.com/zhu327/shorturl

正好公司有个生成短链接的小项目,不限语言,先拿Openresty练练手,写了个shorturl.

zerorpc api设计指南

Google API 设计指南
在Django中使用zerorpc

之前实现了在Django环境下使用zerorpc的封装,api的组织单位是function.受到Google API 设计指南的启发,重新设计了一种基于Resources的api组织风格,并且约定Resource的方法名与Django Rest Framework的ViewSets中实现的action名称一致.

zerorpc默认只能在同一个Server上面注册一个对象,而我们需要注册多个类(一个类表示一Resources),在阅读zerorpc Server的代码后,想到一个简单的方式来注册Resources.