Microservices in the Large (in particolare: refs esteri)

3

Ci sono molte buone risorse su μServices che si concentrano su concetti come Single Purpose, REST, Implementation and Deployment, CI / CD, Incapsulamento e isolamento, Separazione dell'interfaccia utente dall'API, ecc.

Tuttavia, dopo aver fatto tutte le promesse su μServices (plurale), tutti entrano immediatamente nella progettazione di un μService (singolare). Oppure, se posso essere snarky, "Scrivere monoliti software molto piccoli."

Dove sono le migliori pratiche per l'utilizzo di μServices con μServices?

Esempio:

La mia azienda mi dice di scrivere un clone di Craigslist interno per vendere regali di Natale indesiderati ai colleghi di lavoro. Le risorse sono abbastanza evidenti: persona, posizione, oggetto. Solo Elemento rientra pienamente nello scopo di questo μService, quindi inizio a concentrarmi sulle operazioni REST per questo:

GET /v1/items/7443fc08-51c3-11e6-9c77-3c15c2c9fbf8

{ "title": "Book for Sale",
  "body":  "Selling my well-used copy of 'Functional Programming with Cobol'",
  "price": "$10 OBO",
  "contact": {
    "type": "ref",
    "ref":  "ldaps://ad.example.com/eid=51214,dc=example,dc=com"
  },
  "location": {
     "type": "ref",
     "ref": "https://facilities.example.com/v1/locations/3182"
  }
}

Tutti lo esaminano e dicono "Sì, è gustoso e RESTY", quindi andiamo avanti. Lo sviluppatore della UI ha bisogno di una mano perché non ha mai avuto a che fare con LDAP prima. Quando le dico di "Aggiungi"? Cn "alla fine dell'URL per ottenere il nome della persona" , lei mi chiede perché non l'ho inserito nell'URL in primo luogo, o almeno fornire un link [] con un campo "rel" .

Spiego che è solo la selezione del campo, esattamente come la selezione ? include = , per esempio nessuno usa rel per la selezione del campo, e mandarla a casa con una copia di RFC 4512, dicendole che imparare ASN.1 le renderà uno sviluppatore migliore.

Avanti veloce diversi giorni; Ho terminato l'API, ma mentre l'interfaccia utente è in grado di visualizzare elementi ed elenchi di elementi, mostra solo dati di fabbrica; la funzionalità POST non funziona ancora ...

Lo sviluppatore dell'interfaccia utente sta ancora cercando di capire come ottenere il valore eid (per l'URI LDAP) dal token OAuth che ha ricevuto dal login federato μService. Discutiamo di creare un altro μService solo per farlo ...

Quindi dove è andato storto? Quali sono le best practice attuali sul bilanciamento del principio di "Single Responsibility" al di fuori del contesto di un solo Single μService?

    
posta Darren H 24.07.2016 - 20:05
fonte

1 risposta

1

Un luogo in cui vengono discusse in profondità le attuali migliori pratiche è il libro Building Microservices pubblicato da O'Reilly. È un grande argomento e l'autore entra nel dettaglio su come definire la dimensione del dominio che deve essere coperto dal servizio.

Sui riferimenti stranieri in particolare, l'autore tende a non applicare l'integrità referenziale tra i servizi. Pertanto, il tuo servizio A potrebbe fare riferimento a un userId fornito dal servizio di accesso federato, ma senza integrità referenziale su quel valore memorizzato nel database del servizio A.

    
risposta data 25.07.2016 - 10:28
fonte

Leggi altre domande sui tag