今天线上服务出现了一个事故,思考下这个事故,觉得有好几个地方需要思考。
1 对于前端而言,代码回滚的功能是必须的。前端接口出现了问题,第一个应该想到的是将代码回滚到一个稳定版本。
2 缓存和数据库的使用,需要注意一个问题,当缓存失效的时候,可能会有大并发的请求去访问数据库,这个时候数据库会不会崩溃?如果这个时候数据库崩溃了,那么web前段机也会随之崩溃。
所以,缓存失效的时候去数据库访问这里必须有一个锁机制。
3 在处理缓存和数据库的关系的时候,缓存一般会去设置一个过期时间,是在这个过期时间到的时候,缓存中的数据自动删除呢?还是做伪过期?即在设置的时候单独设置一个expire过期时间,根据这个过期时间来判断是否过期,这个好处是这里的缓存中得数据除了做加速作用,还做了容灾处理,当后端数据库挂了的时候,缓存中的数据就会一直生效。
4 设置过期时间的时候是否需要将过期时间散列,这个是个技巧。
5 客户端不要做在XX点做接口调用的操作。这完全就相当于DDOS攻击了。客户端需要将所有接口做散列处理。不能集中。
6 报警和预警机制需要考虑。
7 再高深的技术不如让服务稳定最重要。
8 在做第三方请求处理的时候,需要问下自己,如果这个请求失败了怎么办?