1.ping底层原理
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
基于ICMP实现的tracert工作原理
在这一种实现中我们不使用UDP协议,而是直接发送一个ICMP回显请求(echo request)数据包,服务器在收到回显请求的时候会向客户端发送一个ICMP回显应答(echo reply)数据包。流程与上面相似,只是最后判断结束上为目标主机(而不是中间经过的主机或路由器)返回一个ICMP回显应答,则结束。
2.redis和mysql不一致的问题
强一致:写什么读什么
弱一致:某个时间一致
最终一致:一定时间内一致
Cache-Aside Pattern
Read-Through/Write through
Write behind
1.旁路缓存:
2.cache aside
3.read-through多了一个cache-provider
用删除缓存代替更新缓存不会出现两个线程同时更新的并发问题
cache aside先操作数据库可以保证mysql和redis都是新数据
4.读binlog异步删除缓存(重试删除缓存会造成业务代码入侵)
canal把binlog采集发送到mq队列中,通过ack机制确认更新信息
5.乐观锁防止旧覆盖新问题
用时间戳或版本号机制
3.scarpy分布式多机队列爬虫
主机:维护爬取队列
从机:负责数据抓取,数据处理,数据存储
队列如何维护:Redis队列
多个机器分成多个队列
根据机器的性能分配任务
4.mq按序消费
消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。举例:比如通过mysql binlog进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误
1.rabbit多消费者
2.多线程乱序
3.kafka
4.kafka
总结:
1.一一对应1topic partition 消费者 线程 or 1queue 1consumer
2.多线程的话,使用内存队列按序排保证顺序