Scoperta del servizio open source

0

Sto cercando di comprendere la questo articolo sul servizio OSS scoperta e sto attraversando un periodo difficile vedendo la foresta tra gli alberi.

In questo articolo, l'autore pone il problema principale per l'individuazione dei servizi:

The problem seems simple at first: How do clients determine the IP and port for a service that exist on multiple hosts?

Ma non sono nemmeno sicuro di cosa questo significhi / implichi. Quando parliamo della scoperta del servizio, di cosa stiamo parlando esattamente? È così, se vogliamo connetterci a un database, potremmo aver bisogno di un host e un numero di porta definiti da qualche parte, come:

host=mydatabase01.example.com
port=9300

??? È questo di cui parla l'autore, ed è ciò che è implicito nella "scoperta dei servizi"?

Se così fosse, la soluzione (ovvia) sarebbe semplicemente quella di mettere un servizio web di fronte a tutto? In questo modo, i clienti non si preoccupano di quale specifico host / porta si connettono, effettuano solo chiamate RESTful, diciamo, http://my-data-service.example.com .

Non può essere così semplice, poiché quell'articolo continua a parlare di cose come ZooKeeper ed Eureka, che sembrano bestie molto complesse. Mi manca chiaramente qualcosa; In tal caso, qualcuno può fornire un caso d'uso specifico concreto di cosa si intende quando parliamo di "individuazione di servizi"?

    
posta herpylderp 14.08.2014 - 20:18
fonte

2 risposte

3

Questo articolo sta discutendo i servizi distribuiti . Un esempio popolare è una rete di condivisione di file peer-to-peer (P2P). I nodi si connettono a uno sciame per condividere i dati e possono abbandonare in qualsiasi momento.

L'articolo discute diversi "registri" open source che consentono ai clienti di connettersi alla rete e annunciare la loro presenza in modo che possano utilizzare i servizi sulla rete. Potenzialmente, a seconda dell'applicazione, anche il client stesso può diventare una risorsa di rete. In questo contesto, "rete" indica un numero finito di sistemi client che stanno comunicando. Possono trovarsi su reti fisiche diverse: questo è simile a un sistema distribuito P2P. Possono trovarsi sulla stessa rete fisica: è simile a una intranet aziendale.

In che modo questi clienti si conoscono l'un l'altro? Se mi siedo alla mia scrivania e dico "Mi piacerebbe molto stampare sulla stampante X, o condividere file con il computer Y" come faccio a fissare la mia tazza di caffè per eseguire effettivamente quelle azioni? In un ambiente aziendale tradizionale ci saranno server di dominio di rete che gestiscono questo. Forse MIS mi dice un indirizzo IP. Ma cosa succede se quei sistemi sono non su una rete aziendale o domestica? Da qualche parte là fuori, nell'effimero Internet, c'è un computer al quale voglio collegarmi. Questo è il problema che l'autore sta cercando di risolvere: come faccio a trovare e connettermi a quei client?

L'individuazione dei servizi può avvenire in uno dei tanti modi, e questo non è affatto un elenco esaustivo. Ogni protocollo è diverso e nuovi protocolli sono inventati su base regolare (controlla la libreria digitale ACM se è disponibile, ci sono molte informazioni su questo in là)

  • Affidati a un server centrale per gestire connessioni e disconnessioni. È simile a un file tracker P2P o Kerberos ed è simile all'esempio fornito nella domanda .
  • Trasmissione su una subnet guardando una porta specifica. Se utilizzi SMB o CIFS per la condivisione dei file a casa, è simile a questo.
  • Preconfigurare altri indirizzi IP dei client con cui parlare. Questi clienti potrebbero darti altri clienti a cui sono collegati.
  • Affidati a un altro protocollo come DNS per fornire indirizzi IP.

Una volta connessi a una rete di questo tipo, ci sono una serie di domande di follow-on che vanno oltre lo scopo di questa domanda, ma se trovi questo interessante, potresti voler scavare. Controlla calcolo distribuito .

Riferimenti

Ecco alcuni dei documenti che ho letto che potrebbero aiutare a capire meglio questo argomento. Si noti che è necessario accedere alla Libreria digitale ACM:

Gestione dei conflitti di aggiornamento in Bayou, un sistema di archiviazione replicato debolmente connesso

Operazione disconnessa nel file system Coda

Archiviazione flessibile e ad ampia area per sistemi distribuiti con WheelFS

    
risposta data 15.08.2014 - 03:07
fonte
2

Sono l'autore dell'articolo

Il contesto per il post è in realtà intorno a sistemi distribuiti e in particolare architetture orientate ai servizi (SOA). Le soluzioni vengono solitamente utilizzate da fornitori di servizi software (SaaS) di grandi dimensioni, in cui dispongono di numerosi servizi di back-end utilizzati per fornire la propria offerta di servizi.

Ad esempio, molti provider SaaS hanno un modo per accedere al proprio sistema. In un SOA, potresti avere un servizio di autenticazione nel back-end che gestisce le richieste di accesso. È abbastanza comune avere un livello web di fronte a quei servizi di backend che effettivamente servono la pagina di login e gestisce le richieste HTTP di accesso. Quel livello delegherebbe la richiesta di accesso al servizio di autenticazione. Può anche delegare altre funzioni ad altri servizi nel back-end. Questi backend potrebbero fornire un'API basata su HTTP o qualcos'altro ma è comunemente un servizio distribuito su più host.

Why can't you put a web service in front of everything?

Puoi e questo è fatto comunemente. L'aspetto della scoperta del servizio arriva quando provi a mantenere http://my-data-service.example.com puntando agli host giusti quando i servizi non funzionano, non stanno funzionando, sono aggiornati, scalati, ecc.

Se my-data-service.example.com è solo una voce DNS round robin, e hai tre istanze che forniscono il servizio e una scende, avrai alcune richieste non riuscite mentre quell'host viene riportato in linea. Con DNS, anche i TTL devono essere presi in considerazione in modo che i client che hanno memorizzato nella cache tali voci continuino a provare l'host abbattuto fino alla scadenza dei TTL e all'aggiornamento. Se aggiungi degli host, dovrai aspettare che scadano anche i TTL prima che inizi a servire le richieste.

Un'alternativa è puntare my-data-service-example.com su un bilanciatore del carico o fare in modo che le applicazioni client implementino il bilanciamento del carico stesso.

Questo presenta un nuovo problema:

How do you keep the backend hosts configured in your load balancer up to date?

In un ambiente come AWS, gli host possono essere spostati su e giù frequentemente e i loro IP possono cambiare. Se si utilizza la finestra mobile, gli IP e le porte di solito sono diversi quando viene avviato un nuovo contenitore. Cercare di mantenere questo configurato manualmente non è generalmente possibile in questi tipi di ambienti ... specialmente quando si hanno più servizi e centinaia o migliaia di host.

Per mantenere un bilanciamento del carico automaticamente aggiornato, è necessaria una qualche forma di rilevamento dinamico dei servizi.

Questo di solito comporta avere:

  1. Un registro per tenere traccia di ciò che è su / giù, le sue posizioni, ecc.,
  2. Una procedura di registrazione per registrare i percorsi dei servizi quando sono online
  3. Un processo discovery per scoprire servizi e mantenere aggiornate le informazioni di routing.

L'articolo originale descrive come diverse aziende hanno implementato tali componenti in modi diversi. Ci sono molti altri modi per farlo.

Per un esempio più concreto, ho scritto un altro post che mostra un modo di fare discovery dei servizi con la finestra mobile usando etcd e haproxy . Potrebbe essere utile capire il contesto dell'articolo.

    
risposta data 05.09.2014 - 01:18
fonte

Leggi altre domande sui tag