摘要:
内容主要来自下面的链接:MySQL:互联网公司常用分库分表方案汇总! 一、为什么要分库分表: SQL执行效率:单表达到了几千万,甚至亿级的规模,即使通过索引来查询都很慢。 数据存储:如果数据库里有很多的表,数据量都很大,服务器的存储空间几乎耗尽。 机器负载:8核16G的机器部署的数据库,一般TPS不 阅读全文
摘要:
本文来自官方文档的简单总结,非原创!!! Leaf:美团分布式ID生成服务开源 一、背景: Leaf-segment方案可以生成趋势递增的ID,同时ID号是可计算的,不适用于订单ID生成场景, 比如竞对在两天中午12点分别下单,通过订单id号相减就能大致计算出公司一天的订单量,这个是不能忍受的。 所 阅读全文
摘要:
本文来自官方文档的简单总结,非原创!!! Leaf:美团分布式ID生成服务开源 一、改进: 原始方案每次获取ID都要读写数据库,数据库压力比较大。 每次获取一个号段的值(step决定大小),用完之后再去数据库获取新的号段,很大减轻数据库的压力。 各个业务不同的需求用biz_tag字段来区分。 如果以 阅读全文
摘要:
一、背景: SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位:不使用,二进制中最高位为1的都是负数,ID一般都使用正整数,所以这个最高位固定是0。 41位:用来记录时间戳(毫秒)。可以表示2 ^ 41 - 1个数字,转化成单位年则是(2 ^ 41 - 1) / 阅读全文
摘要:
一、背景: 当需要给数据添加唯一标识符,就需要分布式唯一ID生成器。 如果MySQL是单库单表,直接使用数据库的自增主键就可以了。 如果是分库分表,肯定无法使用自增主键来完成。 二、常见的分布式唯一ID生成方案: 1、数据库自增主键: 通过一个表来生成全局唯一ID,插入一条数据,返回一个全局唯一的I 阅读全文
摘要:
一、背景: HashMap在开发中经常用,面试源码方面也会经常问到,今天总结一下,包括在后面有相关面试题。 本文不会对红黑树代码由太多深入研究,特别是删除方面太复杂,面试也不会问到,知道红黑树基本实现原理就可以了。 源码基于jdk1.8,我们都知道1.8版本的HashMap有很大改变,通过数组+链表 阅读全文
摘要:
一、背景: 在大部分系统中,特别是面向C端的应用,都会遇到一个问题,就是如保证系统的高可用,总不能经常挂,那用户肯定不愿意用了,在这个过程,就需要考虑很多方面。 PS:这里假设系统架构及部署是合理的。 二、限流: 限流通常是第一步,假如系统能够承载的并发是1k,但是突然打过来的流量有3k,不做限流的 阅读全文
摘要:
一、背景: 分布式场景下,接口的开发大都需要保证幂等性。 幂等性:一个接口被调用,不管几次,产生一样的效果,一样返回结果。 接口调用过程中,很可能因为网络等原因进行重试调用,如果不能保证幂等性,那就完犊子了。 例如:用户支付的接口,用户有可能连续点击支付,总不能扣好几次钱吧。 二、场景: 1、前端重 阅读全文
摘要:
一、背景: 前面了解了分布式锁,做了最简单的入门了解,分布式锁(一)--基础 企业开发中使用最多的分布式锁,是Redis分布式锁,主要考虑到性能,以及Redis使用率高于ZK。 二、Redis实现可靠性分布式锁的条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持 阅读全文
摘要:
一、背景: 如果系统就是一个单体系统,不需要考虑这些问题,最多使用synchronized相关的锁解决并发问题。 但是一个分布式系统,肯定会遇到并发竞争共享资源的问题,这时通常就需要使用分布式锁解决。 二、举个栗子: 举个老生常谈的例子,商品库存的锁定。 用户购买iPhone,肯定需要锁定/扣减对应 阅读全文