Seeker是一个基于Swoole实现的服务架构整体实现
实现服务
- Master:负责管理所有节点
- Node:用于管理该节点下所有的Service
- ServiceProcess:运行具体的业逻辑
- Harbor:用于转发协议,连接所有Node.
- CLI命令行管理Master, 增加节点,发布service process ....
- 并行远程service调用
- 对发Node发出的协议 超时管理
- HTTP异步下载文件,用于节点收到发布任务时 进行下载执行源码或是文件
- .....
- ConnectClient向Node 进行协议注册
- 消息分发器
- 远程调用
- .....
php ./bin/launcher.php --host=0.0.0.0 --port=9901 --type=master
php ./bin/launcher.php --host=0.0.0.0 --port=9901 --type=node
php ./bin/launcher.php --host=0.0.0.0 --port=9901 --type=harbor
需要将目录切换到seeker的上次目录。
php ./seeker/bin/service.php --process=user --version=2.0.1 --vendor=./vendor --debug-user=./seeker/bin/demo/user/2.0.1 --debug-widget-demo=./seeker/bin/demo/widget_demo/1.0.0 --host=0.0.0.0 --port=9901 --key=894e6d6e55a41bfdd0603edfb1eb41a7 --id=10000
namespace Seeker\Service\Master;
use Seeker\Sharded;
use Seeker\Manager\NodeClient;
use Seeker\Protocol\Error;
use Seeker\Service\Common\Base;
class Deploy extends Base
{
//节点认证
public function progress()
{
//找到相应的Node...
$nodeId = $this->request->getFromNode();
$progress = $this->request->get('progress');
$taskId = $this->request->get('taskId');
print_r($this->request);
echo 'Deploy Progress:' . sprintf('N:%d, T:%s, %d%%'
, $nodeId
, $taskId
, $progress
) . PHP_EOL;
}
}
$this->dispatcher->remoteCall('common.node.login')
->setToNode($this->nodeId)
->set('type', 'master')
->set('authKey', $this->authKey)
->then(function($connection, $response) {
if (!$response->getCode()) {
$connection->setAuthed(static::AUTHED_COMMON | static::AUTHED_NODE);
} else {
$connection->close();
}
})
->sendTo($this);