@zhangnian88123
2016-04-27T12:26:04.000000Z
字数 1036
阅读 1561
flask
redis
mongodb
mysql
直接使用nginx(openresty) + gunicorn
对官方的Flask进行了二次封装,增加了一些项目通用的功能:
1. 简化API的用法,比如路由函数支持直接返回map, list,自动转换为JSON
2. 日志上报
3. 用户验证、防刷
采用微服务架构,分为业务服务和通用服务
- 业务服务:实现具体的业务逻辑,暴露出接口给API层或其他业务服务调用,比如UserService, OrderService
- 通用逻辑层:实现底层支撑服务,比如短信服务、图片上传服务
服务提供了三种调用方式:
- HTTP Restful
适合跨语言、跨平台之间的调用,也便于开发期间的接口调试
- RPC
采用长连接,性能较高,适合对接口性能要求比较高的场合
- Message Queue
根据业务类型,采用不同的消息模式进行通讯,比如one-one, one-many, pub-sub
使用beanstalkd作为消息队列,将一些业务流程异步化,从而降低一次请求的响应时间,如下单流程:
存储关系型业务数据,比如用户表、订单表、商品表
之前有根据userid做分库分表,后来我去掉了,主要是考虑到两点:1. 目前数据量不大,可预计的一段时间内数据量也不会猛增,所以分库分表没有多大必要;2. 按照之前的方式,分库分表的逻辑是在代码中体现的,比如根据userid取模然后组装成库名表名,这种方式使得代码难以维护,加重开发人员的负担。后续如果数据达到一定规模,会引入DAL(数据访问层)解决此问题,做到在代码层面对分库分表无感知。
存储key-value型的缓存数据
用户手机验证码
用户Token
存储需要频繁读取的非关系型数据,用以加速查找
set类型: 商品—>标签,根据商品ID查询标签, 标签->商品,根据标签查询所有满足的商品
存储用户行为日志,利用其强大的query语句实现日志的快速查询和分析