以前就经常因为内网 DNS 问题超时。昨天晚上报了两个小时的 Malformed VALUE header (0),导致我所有的服务都崩溃了。
提工单也是答搭不理,根本不解决问题。
原来我是自己搭的 memcached ,后来切成了 OCS 。现在看来,又得切回去了……大家慎用啊!
1
realpg 2015-11-24 09:35:59 +08:00
以前发生过这种事儿……后来都改自建了……
不过应该吐槽一下,你的程序竟然没有 cache server 崩溃的 failsafe 么?哪怕数据库直读呢 |
2
ixiaozhi 2015-11-24 09:57:48 +08:00
昨晚挂了啊,我都不知晓呢。。。
|
3
nevernet 2015-11-24 09:59:46 +08:00
1 楼说的是 failsafe
|
4
Zhongwei 2015-11-24 09:59:50 +08:00
1. 内网 DNS 的稳定性不能指望,必须上 dnsmasq
2. cache 的理解是否有问题 |
5
beneo 2015-11-24 10:28:06 +08:00
没事,会赔偿你 memcached 使用费用的 100 倍的,逃
|
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,如果还有疑问可以在工单中反馈,会有人员及时跟进的。
|
7
iceiceberg OP @beneo 不会的
|
8
cnbiglee 2015-11-24 14:49:20 +08:00
话说,我也在用,没有任何异常。
memcache 不是数据库,他崩溃了,最多是从数据库等处读取数据,服务慢点而已,怎么会崩溃? 只能说你的代码不够健壮。 |
9
cloudbeyond 2015-11-24 14:53:18 +08:00
欢迎来 AWS 的 Elasticache
|
10
iceiceberg OP |
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 挂掉,基本就等于一个无数据的新系统,应该也不会功能错乱。 |
12
fire5 2015-11-24 15:54:41 +08:00
memcached redis 为什么不自己搭建? 为什么不自己搭建? 为什么不自己搭建?
|
13
iceiceberg OP @fire5 最早是自己搭的,因为不能热升级,就改成用 OCS 了。。。
|
14
Had 2015-11-24 23:17:06 +08:00
@cloudbeyond AWS 的 Redis 升级也不是热升级...
|
15
cnbiglee 2015-11-25 11:31:54 +08:00
@iceiceberg 当数据不存在时能把服务搞崩了的数据当然不能只在缓存里存在,如果没办法在其它地方存在,那就要做好异常处理,数据不存在时有预备方案,比如友好提示等。
|
16
iceiceberg OP @cnbiglee 明白!受教了!我马上改!
|