Come decidere se adottare un approccio di micro-servizi

7

TL; DR - Quali criteri dovresti usare per decidere se "fare micro servizi"?

Sono a capo di un team di sviluppatori e uno di loro insiste sul fatto che adottiamo un approccio all'architettura basato sui micro servizi. All'inizio ero un po 'titubante, perché da molti anni ero codificato sotto una roccia e non sapevo mai che i micro servizi erano una cosa.

Ho iniziato a scaldarmi sull'idea, ma non credo che nel nostro caso sia giustificato un approccio ai micro-servizi. Non saremo mai al servizio di milioni di utenti e siamo in 5, quindi non è che avremo team completi dedicati a servizi così dettagliati.

Abbiamo un portale di gestione della rete basato sul web che costruiamo e gestiamo. Esistono molte altre applicazioni che gestiscono cose diverse come la fatturazione delle chiamate VOIP, la raccolta Netflow, la raccolta di utilizzo basata su SNMP, ecc. Non chiamerei questi micro servizi in quanto sono un po 'più grezzi delle responsabilità a grana fine che compaiono i micro servizi avere.

Dovrebbero tutti i team di sviluppo ovunque "fare" i micro servizi? In caso negativo, come decidi se i micro servizi sono appropriati per il tuo ambiente?

    
posta emurano 17.12.2016 - 14:06
fonte

2 risposte

11

If not, how do you decide whether micro services are appropriate for your environment?

Semplicemente tramite pain . Sembra insolito, ma dal mio punto di vista è un indicatore valido, che qualcosa sta andando storto.

Se osservi i motivi, perché microservices sono di gran moda, c'è una dimensione storica che svolge un ruolo importante.

In genere i progetti di successo sono fatti così:

  1. Inizia con un prototipo

  2. Prototipo di carne

  3. Fai carriera

  4. Enorme crescita che si traduce in

    a. Un gran numero di funzionalità sono fuori servizio

    b. Crescita di codice oltre il controllo

  5. PAIN inizia : la pianificazione delle distribuzioni diventa un incubo, i sottosistemi dipendenti non possono essere distribuiti separatamente

  6. RELIEF Microservizi FTW

Dividere l'intera base di codice in componenti facili da implementare.

La domanda che stai ponendo è un buon indicatore, che non stai vivendo dolore a un tale livello, che sarebbe necessario per passare ai microservizi.

Fare microservizi non è senza un prezzo. Il tuo sistema aumenterà definitivamente in termini di complessità.

  • Quando hai un monolite, il tuo mondo è semplice: »Chiama un metodo, fai cose, ottieni risultati dopo un intervallo di tempo precalcolabile«

  • Quando hai a che fare con microservices , vai dritto nel fango dei sistemi distribuiti: »Chiamami forse« Le cose che sono certe in un monolite, diventano incerte in un mondo di microservizi .

Il motivo, perché l'approccio microservice è stato scelto da molte grandi aziende è semplice : trattare i problemi dei sistemi distribuiti è stato più semplice del ridimensionamento del loro monolito.

Ovviamente: da un punto di vista architettonico, un gruppo di unità separate sembra più pulito (sulla carta) di un bulbo di un monolito.

I lead a team of developers and one of them insists that we adopt a micro services approach to architecture.

Gli chiederei cosa cambierebbe (bene o male) nel tuo concreto scenario.

We won't ever be servicing millions of users and there's only 5 of us so it's not like we're going to have full teams dedicated to such fine-grained services.

Non vedo un problema (diretto) qui. La suddivisione della base di codice in parti distaccabili separate non ha nulla a che fare con le dimensioni della squadra. Il codebase in quanto tale sarebbe quasi lo stesso. Se il tuo team gestisce ora la base di codici, dovrebbe essere possibile farlo dopo la migrazione. Ciò che è necessario, oltre a dividere il codice base, è: educare la tua squadra in termini di come affrontare i problemi dei sistemi distribuiti . Questo è un investimento da fare.

We won't ever be servicing millions of users and there's only 5 of us so it's not like we're going to have full teams dedicated to such fine-grained services.

I wouldn't call these micro services as they're a bit more coarse than the fine-grained responsibilities that micro services appear to have.

I microservizi non hanno nulla a che fare con milioni di utenti, anche se con problemi di distribuzione di un codebase di fronte a un milione di utenti. Altro: nonostante il termine »micro«, i "servizi" non devono essere solo di 100 righe o così - che è uno , ma non il solo solo motivo per chiamarlo " micro".

Mi piace il termine "servizio focalizzato" molto di più. Ecco di cosa si tratta: in termini di »separazione delle preoccupazioni« un tale servizio tratta un argomento.

tl; dr

Se non si verificano problemi durante l'esecuzione del sistema attuale, non si dovrebbe effettuare alcuna commutazione.

    
risposta data 17.12.2016 - 19:25
fonte
4

Should all dev teams everywhere 'do' micro services?

Nonostante i vantaggi dell'architettura Microservices, la risposta è ovviamente, non tutti dovrebbero .

If not, how do you decide whether micro services are appropriate for your environment?

È difficile rispondere, perché ogni architettura è la risposta tecnica a una domanda politica strategica . La strategia aziendale dell'azienda è importante, quindi la decisione non dovrebbe essere una semplice questione da risolvere tra gli sviluppatori.

Suggerisco di leggere post di Martin Fowler su Microservices . Anche leggendo i collegamenti. Vale la pena leggere.

Leggendo i punti di forza di Microservices, potresti ottenere la risposta alla tua domanda principale: What criteria should you use to decide whether to 'do micro services'?

Solitamente, i microservizi come architettura si adattano bene a sistemi complessi.

La complessità è definita da diversi contesti limitati. Come unità di business che potrebbero operare ed evolvere indipendentemente l'una dall'altra, ma raggiungono un obiettivo comune che funziona del tutto.

La complessità del sistema non è causata dalla complessità unitaria di ogni "contesto limitato". È causato dalla necessità di doverli eliminare tutti nella stessa soluzione.

Un contesto limitato può essere semplice come: gestione, registrazione, fatturazione, reporting, tracciamento degli eventi, sicurezza (autenticazione e autorizzazione) degli utenti, ...

Ciò detto, ciò non significa che i piccoli progetti non dovrebbero adottare questa architettura. Come al solito, dipende se i guadagni superano i costi impliciti. E nel complesso, se risponde a un bisogno reale.

Prenderò in considerazione -seriously- i trade-off descritti nell'articolo linkato sopra:

  • The extra baggage of managing this kind of systems, reducing the productivity
  • The knowledge (in deep) of the domain (microservices)
  • The development complexity
  • The company capacity to manage:
    • Rapid Provisioning
    • Basic Monitoring
    • Rapid Application Deployment
    • Devops Culture

Infine, coinvolgere tutti gli stakeholder dell'azienda è un must. Solo per assicurarti che tutti conoscano le implicazioni.

    
risposta data 17.12.2016 - 16:38
fonte

Leggi altre domande sui tag