le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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.
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.
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.
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;
@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.
- @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
- //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
- // 条件一: 请求数量达到3个
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
- // 条件二: 每20秒一个判断单位
- @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
- // 条件三: 失败率30%
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
- // 结果: 熔断后, 30秒内不再请求远程服务
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
- })
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")
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.
- @HystrixCommand(
- commandProperties= {
- @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
- @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
- },
- fallbackMethod = "errMethod"
- )
2), limite di corrente del pool di thread
- @HystrixCommand(
- commandProperties = {
- @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
- },
- threadPoolKey = "createOrderThreadPool",
- threadPoolProperties = {
- @HystrixProperty(name = "coreSize", value = "20"),
- @HystrixProperty(name = "maxQueueSize", value = "100"),
- @HystrixProperty(name = "maximumSize", value = "30"),
- @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
- },
- fallbackMethod = "errMethod"
- )
Nota qui: injava
Nel 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 raggiuntoqueueSizeRejectionThreshold
adotterà la strategia del rifiuto, quindimaximumSize
fallito.SequeueSizeRejectionThreshold > maxQueueSize
, il numero di code raggiuntomaxQueueSize
ora,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.
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:
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.
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:
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 > downgrade).
Riepilogo del contenuto del collegamento:
@FeignClient(name="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)
fare riferimento a:
fare riferimento a:
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.
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.
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.
Pratica della modalità Seata TCC (Parte 2)-Comunità di sviluppatori cloud AlibabaCombattimento reale in modalità Seata TCC (Parte 2)Italiano: 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.
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.
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.
Vantaggi della modalità TCC:
Svantaggi della modalità TCC:
Confirm
ECancel
Potrebbe anche fallire ed è necessario affrontare questo processoForte coerenza, coordinando il momento in cui le transazioni locali di ciascun partecipante vengono confermate e ripristinate.
Vantaggi della modalità XA:
Svantaggi della modalità XA:
consistenza debole