[关闭]
@zhangnian88123 2016-04-27T04:26:04.000000Z 字数 1036 阅读 1521

挠挠技术栈

flask redis mongodb mysql


目前阶段的架构考量

接入层

Nginx(Openresty)

直接使用nginx(openresty) + gunicorn

API层

Flask

对官方的Flask进行了二次封装,增加了一些项目通用的功能:
1. 简化API的用法,比如路由函数支持直接返回map, list,自动转换为JSON
2. 日志上报
3. 用户验证、防刷

逻辑层

采用微服务架构,分为业务服务和通用服务
- 业务服务:实现具体的业务逻辑,暴露出接口给API层或其他业务服务调用,比如UserService, OrderService
- 通用逻辑层:实现底层支撑服务,比如短信服务、图片上传服务

服务提供了三种调用方式:
- HTTP Restful
适合跨语言、跨平台之间的调用,也便于开发期间的接口调试
- RPC
采用长连接,性能较高,适合对接口性能要求比较高的场合
- Message Queue
根据业务类型,采用不同的消息模式进行通讯,比如one-one, one-many, pub-sub

异步层

beanstalkd

使用beanstalkd作为消息队列,将一些业务流程异步化,从而降低一次请求的响应时间,如下单流程:

QQ截图20160427122508.jpg-64kB

存储层

MySQL

存储关系型业务数据,比如用户表、订单表、商品表

之前有根据userid做分库分表,后来我去掉了,主要是考虑到两点:1. 目前数据量不大,可预计的一段时间内数据量也不会猛增,所以分库分表没有多大必要;2. 按照之前的方式,分库分表的逻辑是在代码中体现的,比如根据userid取模然后组装成库名表名,这种方式使得代码难以维护,加重开发人员的负担。后续如果数据达到一定规模,会引入DAL(数据访问层)解决此问题,做到在代码层面对分库分表无感知。

Redis

MongoDB

存储用户行为日志,利用其强大的query语句实现日志的快速查询和分析

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注