ogileFS自带提供http服务的Web Server并发数不高,你想用用它来提供并发数比较高的Web
服务性能就差得很。考虑用nginx作为你的web Server吧。这是个不错的选择。
这需要改写MogileFS 返回Fid信息的源码,其实这修改很简单。相应的MogileFS的服务端代码
在:mogilefs-server-2.36/lib/MogileFS安装包目录下。
MFS/mogilefs-server-2.36/lib/MogileFS/Worker/Query.pm中
函数sub cmd_get_paths的my $path = $dfid->get_url;改为my $path = $dfid->get_url_pconline;
而
MFS/mogilefs-server-2.36/lib/MogileFS/DevFID.pm 加入相应的两个函数
sub get_url_pconline {
my $self = shift;
return $self->_make_full_url_pconline(1);
}
sub _make_full_url_pconline {
# set use_get_port to be true to specify to use the get port
my ($self, $use_get_port) = @_;
# get some information we'll need
my $dev = $self->device or return undef;
my $host = $dev->host or return undef;
return undef unless $host->exists;
my $path = $self->uri_path;
my $hostip = $host->ip;
my $port = $use_get_port ? $host->http_get_port : $host->http_port;
return "";
}
也可以模仿sub uri_path这个函数的做法,做一个MogileFS的web 管理端。
这个可以代替MogileFS的mogtool locate功能和扩大mogtool功能(注意主键的使用,否则查询会很
慢)。
上面代码修改后,查询MogileFS的fid的时候返回的就是你想用的端口,从而进行后端http server的
选择。
为了使用方便需要对MogileFS客户端mogtool也进行修改,这样查询起来就会清楚很多了。
相应代码是MogileFS-Client-1.09/lib/MogileFS/Client.pm:
sub get_paths {
………………………………………………
my @paths = map { $res->{"path$_"} } (1..$res->{paths});
$self->run_hook('get_paths_end', $self, $key, $opts);
my $count=1;
my $mytemp;
my @myarrays;
while ($count <= @paths) {
$mytemp=$paths[$count-1];
$mytemp=~ s/7500/80/g;
$myarrays[$count-1]=$mytemp;
#print ("element $count: $paths[$count-1]\n");
#print ("my temp element $count: $mytemp\n");
#print ("my arrays element $count: $myarrays[$count-1]\n");
$count++;
}
return @myarrays;
#return @paths;
}
阅读(1170) | 评论(0) | 转发(0) |