虚拟助手app
介绍下项目。
该项目是一个移动端养成类的app,相似的有日本的《makes》,功能比较简单,就是通过用户和虚拟人物日常的对话和交互累计经验和资源,使用资源购买道具装扮虚拟人物,然后解锁更多的交互内容、方式和场景,同步实现一些备忘录和闹钟功能的app。介绍下项目架构。
为什么采用web api实现?
因为该项目主要是用户和虚拟人物的交互,没有用户对用户的交互需求,对即时性相应要求并不高,所以采用web api的方式实现,配合JWT协议,利用gin中间件可以方便的实现权限验证,开发效率高,并且gin也比较稳定。为什么使用redis作为缓存?
- 直接操作数据库相对较慢,redis存储在内存中,提高访问速度
- 高并发,redis的承受能力高于数据库,使用redis可以减小数据库的压力
- redis支持分布式缓存和持久化
- redis是单线程的,操作具有原子性
- 支持的数据类型多
redis和mysql的数据一致性问题怎么解决?
- 读:读redis,如果redis没有再读取mysql并写入redis
- 写:更新mysql–>异步删redis
- redis设置短过期时间
- 串行化对同一数据的处理
为什么采用protobuf协议?
- protobuf序列化后数据大小是
json
格式的十分之一,是xml
格式的二十分之一,适合网络传输,减少数据量,减少网络IO - 解析效率快
- 较复杂,数据本身不具有可读性
- protobuf序列化后数据大小是
什么情况下使用nsq队列?怎么使用?
高可用有没有接触?如何保证高可用?
JWT有什么优势?有什么缺点?
- 服务端不用保存会话信息
- 实现单点登录
- 增加了请求头开销
- 续签和注销不方便