在面试的时候,项目聊着聊着,面试官经常会甩来一个突袭疑问:如何保证可靠性。首先这个问题是非常的宽泛,可靠性这个会出现在多种场景,今天来看看关于可靠性的场景,以及在对应场景下,又是如何保障的
网络可靠性
大部分计算机专业的同学一定会上一门叫《计算机网络》的课程,提到计算机网络,那么TCP网络传输的可靠性,肯定是考试必考的(谁曾想这么多年,才领悟到 网络/操作系统/数据结构 是贯穿程序员的从业。。
回归正题,网络传输是复杂且变化的,所谓的可靠就是保障数据完整(能够按照序号进行拼接,没有丢失)且正确(不被篡改)被接收到。主要通过以下机制实现
消息队列可靠性
找工作的同学们经常会被问到有没有在工作使用过消息队列,继而来到熟悉的八股文,请问消息队列是如何保证消息可靠性。这个问题建议通过消息的生产->消息存储->消息消费,这个流程的三步来思考
Redis数据可靠性
缓存大户Redis,是也会问到怎么保障可靠性,这块的可靠性主要是指数据的可靠性,同消息队列的存储,需要考虑数据持久化以及服务重启后恢复机制,那么就需要了解持久化机制:RDB,AOF
系统/服务可靠性
还有很多时候,会把系统的高可用性约等于可靠性,常见的指标就是SLA几个9,用来表示系统全年的可用时间。像Redis也是一种中间件类型的服务,为了保障服务可靠性,有哨兵/主从/集群等部署方式。常见方法就是搞多个服务节点,具体是主从还是主备,可以下去详细了解一下
可靠套路
总结一下,常说的可靠性在不同的场景下涉及的内容是不一样的,但无外呼两方面:1.数据可靠性 2.服务可靠性
针对数据,最核心的就是ACK和持久化,来保障不丢失,针对服务,最核心的就是多节点,来保障不会因为单点而无法提供服务
转载:https://mp.weixin.qq.com/s/r48k3ePcuB975kgUGGdBqQ
欢迎关注公众号:大头兵Tomato