摘要:
风起 2009 年微博刚刚上线的时候,微博关系服务使用的是最传统的 Memcache+Mysql 的方案。Mysql 按 uid hash 进行了分库分表,表结构非常简单: tid fromuid touid addTime 自增 id 关系主体 关系客体 加关注时间业务方存在两种查询: 查询用户的 阅读全文
摘要:
Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型数据库的b-tree索引快在哪里?到底为什么快呢? 笼统的来说,b-tree索引是为写 阅读全文
摘要:
HTTP/3原理 HTTP/3的来源 由于TCP和UDP两者在运输层存在一定差异,TCP的传递效率与UDP相比有天然劣势,于是Google基于UDP开发出了新的协议QUIC(Quick UDP Internet Connections),希望取代TCP提高传输效率,后经过协商将QUIC协议更名为HT 阅读全文
摘要:
数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程。 它的原理是消除不必要的数据或以更高效的格式重新组织数据。在进行数据压缩时,你可以选择使用有损方法或无损方法。有损方法会永久性地擦除掉一些数据,而无损方法则能保证持有全部的数据。使用哪类方法取决于你要让你的文件保持多大的精准度。 本文会为你介 阅读全文
摘要:
一、部署图 主要跟架构部署有关,例如客户端、节点、网关、队列、数据库等 二、用例图 三、时序图 四、ER图 五、领域图 阅读全文
摘要:
什么是实时协同编辑 这里所说的实时协同编辑,是指多人同时编辑一个文档,最典型的例子是 Google Docs,你可以实时看到别人做出的修改,不用手动刷新页面。 要实现实时编辑,我们需要解决两个技术点:实时通信问题、编辑冲突问题,其中实时通信问题比较好解决,可以使用 long pull 或 WebSo 阅读全文
摘要:
四种常用的解决方案 方案一:Cache Aside Pattern 读请求 先读缓存再读库 如果缓存命中,返回数据 如果缓存未命中,读库并把数据写入缓存,然后再返回 写请求 数据写库 删除缓存 这里很重要的一点在写请求中,要删除缓存而不是更新缓存。缓存的更新会发生在下一次读请求时。这里为什么会选择删 阅读全文
摘要:
1、zookeeper 实现方式: 方案1:利用节点名称的唯一性来实现共享锁。 算法思路: 利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁。解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节点,直到所有客户端都获得锁。 阅读全文