Как построить распределенный файловый сервер?

Какие шаги или инструменты необходимы для настройки распределенного файлового сервера, который будет работать для обслуживания больших медиа-файлов для веб-сайта. Сайт будет в локальной сети, а не в Интернете. Система похожа на 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()); 
    }
}

Теперь вам просто нужно написать методы для передачи любых файлов, которые вы хотите. Обратите внимание, что использование потоков на стороне сервера обязательно для одновременного взаимодействия нескольких машин.

Вот хороший учебник с большим количеством примеров и более широким объяснением. ура

Другие вопросы по тегам