高并发,可扩展,高可用。
主从切换
负载均衡调度算法
可扩展
注册中心集群 注册中心和服务端长连接
Redis和Memcach有什么区别
Redis支持持久化。
集群中每个实例之间互相感知。而MC通过客户端进行路由。
kafka和rocketmq区别,设计思想。
3.spring cloud 和dubbo和service mesh思想
4.如何保证高并发服务的高可用。
分布式缓存搭建
脑裂问题如何解决
总结netty。
Hystrix的设计原则包括:
资源隔离
熔断器
命令模式
加权轮询算法
【结合实际项目场景】
多级缓存如何做
消息队列如何保障一致性
分布式一致性,生产环境中出现的分布式一致性场景
分布式事务解决方案!
缓存和DB数据一致性
最终一致性
缓存一致性问题
多个服务之间事务协调,一致性问题。
高并发问题,除了熔断限流服务保护,软负载加机器,数据库缓存水平扩展以外,还有没有其他问题要考虑的。
热点数据发现问题
程序排查问题:
偶尔CPU飙高,部分响应超时。
详细地描述用户从前端发起一个请求到后端服务的整个流程,甚至细化到IP层。
红包问题
nginx 负载均衡
cdn 使用原理
web 安全
mq消息发送一致性问题
缓存一致性方案问题
1.
缓存:
Redis
Memcached
Tair
三者区别及优劣:
还有基于AOF追加增量的持久化。在每次执行命令后,将命令加到缓冲区末尾。 每次执行完写命令后,判断是否要将缓冲区落到磁盘。
有三种策略:always 每次执行完命令调用fsync, every second每秒调用和no不显示调用,由操作系统决定。 AOF重写操作
来压缩AOF文件,重写不需要读取原来的AOF文件,而是根据当前数据库状态来重写。
Memcached集群部署需要使用Memcached客户端来实现,集群中的机器互不感知。客户端需要Memcached协议,然后实现sharding机制,故障转移等,可以有多种实现,如Spymemcached,Xmemcached。
如何扩缩容:
对于Redis集群通常采用重新分片的方式,将槽从一个节点改到另一个节点,可以动态扩容。如果处于迁移过程中,一个槽中的部分key分别分散在两个节点中,那么可以节点会先在自己这里找,找到就返回,
否则返回客户端ASK错误,指引客户端去新的目标节点。通过向服务端发送CLUSTER ADDSLOTS来指派槽,CLUSTER KEYSLOT “key” 来看key在哪个槽。重新分片,redis-trib,首先向目标节点发送
CLUSTER SETSLOT IMPORTING
再用MIGRATE一个key一个key的迁移到目标节点。
对于Memcached,可以采用ZooKeeper来管理,新节点上线时,将节点添加到ZooKeeper上。Memcached监听Zookeeper节点状态,类似注册发现的机制,然后客户端根据获取到的服务器节点信息
进行软负载,采用一致性hash的方式。
高可用实现:
Redis集群中每个Master可以有一个到多个slave, 当一个节点没有Slave时,可以将其他Master的Slave机器变成它的。所以集群中保留master * 2 +1个节点就可以保证高可用。
Redis集群也可以读写分离,slave可以设置为READONLY模式。
redis主从支持failover主从切换, sentinel机制。sentinel之间两两长连接,同时向master发送心跳包,当master未正确响应时,将Master置为主观不可用,然后向其他sentinel进行确认,
一旦发现主观不可用数量超过临界值,则设置为客观不可用,进入failover流程。sentinel之间通过类似于raft协议实现选举,由选举出的leader执行failover操作。
而Memcached本身不支持任何fail-over和高可用机制。面对单点故障可以使用主从模式解决,而主从模式不是master-slave同盟国不的方式,而是由客户端进行双写来实现,双写时
要注意主从的一致性。
可以通过客户端来实现failover机制,比如Spymemcached实现三种容错机制。Redistribute(重新分配),Retry(重试), Cancel。如果路由到失败节点,则根据策略选择下一个节点,
有点是可以提高可用性,一个节点挂掉会failover到其他节点,缺点是会导致大量回源,节点启动后会再次回源。
Memcached的高可用和扩展机制依赖外部系统的协助,比如Mcrouter。
功能上的区别。
redis 有多种数据结构,而Memcached只有key-value。
redis 可以做一些业务操作,比如lua,watch,事务。
内存管理的区别。
Memcached采用Slab + Chunk的机制进行内存管理,避免了频繁向操作系统申请和释放内存,同时也解决了内存碎片的问题。Slab就是一组大小相等的Chunk块,根据存储数据的大小决定
存入哪个chunk中。这种方式会导致一定的内存浪费,比如chunk是112字节,存储的数据是100字节,会导致12字节的浪费。
key过期机制的实现。
缓存常见问题:
缓存架构的设计
分布式系统中出现的问题