关闭

扯谈下XA事务

普通事务的实现是比较好理解的。以jdbm3为例,大概是这样的过程: 每个事务都新建一个事务文件,当commit时,先把修改过的数据块,写到事务文件里,然后再一次性地写到数据库文件里。 如果commit时挂掉了,那么重启之后,会再次从事务文件里把修改过的块写到数据库文件里。最后再删除事务文件。 https://github.com/jankotek/JDBM3 但是XA事务,即所...
阅读(13988) 评论(2)

利用redis + lua解决抢红包高并发的问题

抢红包的需求分析 抢红包的场景有点像秒杀,但是要比秒杀简单点。 因为秒杀通常要和库存相关。而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可。 另外像小米这样的抢购也要比淘宝的要简单,也是因为像小米这样是一个公司的,如果有少量没有抢到,则下次再抢,人工修复下数据是很简单的事。而像淘宝这么多商品,要是每一个都存在着修复数据的风险,那如果出故障了则很...
阅读(95367) 评论(27)

抢红包的红包生成算法

过年微信红包很火,虽然我没有抢过,但是有个项目也要做抢红包,于是写了个红包的生成算法。 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。 最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围...
阅读(44203) 评论(15)

分片(Sharding)的全局ID生成

数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求: 不能有单点故障。 以时间为序,或者ID里包含时间。这样一是可以少一个索引,二是冷热数据容易分离。 可以控制ShardingId。比如某一个用户的文章要放在同一个分片内,这样查询效率高,修改也容易。 不要太长,最好64bit。使用long比较好操作,如果是96bit,那就要各种移位相当的不方便,还有可能有些组件不能支持这么大的ID。...
阅读(13692) 评论(2)

zookeeper运维

尽管zookeeper在编程上有很多的阱陷,API也非常的难用,但zookeeper服务本身可以说是很牢靠的了,所以在网上貌似关于运维的文章比较少。 但省心并不代表不会出麻烦,下面总结下zookeeper运维相关的东东。 重要的参考资料 这里有一个很好的Pdf,介绍了很多zookeeper的东东,作者是zookeeper的committer之一: http://www.infoq.com/...
阅读(51681) 评论(3)

Linux配置启动项,自启动服务

Linux下有两种机制,一个是旧式的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart机制。 参考:http://www.cnblogs.com/cassvin/archive/2011/12/25/ubuntu_init_analysis.html 这个也可以说是Linux的蛋疼的地方了,启动的...
阅读(12755) 评论(0)
    个人资料
    • 访问:1582149次
    • 积分:11421
    • 等级:
    • 排名:第1415名
    • 原创:129篇
    • 转载:29篇
    • 译文:2篇
    • 评论:342条
    博客专栏
    文章分类
    最新评论