跬步 On Coding

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.

Django 优化杂谈

总结下最近看过的一些文章,然后想到的一些优化点,整理一下.

数据库连接池

http://mt.dbanotes.net/arch/instagram.html

Django 默认DB配置提供了选项CONN_MAX_AGE用于配置在同一个thread/greenlet里面DB connection的最大存活时间,便于连接的复用,在实践中发现如果使用gunicorn+gevent的方式来启动WSGI服务,由于gunicorn会创建一个很大的gevent pool,导致数据库连接数会暴涨.所以这个选项被放弃了,另外的方式是使用connection pool.

instagram 使用 PostGreSQL 并且使用 Pgbouncer 这个中间件来管理连接池,MySQL也有Proxy这种中间件但是比较重,所以考虑在django mysql backend的基础上自己实现一个连接池.

https://gist.github.com/zhu327/94c22c7fa9c92cc38e998eab41e77c38

主要参考了Connector/Python的pool实现.

数据库连接池也不是”银弹”,在应用层做数据库连接池也不值得推荐,随着业务的扩展,使用一主多备搭建集群,通过读写分类中间件来做连接池管理,推荐ProxySQL.

在Django中使用zerorpc

前言

随着系统架构从集中式单点服务器到分布式微服务方向的迁移,RPC是一个不可回避的话题.如何在系统中引入对开发者友好,性能可靠的RPC服务是一个值得深思的问题.

在调研了Thrift,gRPC,zerorpc等方案后,基于以下2点最后选择了zerorpc:

  • Thrift,gRPC学习成本高,开发者需要重新定义返回结构增加了工作量
  • zerorpc完美契合Python,能快速开发,并且支持Node.js,适用于当前技术栈

问题

虽然zerorpc可以直接嵌入当前系统框架中,但是还是有一些问题需要去考虑解决

  • rpc 接口如何定义

  • rpc 服务如何启动

  • 高并发情况下客户端的可靠性

用Python解决数据结构与算法问题

用Python解决数据结构与算法问题

发现一本Python的好书被翻译了,利用下班时间学习了一下,把相关代码都实现了一遍,包括:

  • 栈,队列,双端队列
  • 无序链表,有序链表
  • 二叉树,堆,二叉搜索树,AVL树

以及一些算法

如何成为一名优秀的程序员

前言

罗子雄:如何成为一名优秀设计师

董明伟:Python 工程师的入门和进阶

董明伟基于自己实践讲的知乎live为Python新人提供了很多实用建议,他推荐的罗子雄:如何成为一名优秀设计师的演讲讲的非常好,总结了设计师从入门到提高的优秀实践。
罗子雄的演讲我看了三遍,再结合自己的程序员生涯,我想我也可以为Python新人提供一些建议,开了如何成为一名优秀的程序员一题,讲讲我的Python工程师之路。