jiangyu / sharding-preemption
一个微分片预抢夺框架。
0.1.1
2015-12-06 13:35 UTC
Requires
- php: >=5.5
- symfony/var-dumper: ~3.0
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.8.*
This package is not auto-updated.
Last update: 2024-09-18 18:47:59 UTC
README
ShardingPreemption
一个微分片预抢夺框架。
假设你有100个分片,并且你有10个工作器来处理所有这些分片,所以每个工作器可以处理10个分片,每个分片只能由1个工作器处理。
通过将所有100个分片分成10个片段,并同时启动10个工作器,每个工作器尝试占用一个片段,最终他们可以接管所有这些分片。
如果工作器不在同一台机器上工作,那么可以引入一些DLM(分布式锁管理器)解决方案来实现这个目标。
$options = getopt('', ['worker:']);
$workerCount = isset($options['worker']) ? (int) $options['worker'] : 2;
$allShardSetting = [
'db1' => [
'host' => '127.0.0.1',
'port' => '3306',
'username' => 'hello',
'password' => 'world',
'database' => 'db1',
],
'db2' => [
'host' => '127.0.0.1',
'port' => '3307',
'username' => 'hello',
'password' => 'world',
'database' => 'db2',
],
'db3' => [
'host' => '127.0.0.1',
'port' => '3308',
'username' => 'hello',
'password' => 'world',
'database' => 'db3',
],
];
$skeleton = new PollMySQLOnSingleMachine($allShardSetting, function (ResourceCollection $slice) {
$sliceHash = $slice->getHashValue();
$pid = posix_getpid();
dump($pid.' acquired ownership on slice['.$sliceHash.'] =>');
dump($slice->getDigestion());
dump($pid.' working');
sleep(5);
dump($pid.' job done, quit');
});
$skeleton->setWorkerCount($workerCount);
$skeleton->poll();