加载中…
博文
(2015-07-29 20:50)

大致分为3类:

1. 基于内容的搜索
例如:gnutella,有中央服务器记录内容分布的节点,之后节点间直接传递数据

2. ​​把请求路由到目标节点
例如:pastry,chord

3. gossip​

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 

事务内每个更新操作都会被cache,直到commit的时候,才会写binlog。如果是rollback,则cached statement直接被丢弃。
假设tx里的表都是InnoDB,那么在commit的时候,mysql的操作是怎样的?
步骤1. mysql会先把prepared statements按照顺序写入binlog,如果sync_binlog=1,那么每次把statement写入binlog后,都执行一遍fd.sync()
步骤2. ​commit this tx to InnoDB

问题来了,如果步骤1和2之间,服务器崩溃了,怎么办?
该tx会被InnoDB rollback,但已经写入binlog的内容不会被rollback,也就是数据出现不
一致了。
mysql的解决办法,是需要把innodb-support-xa设置为1,其实默认就是1的。原理如下:
在crash后,重启恢复阶段,mysql会进行tx rollback,并从binlog里把rollback的tx去除掉,也就是说,不会造成master slave数据不一致的情况​

SELECT/SHOW这样的非改写操作是不会记录到binlog的;如果是基于statement,则DELETE FROM X WHERE 1>

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 

1989年standford提出的

一个人发放lease(租约合同),该lease有有效期,在该有效期内,发放者(具有写权限的master)承诺在有效期到达前,不会修改数据,cache slaves就可以放心地给client返回cahce内的数据。

如果master要修改数据,那么就必须征得所以slave的同意(既然你已经承诺了,你就要负责任),slave同意了就把本地的cache打掉​,然后master才能修改数据

cache slave在从master获取数据的时候,同时也获取了lease,只要:

1. 服务器没有主动修改这个合同

2. 合同没有到期

那任何人问我关于这个合同的相关的数据,我都可以放心地返回

如果合同到期,那么slave需要续约

master必须记住每个slave

有效期是具体的到期时间点,而非时间段,为了解决网络时钟的不同步,续约时间可以

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 

https://www.serfdom.io/docs/internals/simulator.html

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
前后端开发时,要遵守共同的参数规则。如何让这个规则对双方都是稳定的,而且可以自动测试的?
前、后端开发的进度不同,如何让他们人员松耦合,在联调时不必等待另外一方?

写了个工具,来完成这样的需求:
1. 自动生成接口文档
2. 自动生成给前端调用的mock service/mock data
3. 自动生成后端自动集成测试的脚本

https://github.com/funkygao/automan
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2014-02-18 23:01)
分类: golang
每秒可以创建多少个空的goroutine?
写个简单的benchmark测试,结果如下:

BenchmarkGoroutine 1000000     21795 ns/op

每次go调用,用时22us,也就是每秒4万多

硬件:27-inch, Mid 2010 双核 3.2GHz Intel Core i3
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2014-02-14 22:14)
分类: golang
在memcache的中间层实现上,利用了memcache的flags,来处理压缩数据和序列化
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2014-02-10 21:51)
分类: golang
利用春节7天长假,写了个一直没时间写的一个SOA中间层基础框架:
https://github.com/funkygao/fae

把后端服务(memcache/mongodb等)都封到中间层,python/php等通过中间层的接口实现后端的访问,使用
了facebook thrift

不过,facebook thrift的坑很多,bug也不少,春节后几天都在填坑。。。

今天,把公司里的memcache服务,都替换成了这个中间层访问,上午在QA机器上跑,出现了一些问题,稍作调整,面前运行良好。
下一步,准备把mongodb的访问都替换过来,不过这部分要比memcache难度大一些,主要是需要兼容现有php代码,估计得一周时间能够上线
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: golang
最近调试一个高并发的代码,运行几个小时后,出现
panic: runtime error: invalid memory address or nil pointer dereference

到对应的代码处,也看不出问题

后来,发现golang本身就支持race detector,能自动帮你发现哪里有问题
go build -race 

加上这个参数后,就可以让golang自动帮你找出问题了,当运行时,自动发现race condition
下面是它给我的代码的提示
==================
WARNING: DATA RACE
Read by goroutine 13:
  runtime.mapaccess2_faststr()
      /usr/local/go/src/pkg/runtime/hashmap_fast.c:129 +0x0
  github.com/funkygao/go-simplejson.(*Json).Get()
      /mnt/funplus/gocode/src/github.com/funkygao/go-simplejson/simplejson.go:58 +0x73
  github.com/funkygao/go-simplejson.(*Json).DeepGet()
      /mnt/funplus/gocode/src/github
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2013-12-30 21:35)
分类: 运维OPS

Linux provides cpusets, which allow CPUs to be grouped and processes assigned to them. This can improve performance similarly to process binding, but performance can be improved further by making the cpuset exclusive—preventing other processes from using it. The trade-off is a reduction in available CPU for the rest of the system.

The following commented example creates an exclusive set:

 

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
个人资料
funkygao
funkygao
  • 博客等级:
  • 博客积分:0
  • 博客访问:130,987
  • 关注人气:35
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
搜博主文章
相册专辑
加载中…
访客
加载中…
评论
加载中…
留言
加载中…
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有