项目日记 - 三信学堂
项目描述:
该项目分为两个操作端,
一个是管理端, 用于文章的录入和一些类别的管理
客户端, 用于浏览文章, 点赞等
项目结构:
2个端, 一个数据库(rds)
管理端用 asp.net core 实现
客户端用 asp.net mvc5 来实现
orm 使用 entityframework
缓存未启用, 考虑用 redis
全文搜索未启用, 考虑用 lucene.net
数据写入量:
估算数据量, 一级分类固定为3-4个, 二级分类约为20个
文章一年预估新增1800(±300) 篇
最频繁增量 1天5篇
数据读取量:
预估一天访客 () 人
平均 pv:
可得 tps 为:
需求分析:
系统分析:
数据量不大, 写入/读取不频繁
安全性要求低
可用性要求中高等
性能要求中等
结论:
管理端/客户端应用服务器单机可以胜任,
数据库用阿里云的 mysql rds 满足可用性要求,
前期数据量小, 暂时不用 redis 来做缓存
另外从这个项目开始, 考虑引进了一些 API 开发规范
拿后台来说 跟之间不同的是,
第1, 全部改成了异步控制器, 除了不能使用异步控制器创建部分视图外, 其余没发现有什么坑
第2, API 参考了 RMM 2级模型, 使用了 Http Method 来作为对资源操作的依据
第3, 尝试整理 分页/排序/筛选 于每个获取方法中
这里说下几个总结
第1. 这个项目将Add和Update 放在一起了 全部都用 Post 来实现, 虽然这个项目没什么问题, 但是按照一个方法一个职责的原则来说, 以后开始分开来比较好
第2. 试图考虑所有的控制器都用统一的 筛选方法, 这点只是实现了一半. 但是按照目前情况来说, 可以的话还是分开来. 因为就简单项目来说, 这样反而增加了设计成本.
第3. 这个项目吧分页和筛选2个模型分开了. 其实可以合在一起, 只要让筛选模型继承自分页模型即可
第4. 这个项目没有返回各个响应Code, 更加规范的做法是 依照不同的处理结果返回不同的 Http Code
第5. 没有一开始好好就做单元测试, 这部分应该是最早的
以上
系统设计:
1期:
使用简单的单机架构, 2个端同时使用同一数据库
使用相对简单的登陆系统,
管理端使用 asp.net core 前后分离, 使用基于 claim 的身份认证,
客户端使用直接使用主站的登陆验证, 因为在同一域下, 所以不用考虑登陆问题

2期:
数据量上来之后, 对文章读取的压力就会增大,
可以使用 redis 来作为缓存,
在文章量在千级左右的情况下, 可以将文章全部保存在缓存里
需要的时候进行读取.
在更新文章的时候顺便更新缓存

踩坑:
管理端使用 EntityFrameworkCore, 很方便可以使用 mysql
客户端先使用 sql server, 后来迁移到 mysql, 碰到问题. 其原因在 根据 sql server 生成的数据模型里 有一句 [DataType("datatime2")] 造成了不兼容
客户端的站点地图想使用 MvcSiteMapProvider, 之前一直无法显示, 其原因在路由配置的时候没有使用默认设置


浙公网安备 33010602011771号