一个二本生,他凭什么拿到阿里P7 Offer

耗子,是我之前的同事,一个对技术追求极高的90后Java工程师。虽然只读了普通本科院校,却拿到了阿里的P7 Offer。他凭什么拿到阿里Offer呢?我想主要是对技术的热情和对工作的专注力吧!

这不,最近他又开源了自己的作品,分布式ID生成器。我们来看看这个分布式ID生成器的技术方案!

背景

伴随互联网的发展,无论分布式系统、还是存储都变得更复杂、数据量更大,这些数据记录都需要唯一的标识。简单举例,数据库只用一张表时,通常使用数据库自带的自增ID就可以了,但分库分表后,数据库自带的自增ID就无法满足需求了,我们需要一个算法或者服务来产生分布式ID。

很多公司都会自研唯一ID生成服务,来满足唯一标识的问题。

ID-Generator

ID-Generator分布式ID生成器,解决在分布式系统唯一性标识生成复杂、不统一的问题,如数据库分库分表数据唯一标识、业务流水号、链路跟踪唯一标识等场景。提供一站式部署,稳定、高性能的ID生成服务。

功能介绍



提供全局唯一ID序号


  • 提供隔离增长序号,以唯一KEY为自增ID标识,类似数据库-表的自增id效果;

  • 支持自定义增长步长;

  • 支持固定前缀;

  • 支持固定位数;

  • 支持ID重置;

  • 无缝集成Dubbo、Spring Cloud;

  • 支持MyBatis插件,可直接插入ID;

  • 支持try it,查看模拟ID效果;

  • 支持页面配置,即时生效;

设计与实现


设计原则


  • 0成本接入,部署即可以使用;

  • 操作简单,页面配置,即时生效;

  • 功能丰富,不仅限于递增序列生成,同时支持各种流水号、前缀、日期、重置等功能;

  • 性能稳定,节点之间无状态,可以根据流量随时扩容;

  • 代码预留扩展,持续集成;

核心设计


ID-Generator采用业内常用的内存处理的方式,应用独立部署,提供生成ID能力的服务。服务启动时,先从存储系统中获得ID生成规则和取值范围,再经过计算生成ID值暂时存至内存。其它应用通过参数key调用ID服务,从内存获得ID值。服务定时检查内存剩余量,及时向内存补充ID值。

全局唯一ID生成算法基于Twitter开源的Snowflake算法。

  • 1bit-不用:符号位,0表示正数,1表示负数,ID都是正整数,所以为常数0不变;

  • 41bit-时间戳:精确到毫秒;

  • 10bit-工作机器id:通常需要依赖zookeeper等三方工具生成机器号,为减少其它依赖,此处使用本机mac地址计算方式,获得1-1024数值;

  • 12bit-序列号:流水号(每1毫秒,每1个节点,可以生产4096个ID,相当于能达到409万TPS的性能);

因使用Snowflake算法依赖机器时间,需要注意机器时间回拨问题。

框架


ID-Generator支持和Dubbo、Spring Cloud的无缝集成,满足大部分公司技术栈,部署即可使用。id-generator-core核心使用springboot2.1.X最新稳定版;id-generator-simple模块提供HTTP协议接口,支持多语言。

监控


id-generator-metric监控模块,使用HTTP协议实现注册/发现功能,监控各ID服务节点,采集ID服务中KEY的内存剩余量,便于更合理的设置内存容量与阈值。

存储


ID-Generator支持MySQL和Redis等多种数据存储方式,实现通过配置文件自动适配。配置方式:

---
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/idgenerator
    username: root
    password: root

#---
# 遵循SpringBoot规则,支持集群模式
#spring:
#  redis:
#    host: 127.0.0.1
#    port: 6379

扩展-MyBatis插件


为更易集成,代码更优雅,支持通过MyBatis插件以注解方式自动注入分布式唯一ID。例如:

//mybatis insert对象
public class DemoModel {
   
    /**
     * 注解实现自动注入,对应key=pay_id的ID值
     */
    @IdField("pay_id")
    private Integer test2;

}

欢迎交流-ID-Generator

  • GitHub:https://github.com/haozi2015/id-generator

  • ID-Generator交流QQ群:1087376248

更多干货请关注微信公众号:架构师进阶之路


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值