Mar 31 2017
前言
随着系统架构从集中式单点服务器到分布式微服务方向的迁移,RPC是一个不可回避的话题.如何在系统中引入对开发者友好,性能可靠的RPC服务是一个值得深思的问题.
在调研了Thrift,gRPC,zerorpc等方案后,基于以下2点最后选择了zerorpc:
- Thrift,gRPC学习成本高,开发者需要重新定义返回结构增加了工作量
- zerorpc完美契合Python,能快速开发,并且支持Node.js,适用于当前技术栈
问题
虽然zerorpc可以直接嵌入当前系统框架中,但是还是有一些问题需要去考虑解决
rpc 接口如何定义
rpc 服务如何启动
高并发情况下客户端的可靠性
Mar 14 2017
用Python解决数据结构与算法问题
发现一本Python的好书被翻译了,利用下班时间学习了一下,把相关代码都实现了一遍,包括:
- 栈,队列,双端队列
- 无序链表,有序链表
- 二叉树,堆,二叉搜索树,AVL树
- 图
以及一些算法
Jan 1 2017
前言
罗子雄:如何成为一名优秀设计师
董明伟:Python 工程师的入门和进阶
董明伟基于自己实践讲的知乎live为Python新人提供了很多实用建议,他推荐的罗子雄:如何成为一名优秀设计师的演讲讲的非常好,总结了设计师从入门到提高的优秀实践。
罗子雄的演讲我看了三遍,再结合自己的程序员生涯,我想我也可以为Python新人提供一些建议,开了如何成为一名优秀的程序员一题,讲讲我的Python工程师之路。
Sep 25 2016
Django db模块本身不支持MySQL连接池,只有一个配置CONN_MAX_AGE
连接最大存活时间,如果WSGI服务器使用了线程池技术,会达到连接复用的效果。但是如果WSGI服务如果是每个请求都创建新的线程,那么这个配置没有任何效果,因为连接保存在Thread.local()
名称空间中,在不同的线程中不能复用。
在上一篇greentor MySQL连接池实现中已经实现了MySQL连接池,只需要重写Django MySQL backend以支持连接池,就能达到连接复用的目的,减少socket 3次握手的开销,提高性能。
https://github.com/zhu327/greentor/blob/master/demo/core/base.py
Sep 25 2016
https://en.wikipedia.org/wiki/Connection_pool
通过greentor实现了pymysql在Tornado上异步调用的过程后发现,每次建立数据库连接都会经过socket 3次握手,而每一次socket读写都会伴随着greenlet的切换,以及ioloop的callback过程,虽然是异步了,但是IO性能并没有提升,所以在研究了TorMySQL连接池的实现后,实现了greentor自己的连接池。
https://github.com/zhu327/greentor/blob/master/greentor/green.py