随着互联网飞速发展,尤其像微博,移动支付行业,用户数据成几何倍数增长,传统的单库已无法满足业务的增长速度,于是就有了分库分表,对业务表进行垂直切分和水平切分,将数据存放在多个数据库中,这每个数据库中存放的业务数据就会相应减少,利于应用访问数据库速度。

       在享受分库分表带来查询速度提升便利的同时,这种切分方案也带来一些问题,例如数据路由,唯一序号等,今天主要说一下唯一序号解决方案

       第一种解决方案:使用UUID随机数,这种方案优点是使用简单,缺点是产生的随机数是128位,并且没有业务规则,不连续,占用数据库空间多,在业务数据量大时,会有性能下降

       第二种解决方案:使用Twitter的雪花算法(snowflake),此算法产生序号效率极高,每秒能产生26W个ID,但是也存在缺点,非常依赖NTP服务,如果NTP失效,服务器的时间滞后,则此雪花算法就会等待服务器时间追上,才会生成新的ID

       今天就说一下新的解决方案,其架构图如下所示

            

phoenix 分布式索引创建_phoenix 分布式索引创建


机房B的应用访问机房B的mysql数据库表seq_b,并只获取偶数的序号,2个机房业务均衡,基本无序号空洞产生。

并只获取奇数的序号,以此来实现架构的高可用。