如何为新技术应用保驾护航 ( by liudaoru)
近期微博技术在使用HBase的过程中遇到了一些问题,刨除业务等其他因素,单从#系统稳定性#角度聊聊我的一些看法。 对于新技术的应用业务和架构有不同的视角,业务希望无论如何都要保持稳定,而架构则需要试错才能真正掌控住新技术。那怎么做才能保证新技术很好的落地哪?结合微博之前在Redis落地过程中的一些工作总结一下。
1、不影响核心业务是首要因素,如果核心业务总是出问题,业务会面临极大的压力,所以一般不建议核心业务直接上非常新的技术,而是建议使用比较成熟的技术;
2、如果业务可以使用新技术,则也需要通过各种手段确保业务不要感知技术的问题。以微博转发业务为例,我们的要求是通过缓存层可以使系统支撑1个小时左右,这样如果有小的问题,业务根本感知不到;
3、建立SLA机制,包括Slow情况下的快速失败,以及服务端异常情况下的快速失败,快速失败的机制包括很多种,微博这边使用较多的是定期探测机制和定时轮询机制,但无论怎么样如果整体可用性低于70%左右,为了不拖死整个服务,可以直接返回请求;
4、建立降级机制,确保可干预。出现故障时,领导们最怕的是技术对问题缺少干预手段,束手无策。所以,对新的技术,降级是非常重要的手段。降级最好的方式是通过proxy层,建立统一的降级机制,并跟运维的降级系统打通,这样出现问题时运维可以第一时间完成降级;
5、隔离机制,确保重要服务与其他服务隔离。新技术难免出现这样那样的问题,如果服务之间彼此较差,则重要服务会经常受影响。可以通过单独部署的方式,将重要服务进行隔离,从而减少出问题的概率;
6、做最坏情况下的应急方案。 由于对新技术的掌控性较差,所以很难覆盖主要的问题点,如果只有已出问题的预案,则预案的覆盖面会非常窄。比较好的方式是假设出现最坏的情况,那么应该如何处理,可以整理出一套系统的解决方案,并加以演练。以mysql为例,我们对DBA的SLA就是一个小时内能够从冷备构建一套完成的在线集群;
以上是我的一些经验总结,供大家参考。当然其他的监控、报警等也是必不可少的,由于比较常见就不再赘述。