V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
iceiceberg
V2EX  ›  云计算

阿里云的 OCS( memcache)特别不靠谱

  •  
  •   iceiceberg · 2015-11-24 09:17:27 +08:00 · 5272 次点击
    这是一个创建于 3287 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前就经常因为内网 DNS 问题超时。昨天晚上报了两个小时的 Malformed VALUE header (0),导致我所有的服务都崩溃了。
    提工单也是答搭不理,根本不解决问题。
    原来我是自己搭的 memcached ,后来切成了 OCS 。现在看来,又得切回去了……大家慎用啊!

    16 条回复    2015-11-28 06:50:37 +08:00
    realpg
        1
    realpg  
       2015-11-24 09:35:59 +08:00
    以前发生过这种事儿……后来都改自建了……
    不过应该吐槽一下,你的程序竟然没有 cache server 崩溃的 failsafe 么?哪怕数据库直读呢
    ixiaozhi
        2
    ixiaozhi  
       2015-11-24 09:57:48 +08:00
    昨晚挂了啊,我都不知晓呢。。。
    nevernet
        3
    nevernet  
       2015-11-24 09:59:46 +08:00
    1 楼说的是 failsafe
    Zhongwei
        4
    Zhongwei  
       2015-11-24 09:59:50 +08:00
    1. 内网 DNS 的稳定性不能指望,必须上 dnsmasq
    2. cache 的理解是否有问题
    beneo
        5
    beneo  
       2015-11-24 10:28:06 +08:00
    没事,会赔偿你 memcached 使用费用的 100 倍的,逃
    aliyun123
        6
    aliyun123  
       2015-11-24 13:25:20 +08:00
    抱歉给您带来不便,今天凌晨 OCS 进行升级,升级期间用户 OCS 已建立的连接会出现闪断,自动重连后即可恢复,具体可以参考:http://help.aliyun.com/noticelist/articleid/7596863.html?spm=5176.383338.12398792.3.5TnlH3,如果还有疑问可以在工单中反馈,会有人员及时跟进的。
    iceiceberg
        7
    iceiceberg  
    OP
       2015-11-24 14:26:38 +08:00
    @beneo 不会的
    cnbiglee
        8
    cnbiglee  
       2015-11-24 14:49:20 +08:00
    话说,我也在用,没有任何异常。
    memcache 不是数据库,他崩溃了,最多是从数据库等处读取数据,服务慢点而已,怎么会崩溃?
    只能说你的代码不够健壮。
    cloudbeyond
        9
    cloudbeyond  
       2015-11-24 14:53:18 +08:00
    欢迎来 AWS 的 Elasticache
    iceiceberg
        10
    iceiceberg  
    OP
       2015-11-24 15:01:42 +08:00
    @cnbiglee 确实是……
    我 mem 里的东西很多不是数据库的缓存,而是单独存在的。一般都是些不需要长期存的数据。

    @realpg
    @Zhongwei
    我这种设计方式,是完全不可取的么?
    realpg
        11
    realpg  
       2015-11-24 15:31:22 +08:00   ❤️ 1
    @iceiceberg
    看你们的可用性要求了……

    反正总不能 cache 挂了就直接把乱七八糟的 error 抛给用户了……
    我以前给人做东西时候,各种变态测试就是去把数据库内容删了啊,把 cache 弄坏啊什么的,就算没法正常提供数据,服务也不能崩,好歹给友好的错误提示给用户,有条件保证的数据还是要给出的。


    从设计方式角度,首先 cache 里一般有这么几种数据:

    后面有 backend 的,为了提升性能,这种 cache 的封装访问,一定是自带 cache 不在了,从 backend 读取重建 cache 。
    这种基本逻辑就是,首先去 cache 里面 fetch ,如果 fetch 到 false ,那么去 backend 读,然后写 cache ,如果 cache server 不可用,那么记录 warning 给管理员,然后流程继续。

    另外一种,纯热数据,属于可以清空不影响逻辑的,后面没有 backend ,比如一个实时热词排序这种,数据如果清空是不影响前台展示,只能导致具体不准确。这种 cache server 挂掉,基本就等于一个无数据的新系统,应该也不会功能错乱。
    fire5
        12
    fire5  
       2015-11-24 15:54:41 +08:00
    memcached redis 为什么不自己搭建? 为什么不自己搭建? 为什么不自己搭建?
    iceiceberg
        13
    iceiceberg  
    OP
       2015-11-24 16:43:37 +08:00
    @fire5 最早是自己搭的,因为不能热升级,就改成用 OCS 了。。。
    Had
        14
    Had  
       2015-11-24 23:17:06 +08:00
    @cloudbeyond AWS 的 Redis 升级也不是热升级...
    cnbiglee
        15
    cnbiglee  
       2015-11-25 11:31:54 +08:00
    @iceiceberg 当数据不存在时能把服务搞崩了的数据当然不能只在缓存里存在,如果没办法在其它地方存在,那就要做好异常处理,数据不存在时有预备方案,比如友好提示等。
    iceiceberg
        16
    iceiceberg  
    OP
       2015-11-28 06:50:37 +08:00
    @cnbiglee 明白!受教了!我马上改!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1222 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:18 · PVG 02:18 · LAX 10:18 · JFK 13:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.