Condivisione della tecnologia

PrimaveraNuvola

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Cosa sono i microservizi?

1. Concetti di base

I microservizi sono astile architettonico(Diversamente dall'architettura monolitica, dall'architettura verticale, dall'architettura distribuita e dall'architettura SOA), le applicazioni sono suddivise in servizi più piccoli, guidati dai processi.

2. Caratteristiche dei microservizi

  1. Leggero: dividi sistemi o servizi complessi verticalmente e ogni microservizio si concentra sulla risoluzione di problemi speciali.
  2. Basso accoppiamento: ogni servizio suddiviso è indipendente l'uno dall'altro in termini di codice, risorse e ambiente e può essere sviluppato, testato, distribuito e mantenuto in modo indipendente, il che è vantaggioso per la stabilità del sistema (l'impatto è ridotto quando i problemi verificarsi) e l'espansione (espansione delle risorse) valutazione delle risorse è più conveniente e meno rischiosa).
  3. Multipiattaforma: diversi microservizi possono utilizzare linguaggi di sviluppo diversi ed essere eseguiti in ambienti diversi.

2. Cos'è SpringCloud?

1. Concetti di base:

La nuvola primaverile è unaQuadro dei microservizi , che fornisce una gamma di soluzioni di sistemi distribuiti. Fornisce funzionalità quali sviluppo e distribuzione di microservizi, registrazione e rilevamento dei servizi, governance dei servizi, funzionamento e manutenzione dei servizi tramite la componentizzazione.

2. Componenti comunemente utilizzati:

1)Primavera Cloud Netflix:

Eureka: centro di registrazione

Barra multifunzione: bilanciamento del carico

Finta: chiamata remota

Hystrix: interruttore automatico di servizio

Zuul/Gateway:Gateway

2)Spring Cloud Config: strumento di gestione della configurazione centralizzato, archiviazione esterna della configurazione dell'applicazione, può essere utilizzato per applicazioni Spring o non Spring.

3)Spring Cloud Bus: bus di eventi e messaggi, utilizzato per propagare modifiche di stato o eventi di modifica della configurazione nel cluster.

4)Spring Cloud Consul: strumento di rilevamento e configurazione dei servizi, perfettamente integrato con i contenitori Docker.

5)Spring Cloud Security: un toolkit di sicurezza che fornisce supporto per la sicurezza e l'autenticazione delle applicazioni.

6)Spring Cloud Sleuth: tracciamento distribuito della catena di chiamate, compatibile con il tracciamento Zipkin, HTrace ed ELK.

7)Spring Cloud Cluster: elezione del leader, implementata attraverso l'astrazione di Zookeeper, Redis e Console.

8)Spring Cloud Data Flow: orchestrazione di microservizi, facile da usare tramite l'interfaccia drag-and-drop o l'API REST.

9)Spring Cloud Stream: un framework di microservizi leggero basato sugli eventi per creare rapidamente applicazioni che si connettono a sistemi esterni.

10)Spring Cloud Task: un framework di microservizi a breve termine per creare rapidamente applicazioni che completano attività di elaborazione dati in batch.

3. Passaggi per utilizzare i componenti SpringCloud

Tutorial springcloud--3. Meccanismo dell'interruttore di circuito Microservice, spiegazione dettagliata dell'uso dell'interruttore di circuito hystrix_Come configurare l'interruttore di circuito Java-CSDN blog

tutorial springcloud--4. Spiegazione dettagliata dell'uso del tutorial sull'utilizzo del gateway zuul_zuul-blog CSDN

1. Hystrix (fusibile, downgrade, limitazione di corrente)

1) Cosa fa?

esisterenei sistemi distribuiti , se un nodo di servizio fallisce o si verifica un'anomalia nella rete, il chiamante potrebbe essere bloccato e attendere. Se il timeout è impostato su un periodo lungo, le risorse del chiamante potrebbero essere esaurite.Ciò a sua volta porta all'esaurimento delle risorse nel sistema upstream del chiamante, con il risultato finalevalanga di sistema . Gli interruttori automatici possono prevenire efficacemente le valanghe di servizio.

Se riscontri un improvviso aumento del traffico, l'approccio generale è quello diFunzioni aziendali non coreLe misure di degrado del servizio sono adottate per proteggere il normale servizio delle funzioni aziendali principali, mentre per i servizi funzionali principali è necessario adottare le attuali misure di limitazione.

2) Succede lato client o lato server?

Interruttore automatico di servizio:generalmente Si verifica sul lato server (lo scopo è consentire al chiamante di fallire rapidamente). Quando un servizio scade o è anomalo, provoca un fusibile, simile a un fusibile nella vita reale. (A volte può anche essere configurato sul client per fallire rapidamente quando viene trovata un'eccezione quando si chiama un determinato servizio);
Degrado del servizio: generalmente si verifica lato client Considerando il carico complessivo delle richieste del sito web, quando un servizio viene disconnesso o spento, il servizio non verrà più richiamato (a volte può essere configurato anche lato server, quando il sistema ha traffico improvviso, le funzioni principali verranno declassate per proteggere le funzioni principali);

Limitazione di corrente: solitamente avviene lato server;

3) Come usare

  • Fusione:

@EnableCircuitBreaker: abilitato sull'applicazionefusibile

@HistrixCommand(fallbackMethod="xxxFallback",commandProperties = {
}): l'annotazione di fusione viene aggiunta all'annotazione di downgrade. Compila le condizioni di fusione in commandProperties = {} Fare clic per condizioni di fusione specifiche.HystrixPropertiesManagerControllo.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • Downgrade:

Crea una nuova classe xxxFallbackFactory per implementare FallbackFactory e sovrascrivere il metodo create. Il metodo downgrade è definito in create.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix è integrato in Feign

Oppure specifica il metodo di fallback direttamente nel metodo: @HistrixCommand(fallbackMethod="xxxFallback")

  • Limitazione:

        1、Attuale strategia limitante:

1), limite di corrente del semaforo

Il semaforo viene utilizzato per controllare il numero di thread simultanei. Specificare il numero di licenze virtuali interne tramite il costruttore.

Se viene utilizzata la tecnologia di isolamento del semaforo, ogni volta che viene ricevuta una richiesta, il thread del servizio chiama direttamente il servizio dipendente. Il semaforo equivale a un checkpoint. Dopo che ogni thread ha superato il checkpoint, il numero di semafori viene ridotto di 1 è 0, non lo è più Il thread può passare, ma la logica di fallback viene eseguita e restituita direttamente. Per dirla senza mezzi termini, è solo un limite corrente.

Un semaforo può essere inteso come acontatore, il contatore conta il numero di richieste attualmente in fase di elaborazione. Quando il valore del contatore raggiunge il valore impostato, le richieste successive non verranno accettate (o verranno declassate) ed è necessario attendere finché il valore del contatore non sarà inferiore al valore impostato prima che le richieste successive possano essere eseguite. essere elaborato.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2), limite di corrente del pool di thread

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

Nota qui: injavaNel pool di thread, se il numero di thread superacoreSize, le richieste di creazione di thread entreranno per prime nella coda. Se la coda è piena, i thread continueranno a essere creati fino al raggiungimento del numero di threadmaximumSize , e quindi adottare la strategia di rifiuto.Ma c'è un parametro aggiuntivo nel pool di thread configurato da hystrixqueueSizeRejectionThreshold,SequeueSizeRejectionThreshold < maxQueueSize, il numero di code raggiuntoqueueSizeRejectionThresholdadotterà la strategia del rifiuto, quindimaximumSize fallito.SequeueSizeRejectionThreshold > maxQueueSize, il numero di code raggiuntomaxQueueSizeora,maximumSizeè valido, il sistema continuerà a creare discussioni fino al raggiungimento del numeromaximumSize

      2. La differenza tra la limitazione della corrente del semaforo e la limitazione della corrente del pool di thread:

1) Livello di prestazioni: il semaforo utilizza il thread originale e ha un basso consumo di prestazioni;

2) Livello di stabilità del sistema: i pool di thread sono isolati e i problemi da soli non influiranno sugli altri pool di thread;

3) Sincrono e asincrono: poiché il semaforo è il thread originale utilizzato, è sincrono e bloccante.

        3. Attuali scenari di utilizzo della strategia limitante:

Quando il volume delle richieste è molto intenso e il sovraccarico dell'isolamento dei thread è relativamente elevato, si consiglia di utilizzare i semafori per ridurre il carico. Questa situazione viene solitamente utilizzata per gestire richieste non di rete (senza chiamare servizi esterni). Si consiglia di utilizzare il metodo del pool di thread in altri scenari.

4) Qual è la differenza tra i tre?

La limitazione di corrente è semplicemente una limitazione di corrente Finché il limite di traffico non viene superato, il servizio è ancora disponibile (diverso dall'interruttore di circuito) e non deve essere declassato (è possibile anche lanciare un'eccezione per il superamento del limite di traffico affinché il chiamante possa gestirla). da solo). Quindi parliamo solo della differenza tra interruttore automatico e downgrade:

  • concetti diversi

L'interruttore automatico significa che il servizio nel suo complesso non è disponibile (concentrandosi sull'autoprotezione), il downgrade significa adottare l'opzione migliore successiva (concentrandosi sulla protezione dei profitti) e la limitazione di corrente si riferisce alla quantità di traffico che non può essere superata.

  • Diversi meccanismi di attivazione

Per impostazione predefinita, se hystrix rileva che il tasso di errore delle richieste supera il 50% entro 10 secondi, attiverà il meccanismo dell'interruttore. Successivamente, la richiesta al microservizio viene ritentata ogni 5 secondi. Se il microservizio non può rispondere, il meccanismo dell'interruttore continua. Se il microservizio è raggiungibile, il meccanismo dell'interruttore viene disattivato e vengono ripristinate le normali richieste.

Per impostazione predefinita, hystrix attiverà il meccanismo di downgrade nelle seguenti 4 condizioni:

  1. Il metodo genera HystrixBadRequestException
  2. Timeout della chiamata al metodo
  3. Accendere l'interruttore per intercettare la chiamata
  4. Il pool di thread, la coda o il semaforo sono pieni
  • Rapporti di proprietà diversi

Il meccanismo di downgrade può essere richiamato durante l'interruttore automatico, ma solitamente non viene richiamato durante il downgrade.Poiché l'interruttore parte dalla prospettiva generale e disattiva i servizi per garantire la stabilità del sistema, mentre il downgrade è la cosa migliore e fornisce una soluzione garantita, quindi i loro rapporti di proprietà sono diversi (interruttore &gt; downgrade).

2. Modello di finta e riposo

Riepilogo del contenuto del collegamento:

  1. Aggiungi la dipendenza di avviamento;
  2. Aggiungi annotazione: @EnableFeignClients;
  3. Crea un'interfaccia finta:

@FeignClient(name="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

Tutorial springcloud-- 1. Crea rapidamente una demo entry-level, basta leggere questo articolo_Comunità open source Ye Juyan-GitCodeSenza ulteriori indugi, seguimi e inizia la tua prima esperienza con Spring Cloud Per prima cosa, esamina i componenti di base dei microservizi: [Immagine qui] Produttore: fornisci servizio Consumatore: consuma servizio Registrazione/rilevamento del servizio: registrazione, rilevamento, monitoraggio del servizio Quindi, prima. comprendere le basi architetturali dei microservizi springcloud: produttore (client), consumatore (client), centro di registrazione/discovery del servizio (server) Comunità open source Ye Juyan GitCodeicona-default.png?t=N7T8Italiano: https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDrxtdqIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Uso di Zuul

fare riferimento a:

Implementazione pratica dell'architettura del progetto SpringBoot "Gateway zuul Construction"-CSDN Blog

4. Utilizzo del centro di registrazione Eureka

fare riferimento a:

Architettura del progetto SpringBoot combattimento effettivo "costruzione del progetto principale e costruzione del centro di registrazione"_costruzione Java avvio del progetto principale springboot-blog CSDN

4. Come funziona SpringCloud

1. Principio di funzionamento di Eureka:

  1. Registrazione del servizio: all'avvio, il fornitore di servizi invierà una richiesta di registrazione al server Eureka, incluso l'indirizzo IP del servizio, il numero di porta, il nome del servizio e altre informazioni. Dopo aver ricevuto la richiesta di registrazione, il server Eureka salverà le informazioni sul servizio nella memoria e fornirà una funzione di query sulle informazioni di registrazione del servizio esterno.

  2. Individuazione del servizio: quando un consumatore di servizi deve chiamare altri servizi, invierà una richiesta di individuazione del servizio al server Eureka per ottenere un elenco di istanze dei servizi richiesti. Dopo aver ricevuto la richiesta, il server Eureka restituirà un elenco di istanze del servizio corrispondente, incluso l'indirizzo IP, il numero di porta e altre informazioni del servizio. Il consumatore del servizio seleziona una delle istanze del servizio da chiamare (bilanciamento del carico) in base all'elenco di istanze restituito.

  3. Controllo dello stato dell'heartbeat: il fornitore di servizi invierà regolarmente pacchetti heartbeat al server Eureka per dimostrare che il suo servizio funziona normalmente. Se il server Eureka non riceve un pacchetto heartbeat da un'istanza del servizio entro un periodo di tempo, considererà l'istanza del servizio inattiva e la rimuoverà dall'elenco dei servizi.

5. Codice sorgente sottostante SpringCloud

1. Codice sorgente del gateway Zuul

Implementazione pratica dell'architettura del progetto SpringBoot "Gateway zuul Construction"-CSDN Blog L'articolo è stato visto e letto 227 volte. Capitolo 3 Costruzione del gateway Zuul Prefazione: 1. Funzioni principali Zuul fornisce principalmente routing dinamico (implementazione della barra multifunzione integrata) e filtraggio (può essere utilizzato come filtro di autenticazione unificato, filtro di pubblicazione in scala di grigi, filtro IP della lista nera e bianca, filtro di limitazione della corrente del servizio) (Può essere implementato con Sentinel)); 2. La differenza rispetto a Spring Cloud GateWay è che si tratta di una soluzione gateway fornita da due diverse organizzazioni open source. spring cloud GateWay utilizza API non bloccanti, filtro di limitazione della corrente integrato, supporta connessioni lunghe (come websocket) ed è migliore di Zuul in scenari di elevata concorrenza e lenta risposta del servizio back-end...Italiano: https://blog.csdn.net/qq_19952029/article/details/124285479

2. Codice sorgente Eureka del centro di registrazione

3. Codice sorgente Histrix dell'interruttore automatico

4. Centro di configurazione Configura codice sorgente

5. Bilanciamento del carico del codice sorgente della barra multifunzione

6. Il microservizio chiama il codice sorgente Feign

6. Come SpringCloud implementa le transazioni distribuite

Pratica della modalità Seata TCC (Parte 2)-Comunità di sviluppatori cloud AlibabaCombattimento reale in modalità Seata TCC (Parte 2)icona-default.png?t=N7T8Italiano: https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9Il post del blog sopra riportato non risolve il problema della sospensione, che può essere giudicato in base a diversi indicatori di stato.

Italiano: Italiano: Italiano: https://www.cnblogs.com/lilpig/p/16613226.htmlicona-default.png?t=N7T8Italiano: Italiano: Italiano: https://www.cnblogs.com/lilpig/p/16613226.html

1. Ruolo della modalità TCC

TM: gestore delle transazioni, generato con l'annotazione @GlobalTransaction.

TC: Coordinatore

RM:Partecipante

L'intero processo è:

TM delega le tue transazioni globali e le registra presso TC prima di iniziare l'esecuzione
TM inizia a eseguire ciascuna transazione di filiale nella transazione globale e RM registra e segnala le transazioni di filiale e lo stato di esecuzione a TC
Una volta completata l'esecuzione della transazione della filiale, TM avvia una richiesta a TC per confermare o ripristinare la transazione globale.

2. Il significato di prenotazione, invio e rollback delle risorse TCC.

Prenotazione significa bloccare e aggiornare la risorsa del database in uno stato intermedio, quindi modificarla nello stato effettivo quando viene eseguito il commit della seconda fase dopo la conferma.Quindi la fase di prenotazione e la fase di rollback del commitTutti coinvolgono database operativi, pertanto potrebbero verificarsi anche errori di conferma e ripristino che richiedono un'elaborazione manuale, che può essere risolta registrando registri, compensando i nuovi tentativi e così via.

3. Vantaggi e svantaggi del TCC

Vantaggi della modalità TCC

  1. Invio diretto in una fase, nessun blocco DB, nessun altro blocco, buone prestazioni
  2. La logica di prenotazione e ripristino viene scritta dall'utente e non dipende dal database. Può essere utilizzata nei database non transazionali.

Svantaggi della modalità TCC

  1. La codifica è complessa
  2. Debolmente coerente
  3. PerchéConfirmECancelPotrebbe anche fallire ed è necessario affrontare questo processo
  4. Alcune aziende non sono adatte al modello TCC. Ad esempio, effettuare un ordine è un processo di aggiunta di una nuova riga. Non è possibile o necessario utilizzare TCC.

4. Modalità XA

Forte coerenza, coordinando il momento in cui le transazioni locali di ciascun partecipante vengono confermate e ripristinate.

Vantaggi della modalità XA

  1. Facile da implementare, poiché la maggior parte dei database supporta già le transazioni XA, Seata deve solo eseguire un semplice packaging
  2. consistenza forte

Svantaggi della modalità XA

  1. Ogni transazione deve attendere il completamento dell'intera elaborazione delle transazioni, occupando i blocchi del database, con conseguenti prestazioni scadenti e scarsa disponibilità.
  2. Non può essere utilizzato se il database non supporta le transazioni XA

5. Modalità AT

consistenza debole