当前位置: 首页 > news >正文

大兴区制作网站的公司建设银行国际互联网网站

大兴区制作网站的公司,建设银行国际互联网网站,网站设计的原则有哪些,国外浏览器app这里写自定义目录标题 一、业务场景二、技术选型1、UUID方案2、Leaf方案-美团#xff08;基于数据库自增id#xff09;3、Snowflake雪花算法方案 总结 一、业务场景 大量的业务数据需要保存到数据库中#xff0c;原来的单库单表的方式扛不住大数据量、高并发#xff0c;需… 这里写自定义目录标题 一、业务场景二、技术选型1、UUID方案2、Leaf方案-美团基于数据库自增id3、Snowflake雪花算法方案 总结 一、业务场景 大量的业务数据需要保存到数据库中原来的单库单表的方式扛不住大数据量、高并发需要分库分表这样原来的数据库自增id作为主键就不能满足业务需求需要有一个在分库分表中的唯一标识id作为主键这个id需要有如下要求 全局唯一性趋势递增在MySQL的InnoDB中使用的是聚焦索引用的是B-tree的数据结构来存储索引数据所以要尽量选用有序的主键来保证写入性能信息安全不能通过主键看出业务信息 二、技术选型 1、UUID方案 uuid是32位数的16进制数字所构成以连字号分为五段总共有 36个字符即三十二个英数字母和四个连字号550e8400-e29b-41d4-a716-446655440000所以理论上uuid的总数有16^32基本用不完。 优点 性能非常强本地内存生成。 缺点 36个字符串存储太长了而且生成的id是无序的MySQL要求主键越短越好同时要有序保证索引的写入性能。 2、Leaf方案-美团基于数据库自增id 在数据库中设计一张表用于生成自增id | biz_tag | maxId | step | user_tab | 2000 | 1000 | home_tab | 3000 | 2000 biz_tag是业务表名用来区分业务maxId是目前所被分配的id号段的最大值step是每次分配的长度。Leaf微服务从数据库中一次取step个号码端比如step为1000则每次取1000个到Leaf服务内存中用于应用层调用接口获取主键id每调一次加一内存中的1000个用完后Leaf再去数据库取一次号码段取的时候maxId也会相应更新。这样Leaf服务和数据库交互频率就大大减少性能瓶颈就不在数据库而在于Leaf微服务而Leaf服务是无状态的因此可以根据实际需求横向扩展可以部署多个Leaf微服务用于获取主键id 优点 扩展性好可以随着业务的发展线性扩展多个Leaf服务生成的主键id是趋势递增的8byte的64位数符合数据库存储的主键id要求容灾性好即使DB宕机一会Leaf服务内存中缓存的号码段可以支撑一段时间等待DB恢复maxId可以自定义大小方便其他业务ID迁移到Leaf服务。 缺点ID不够随机安全性不够TP999性能波动大当某一时刻多个Leaf服务的号码段都使用到999最后一个时同时调用数据库获取号码端会造成偶尔的突刺导致获取主键ID延迟。DB数据库长时间宕机会导致整个服务不可用。 优化 争对TP999可以采用提前获取号码段双buffer的方式当Leaf内存中还剩下指定的号码时eg800就提前获取下1000个号码段放到内存中即Leaf服务内部有两个号段缓存区segment这样当数据库调用延迟需要等待时Leaf服务还有号码段可以对外提供服务。 DB数据库可以采用一主两从的方式或者用多机房提高容灾性。 3、Snowflake雪花算法方案 Snowflake算法可以生成64位的ID刚好可以用Long型存储并且生成的ID有大致的顺序它以划分命名空间的方式讲64-bit位划分为4个部分 0 - 41位时间戳 - 10位机器id - 12位序列号 第一位是符号位不用。第二部分是41位的时间戳可以表示2^41个数每个数代表毫秒ms。第三部分是10位的机器id即2^101024台机器实际中用不到这么多机器可以进一步细分加上机房信息或者业务信息。第四部分是12位的自增序列2^124096个数即理论上1ms内一台机器支持4096个请求。 Java实现 /*** twitter的snowflake算法 -- java实现* */ public class SnowFlake {/*** 每一部分占用的位数*/private final static long SEQUENCE_BIT 12; //序列号占用的位数private final static long MACHINE_BIT 5; //机器标识占用的位数private final static long DATACENTER_BIT 5;//数据中心占用的位数/*** 每一部分的最大值*/private final static long MAX_DATACENTER_NUM -1L ^ (-1L DATACENTER_BIT);private final static long MAX_MACHINE_NUM -1L ^ (-1L MACHINE_BIT);private final static long MAX_SEQUENCE -1L ^ (-1L SEQUENCE_BIT);/*** 每一部分向左的位移*/private final static long MACHINE_LEFT SEQUENCE_BIT;private final static long DATACENTER_LEFT SEQUENCE_BIT MACHINE_BIT;private final static long TIMESTMP_LEFT DATACENTER_LEFT DATACENTER_BIT;private long datacenterId; //数据中心private long machineId; //机器标识private long sequence 0L; //序列号private long lastStmp -1L;//上一次时间戳public SnowFlake(long datacenterId, long machineId) {if (datacenterId MAX_DATACENTER_NUM || datacenterId 0) {throw new IllegalArgumentException(datacenterId cant be greater than MAX_DATACENTER_NUM or less than 0);}if (machineId MAX_MACHINE_NUM || machineId 0) {throw new IllegalArgumentException(machineId cant be greater than MAX_MACHINE_NUM or less than 0);}this.datacenterId datacenterId;this.machineId machineId;}/*** 产生下一个ID** return*/public synchronized long nextId() {long currStmp getNewstmp();if (currStmp lastStmp) {// 时钟回拨问题怎么处理throw new RuntimeException(Clock moved backwards. Refusing to generate id);}if (currStmp lastStmp) {//相同毫秒内序列号自增sequence (sequence 1) MAX_SEQUENCE;//同一毫秒的序列数已经达到最大if (sequence 0L) {currStmp getNextMill();}} else {//不同毫秒内序列号置为0sequence 0L;}lastStmp currStmp;return (currStmp TIMESTMP_LEFT) //时间戳部分| (datacenterId DATACENTER_LEFT) //数据中心部分| (machineId MACHINE_LEFT) //机器标识部分| sequence; //序列号部分}private long getNextMill() {long mill getNewstmp();while (mill lastStmp) {mill getNewstmp();}return mill;}private long getNewstmp() {return System.currentTimeMillis();}public static void main(String[] args) {SnowFlake snowFlake new SnowFlake(1, 1);for (int i 0; i (1 12); i) {System.out.println(snowFlake.nextId());}} }时钟回拨问题 当某台机器的时间出现了问题回到了前几秒则调用该机器雪花算法时会生成重复的id因为前几秒是时间已经生成过id了。 根据实际的业务和机器的情况不同有几种解决方案 当回拨的时间不长比如不到100ms小于接口调用超时时间则可以用sleep方法等待时间正常。当回拨时间适中比如100ms~1s内等待的话会接口超时这种情况可以将前一秒的每个ms的最大序列号维护在缓存中然后maxId1。当回拨时间比较长可以重试调用其他机器生成id等过一段时间再调用该机器。或者直接把这个机器下线掉。 雪花算法生成架构 部署多个服务通过服务发现被应用服务调用同时机器id可以动态通过zookeeper可以生成自增序列获取。 总结 分布式主键id的生成方式有很多种最重要的是根据自己的实际业务情况来选择最合适自己的一种方式。
http://www.hkea.cn/news/14521617/

相关文章:

  • 怎么开发销售网站农家乐网站建设多少钱
  • 做网站需要会写代码吗wordpress过滤用户输入数据库
  • 网站建设公司怎么开php 网站伪静态
  • 永春建设局网站html网站开发流程
  • 建设公司设计公司网站十堰做网站公司
  • 简述新建站点的步骤长沙网站seo厂家
  • dede安装好后是模板怎么变成做好的网站企业门户网站建设行情
  • 西安建设主管部门官方网站天津手机网站建设
  • 高校网站建设及管理制度天津北辰做网站
  • 临安做企业网站网站在线咨询怎么做
  • 长春模板建站公司网站建设方案标准模板
  • gucci网站广告设计软件叫什么
  • 鞍山百度网站怎么制作网站建设费用组成
  • 免费学编程网站商务网站开发的流程
  • 公司做网站可以永久买断吗网站开发个人基本情况1000字
  • 怎么做论坛社区网站wordpress 分类页 获取别名
  • 现代装修风格三室两厅效果图重庆镇海seo整站优化价格
  • 太原网站建设信息推荐企业邮箱在哪里注册
  • 为什么别的电脑能打开的网站我的电脑打不开自适应网站导航是怎么做的
  • 做网站如何变现wordpress站点地图样式
  • 网站模板怎么引用泉州百度首页优化
  • 旅游景区英文网站建设研究重庆十大装饰公司排名
  • 什么网站可以做平面赚钱做网站哪好
  • 用花生壳做映射的网站需要备案网站直播的功能怎样做
  • 百度网网站建设的目标哪里做网站比较号
  • 姓氏网站建设的意见和建议神秘网站
  • 网站策划和网站制作什么叫模板网站
  • 营销型网站建设要点百度竞价推广联系方式
  • 网站功能设计有哪些要求自己的网站服务器
  • 宝马itms做课网站电子商务网站平台建设