Как построить распределенный файловый сервер?
Какие шаги или инструменты необходимы для настройки распределенного файлового сервера, который будет работать для обслуживания больших медиа-файлов для веб-сайта. Сайт будет в локальной сети, а не в Интернете. Система похожа на CDN.
Подробности объяснения необязательны. Я только хочу знать, что я должен искать в Google, если не найден здесь.
1 ответ
Я сделал нечто подобное (FTP-сервер) с использованием Java RMI. Если вы привыкли к JAVA, это хороший вариант.
Основная идея RMI - создать сервер, интерфейс класса сервера (который будет вызываться клиентом) и класс клиента.
Вот пример, взятый и переписанный из википедии.
Ваш сервер класс
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.*;
public class RmiServer
extends UnicastRemoteObject
implements RmiServerIntf {
public static final String MESSAGE = "Hello World";
public RmiServer() throws RemoteException {
super(0); // required to avoid the 'rmic' step, see below
}
public String getMessage() {
return MESSAGE;
}
public static void main(String args[]) throws Exception {
System.out.println("RMI server started");
try { //special exception handler for registry creation
LocateRegistry.createRegistry(1099); //you need to register an endpoint in the server machine
System.out.println("java RMI registry created.");
} catch (RemoteException e) {
//do nothing, error means registry already exists
System.out.println("java RMI registry already exists.");
}
//Instantiate RmiServer
RmiServer obj = new RmiServer();
// Bind this object instance to the name "RmiServer"
Naming.rebind("//localhost/RmiServer", obj); //localhost you need to change to your server machine address
System.out.println("PeerServer bound in registry");
}
}
Ps. Для того, чтобы ваш сервер работал, вам нужно использовать команду rmic
например.
rmic RmiServer
(обратите внимание, что вам может потребоваться найти rmic, в Linux используйте команду locate rmic
в окнах понятия не имею).
Ваш интерфейс, который содержит все методы с сервера, которые будут вызываться клиентом
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RmiServerIntf extends Remote {
public String getMessage() throws RemoteException;
}
И клиентский класс
import java.rmi.Naming;
public class RmiClient {
public static void main(String args[]) throws Exception {
RmiServerIntf obj = (RmiServerIntf)Naming.lookup("//host/RmiServer"); //host is your server machine
System.out.println(obj.getMessage());
}
}
Теперь вам просто нужно написать методы для передачи любых файлов, которые вы хотите. Обратите внимание, что использование потоков на стороне сервера обязательно для одновременного взаимодействия нескольких машин.
Вот хороший учебник с большим количеством примеров и более широким объяснением. ура