已经在家隔离两个多月了, 整个人都胖了一圈. 自从胖了以后, 大家关注的焦点就变成了我的胖, 而忽略了我的丑, 真好.
靠着微弱的手机网络, 我依然坚持在家办公, 下面就说说在家办公我都做了什么.
1. 业务需求
在经历了购物便利性和消费民主化之后, 电子商务必然会迎来新的一轮零售变革, 这就是内容电商!
内容电商, 就是电商的下一个风口!
咳咳, 扯远了!
教育一直都是常青树, 任何时候教育领域都是一个不错的选择.
猿辅导, 学而思, 叽里呱啦, 潘多拉英语, 斑马英语, 叫叫阅读等等, 都是儿童教育领域的知名品牌.
当真是编程五分钟, 扯淡两小时, 说正题
业务模型是这样的
基于这样的模型, 很自然地, 系统分为这样几大块: 商品售卖(涉及商品, 订单, 价格, 物流, 交易, 会员等), 课程学习(设计课程相关的各种存储, 配置, 数据分析, 音视频加密, 题库, 课中交互等), 基础服务接入(涉及注册登录, Token 认证, 会员权益, 消息推送, 网关, 注册中心等)
2. 技术实现
2.1 基本架构
简要说明:
1, 基本数据存 MySQL, 一些不规则数据 (例如: 题目, 楼层数据) 存 MongoDB, 记录类型的数据存 ES
2, 缓存主要用分布式缓存和内存缓存, 定时从 Redis 中刷新内存缓存. 更新 Redis 的方式一般有两种: MQ 异步刷新和直接方法调用同步刷新. Redis 注意设置好连接池相关参数.
3, 服务之前用 Dubbo 调用, 注意设置超时时间和重试次数
4, 业务网关负责用户身份认证, 统一日志处理, 统一异常处理
5, 配置用携程的 Apollo. 当然, 用阿里的 Nacos 更好.
6,MyBatis plus 很好用, 自动生成, 基本不需要写什么代码, 几乎不需要写 SQL, 自带的方法足够使用了
7, 阿里的 CND,OSS,MQ, 音视频处理, 容器镜像, 安全审计等服务, 百度 CDN, 腾讯语音识别, 环信等
2.2 设计要点
项目结构大概是这样的:
- cjs-commons (常量工具类等)
- cjs-repository (所有数据库操作写在这里)
- cjs-dependency (所有依赖的服务都写在这里)
- cjs-inner-API (内部服务调用 dubbo API)
- cjs-inner-service (内部服务 dubbo 实现)
- cjs-API (面向客户端的 dubbo API 服务)
- cjs-service (面向客户端的 dubbo 实现)
- cjs-web (面向客户端的 API 接口)
- cjs-admin (管理后台)
约定优于配置. 项目结构, 命名规范是大家共同达成的约定, 定了以后遵守就完了.
1, 音视频要加密, 图片及音视频上传之前务必要按要求进行压缩
2, 课程是虚拟内容, 有的课程带教具, 因此下单时候就是一个虚拟商品订单和一个实物商品订单. 实物订单就要考虑运费, 物流等信息
(虚拟商品没有库存, 没有物流. 虚拟订单也是有 SKU 的)
3, 题目类型众多, 且每种题目之间差异比较大, 答案选项也是固定, 这种数据就不用想了, 直接放 MongoDB
4, 首页展示的商品是通过首页楼层配置的, 楼层数据最好也放 MongoDB
5, 答题记录, 课程学习记录, 星星记录这种数据量太大了, 就直接放到 Elasticsearch 中, 主要是检索快
6, 单元小结, 学习报告这种的话, 目前是服务端从上报的数据中计算出来的. 不过最好是通过一些实时计算平台来处理.
7, 层级比较深, 一定要维护好缓存关系, 避免调用链路过长, 可以用 Pinpoint 查看调用链路
8, 课程中的资源文件比较多, 下载会比较耗时, 不要想让客户端实时去网络加载. 最好是客户端提前下好, 所有 url 改成本地路径, 这样的话就可以从本地加载资源.
9, 记得不要都放到一个篮子里. 课程学习进度要定时上报(比如, 正常 2 分钟上报一次, 当用户暂停, 退出, 拖进度条等事件触发后立即上报), 不要等到学完了才上报一次, 不保险.
10, 记得埋点, 别等到上线了才想起来要进行数据打点
Spark Streaming
3. 协作与工具
钉钉: 必备
语雀: 专业的云端知识库
Worktile: 敏捷开发, 与 jira 类似, 需求, 任务, bug 跟进
wiki: 早期用 wiki, 忘了它吧
石墨文档: 过~
MindLinker: 音视频会议
Yapi: 可视化接口管理平台(忘了 swagger 吧, idea 有插件)
充分理解需求, 做好设计评审, 同客户端定好数据结构, 而后各自开发
每天站立会, 日报, 周报, 及时沟通, 及时汇报, 燃尽图
每天各种会议, 开会确实很累人, 开会的成本比较高, 所以要提高效率
按照需求的级别来开发, 基础的工作, 优先级高的任务先做, 一定要多沟通多确认, 一定要注意优先级
阻塞性的问题要及时抛出
最后, 多压测, 就到这儿吧
附上架构图
来源: https://www.cnblogs.com/cjsblog/p/12533121.html