V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  V2EX

20100909

  •  
  •   Livid · 2010-09-09 03:43:52 +08:00 · 5861 次点击
    这是一个创建于 5193 天前的主题,其中的信息可能已经有所发展或是发生改变。
    关于昨天的 downtime 及更多的一些思考。

    http://picky.olivida.com/20100909
    22 条回复    1970-01-01 08:00:00 +08:00
    xiaojay
        1
    xiaojay  
       2010-09-09 08:11:47 +08:00
    @livid 这个gae流量统计软件是iphone什么app?
    Livid
        2
    Livid  
    MOD
    OP
       2010-09-09 08:13:38 +08:00
    byron
        3
    byron  
       2010-09-09 08:52:24 +08:00
    @Livid 好贵。下了下狠心,还是没买。
    apple
        4
    apple  
       2010-09-09 08:59:50 +08:00
    @kyron 开复的创新工厂不是开发了一个移动互联网的统计么?去试试他的
    ashchan
        5
    ashchan  
       2010-09-09 09:08:03 +08:00
    出乎意料,14K的PV居然就会超出GAE的默认CPU限制。
    Livid
        6
    Livid  
    MOD
    OP
       2010-09-09 09:11:36 +08:00
    /t/815 这样的超长帖子,在 GAE 上渲染会超过 1000ms,而这个帖子是昨天的热点。

    如果各位有什么好的优化方法(除了分页之外),还希望多多赐教。
    Livid
        7
    Livid  
    MOD
    OP
       2010-09-09 09:14:23 +08:00
    而一个用了 datastore/memcache,带有 session 的页面,在 GAE 上渲染至少要 100~200 ms。差不多是传统 LAMP 的 10 倍。

    这是 Python 的真实情况,不知道 Java 会如何。
    Kenyth
        8
    Kenyth  
       2010-09-09 10:55:00 +08:00
    @Livid 从我的经验Java比Python实现的没有性能优势,有时候甚至性能更差,就datastore来说,Java实现官方推荐的不是low-level api,而是JDO/JPA,我几个月前用的时候有些操作你甚至都不能用到性能最优的low-level api,因为已经被抽象过了。
    ashchan
        9
    ashchan  
       2010-09-09 14:07:48 +08:00
    GAE除了 memcached,可以进行静态缓存吗?如果不行,可否尝试直接在memcached中缓存页面片断。另外,象/t/815这类页面,回复内容可以根据最后更新时间和post为key进行缓存,各个回复上的 x hours, x minutes ago可以通过JS来实现从而将性能负载转移到客户端。用户登录的所有相关页面部分也可以以JS的方式来通过另一个request来加载。
    e6nian
        10
    e6nian  
       2010-09-09 14:12:14 +08:00
    babel 和gae 如果支持master-slave的分布式部署就不成问题了.
    一个nginx 前段,后端带上N个GAE.
    minghua
        11
    minghua  
       2010-09-09 14:59:49 +08:00
    @apple Livid 说的统计Analytics 流量的app是google Analytics的客户端,是网站流量统计。

    创新工场的友盟(http://www.umeng.com) 是 app 使用情况的统计服务,目前有iPhone,android sdk。
    huacnlee
        12
    huacnlee  
       2010-09-09 23:53:43 +08:00 via iPad
    @ashchan JS异步加载登录状态的体验非常不好,我现在的项目就是这样弄的,都准备去掉了,但一直没更好的方案。

    缓存用最后回复时间这个方法不错,受教了,这种方式应该都可以把清除动作省下了,以Memcached 的过期机制的话
    Livid
        13
    Livid  
    MOD
    OP
       2010-09-09 23:59:51 +08:00
    @ashchan 非常感谢你的思路。

    Django 的 template filter 也是消耗 CPU 的另一源头,目前页面上的 x hours xx seconds ago 即是通过 template filter。如果能够将这些负载挪到浏览器,对性能肯定有帮助。

    目前对于主题的 content 已经使用了将渲染结果保存为 content_rendered 的方法来优化,但是对 reply 也这样做的话,长远会消耗 2 倍的存储空间,所以我还在考虑中。
    apple
        14
    apple  
       2010-09-10 00:01:30 +08:00
    @e6nian 这个方法比较邪恶。就是申请N个免费gae的流量,集中到一个站去使用。我曾经这么想过,但是恐怕google有对策,而且效率也是个问题。
    huacnlee
        15
    huacnlee  
       2010-09-10 00:07:29 +08:00 via iPad
    如 @ashchan 说所的,如果将回复列表HTML结果缓存掉,节省下来的东西会有很多。只不过用户信息改变后的同步会成问题,不过还好现在只有头像和用户名,用户名是无法改的,没问题,头像的话可以改为动态的地址,像Gavater那样用ID或用户名到一个固定地址获得图片,如 http://v2ex.com/avater?id=67
    Livid
        16
    Livid  
    MOD
    OP
       2010-09-10 00:11:53 +08:00
    其实我记得目前页面上的回复是有缓存的。

    但是 /t/815 为什么还那么慢,有一种可能就是,memcache 能够接受的对象尺寸有限制?比如 1M,但是 /t/815 很可能超过 1M 了。

    我再仔细看看文档。
    Livid
        17
    Livid  
    MOD
    OP
       2010-09-10 00:15:01 +08:00
    http://code.google.com/appengine/docs/python/memcache/clientclass.html#Client_set

    set(key, value, time=0, min_compress_len=0, namespace=None)

    Sets a key's value, regardless of previous contents in cache.

    Arguments:

    key

    Key to set. The Key can be a string or a tuple of (hash_value, string) where the hash_value, normally used for sharding onto a memcache instance, is instead ignored, as Google App Engine deals with the sharding transparently.

    value

    Value to set. The value type can be any value supported by the Python pickle module for serializing values. The combined size of the serialized key and value must be at most 1 megabyte.

    囧了。。。
    Livid
        18
    Livid  
    MOD
    OP
       2010-09-10 00:16:00 +08:00
    我研究下看看 Python 标准库里有没有什么靠谱的压缩手段。
    Los
        19
    Los  
       2010-09-10 00:27:26 +08:00
    @Livid 分页,没办法不考虑一下这最靠谱的解决方法了。
    zhendi
        20
    zhendi  
       2010-09-10 00:33:23 +08:00
    压缩的话,可以试试zlib模块:
    http://docs.python.org/release/2.5.2/lib/module-zlib.html
    Livid
        21
    Livid  
    MOD
    OP
       2010-09-10 00:47:25 +08:00
    现在加入了一些更多的优化。

    接下来就是做主题分页了。
    ashchan
        22
    ashchan  
       2010-09-13 07:47:05 +08:00
    超过一M是所有的回复的大小吗?我在Rails里用缓存常用的手段是将分页号也加到key里面,每个页面都是单独的缓存,而不是整个POST的所有内容放在一起。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4764 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:05 · PVG 18:05 · LAX 02:05 · JFK 05:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.