前情提要: https://www.v2ex.com/t/355150#reply6
仔细考虑后,最后决定用 Node.JS+koa+Sequelize.JS+Postgresql 这一套搞后端,纯 API,渲染统一放在前端,后端渲染还要浪费 VPS 的 CPU 时间,不能忍。
多说的 api 的 request 和 response 都是 json 结构的,我查了一下,Javascript 的 JSON.Encode 会比 Python 的快不少: http://szborows.blogspot.com/2016/03/mini-restjson-benchmark-python-351-vs.html, 所以选的 NodeJS
仔细分析博客评论系统的时间消耗
————考虑到大部分用户都是只读评论,并不写评论,即使是最优秀的博客,留言率也不超过 1%,也就是说,这是一个读远远多于写的服务。 除了不能消除的数据库查询时间(这一部分可以通过把这一整套东西放在 SSD-VPS 上尽量加快),剩下的从多到少应该是用“ ORM 映射到对象”,第二应该是“对象转换为 json ”。也就是说,JSON-对象-数据库中的数据的互转应该是最耗费时间的部分了。
+--------+
| | +-----------+ +------------+
| Nodejs | | | | |
| Koa +----+ sequelize +---+ Postgresql |
| | | | | |
+---+----+ +-----------+ +------------+
|
|
+---+----+
| |
| Redis |
| |
+--------+
那么如果要考虑性能的话,那么加上一个 Redis 做服务器的缓冲————事实上只要缓冲最频繁读取的那一部分,就可以大大减少“ ORM 映射到对象”和“对象转换为 json ”这个两个操作了,也就是说,问题完美解决。
问题是,我这样的设计是否有问题呢? Redis 是否有必要?
接着就是 Postgresql 里面设计的时候是否有必要预先计算好各种请求的结果做存储呢?比方说
因为之前没想过类似的问题,所以也不知道这么想对不对。请各位大佬帮忙指点
1
ericls 2017-04-27 08:20:10 +08:00 via iPhone
用 redis 怎么 invalidate? Redis 里面存什么数据 这些数据拿到 node 怎么拼接成最后的数据?
|
2
cnnblike OP @ericls LRU 吧主要还是,想不出啥高明的做法。duoshuo 的服务器端应该回应的都是 json 结构的东西,比方说吧,看这个接口“ http://dev.duoshuo.com/docs/50398b4b8551ece011000023 ”,这里的返回的整个 json 内容就保存在字符串中,等又收到请求说要某个博客的热评榜的时候就直接读取这个字符串,发出去就行,这样开销应该是最小的。
|