最近的攻击让我想到的一些事情

2013-08-22 03:00:37 +08:00
 Livid
或许这些你都已经经历过了,那么你就把下面的列表当作是小朋友的学习心得吧。

1. 下一个项目,能不用 MySQL 就尽量不用,尤其不要用任何的 ORM。虽然方便,但是性能损耗太大了。

2. 所有页面的生成时间,目标应该是 10ms 以下。如果缓存设计得足够好的话,5ms 以下。目前我们的很多页面的生成时间接近甚至超过 100ms,这样的话,网站太脆弱了,会需要加入太多其他的应用层的防御措施。

3. Tornado 是一个经得住考验的框架。本身性能非常好。

4. 如果在 supervisor 中同时启动太多 Tornado process,那么在每次代码更改的时候,新代码的部署过程可能会造成短暂的 CPU 压力。

5. 根据频次计算的防攻击规则,可能会和 CDN 及某些终端加速机制(比如 Opera Mini 的代理)不兼容,除非你能够把这些根据频次计算的防攻击规则,也部署到 CDN 的边缘节点上,并且有足够灵活的 UI 和部署机制让你能够试验不同的规则。

6. 所有的防攻击规则都会造成误伤,并且可能会影响搜索引擎的收录,因为各种 bot 很容易中枪。

如果你最近的访问因为我们的某些防攻击规则受到影响,请给我邮件 livid at v2ex.com 并附上你的 IP(前三段即可)。

大力感谢 @ptcracker 在最近这段时间给予的帮助。
15437 次点击
所在节点    Python
67 条回复
msg7086
2013-08-22 04:42:25 +08:00
菊部缓存技术呢?帖子内容之类的可以很轻松的缓存起来减少压力吧
Sokos
2013-08-22 05:02:42 +08:00
1、“能不用 MySQL 就尽量不用”,为啥,同步阻塞?
2、如一楼所说,局部缓存可以解决?
3、V2EX是否遇到后端服务运行缓慢导致Tornado阻塞问题,是如何解决的?是否如 https://www.v2ex.com/t/46600 所说用HAProxy ?
virushuo
2013-08-22 05:23:35 +08:00
说到1,记得上次咱们在浦东嘉里聊天讨论的那个话题?就是这个了。
hitigon
2013-08-22 06:41:39 +08:00
关于1,能不能简单解释一下
javaluo
2013-08-22 07:17:29 +08:00
对于v2ex可以做冷热分离,比如20页以后的帖子几乎无人再回复,那么就做成静态文件好了,下次直接读取(不知道是不是已经在实现了),如果有人继续回复,则穿透缓存直接更新,然后再次缓存下来
GTim
2013-08-22 08:12:39 +08:00
@javaluo 做静态文件是虚耗硬盘资源...这个可以直接查库..挖坟是可耻的要怎么保障??
@Livid 很多同感

orm开发时的确比写sql语句舒服多了,但要求高性能和多表关联查询时,性能代价还是太高...看起来微不足道的3-10ms多余损耗,有时,看起来就是不爽,另外,ORM想要改变一些东西,很复杂很厌烦,然后,就没有然后了

mysql 只能说能不用就不用,看到多次往返io开销和多表关联查询,有时候不爽,但是没办法,嗨,mysql的并发限制,也是一大小伤

攻击方面,感触最深的还是木桶原理..有些高手就专门挑耗时的给你来几下,完蛋了...

缓存方面,NND的是很多人把数据扔上去了事,也不看是啥数据,更新频率和更新策略...最大的悲剧就是从来没想过要优化。redis虽然大于 memcached太多..但memcached也是有好处的..就是简单,单一,没有那么多数据结构

总的来说:如果不考虑性能,想咋整就咋整吧...反正高手的最大骄傲就是:步步精修
est
2013-08-22 08:17:19 +08:00
1. 我没记错的话,我觉得这个可能是 @livid 一开始选择 storm 这个ORM有问题。这玩意慢不说,到处都是坑
Livid
2013-08-22 08:26:40 +08:00
@est 去年四月时,和 @Kai 的目标是,我们需要在不到一个月的时间内,把网站从 GAE 上移植出来。在 GAE 上每多停留一周,就是额外的 $$$。

所以当时在技术选型时,需要找的是在用法上尽可能接近 GAE 的技术。Storm 和 datastore 非常像。

现在想想,还真是怀念那一个月啊。
jjx
2013-08-22 08:29:23 +08:00
sqlalchemy 需要性能和复杂查询的地方用sql expression, 其它用sqlalchemy orm。 我觉的是不错的选择
arzusyume
2013-08-22 09:14:14 +08:00
貌似这边把Google+的插入链接提取描述内容的功能误伤了
Numbcoder
2013-08-22 09:15:36 +08:00
@virushuo
@Livid
能分享一下,如果不用 MySql 的话,用什么比较好呢?
MongoDB ? 我感觉这个更不靠谱啊?
Livid
2013-08-22 09:17:02 +08:00
@Numbcoder 可能会完全只用 Redis。
buru
2013-08-22 09:17:33 +08:00
缓存设计可以参考一下reddit,everything get and update in cache.
ipconfiger
2013-08-22 09:18:58 +08:00
@Numbcoder postgresql相当靠谱
Mutoo
2013-08-22 09:28:45 +08:00
@Livid 用 Redis 的话,有什么比较好的持久化方案?
solo7net
2013-08-22 09:31:17 +08:00
我家里的IP好像被干掉了-0-
lambdaq
2013-08-22 09:34:18 +08:00
@Livid 这个算poor choice。

你没遇到过撑爆内存那种无奈感。persistence和recover一直是redis很大的问题。大型系统AOF一旦损坏就等着哭。

redis 只能作为简单 k-v 数据库,遇到 bbs/forum这种需要通过index去scan的东西,redis立刻跪。

48G redis服管理员路过~~~
whtsky
2013-08-22 09:45:10 +08:00
纯 Redis 当论坛数据库的话内存压力非常大吧
Python 社区貌似没有性能比较好的 MySQL 库,开发的时候还是选 PostgreSQL 比较好一点
bobopu
2013-08-22 09:46:55 +08:00
看了一下,还是incapsula的299刀套餐靠谱啊,每月300G+的抗d流量。。
Numbcoder
2013-08-22 09:47:53 +08:00
@Mutoo 可以试试 levelDB
@ipconfiger pg 性能不一定比 mysql 好把?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/79819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX