欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:分布式之網(wǎng)關(guān)介紹

柚子快報激活碼778899分享:分布式之網(wǎng)關(guān)介紹

http://yzkb.51969.com/

一、網(wǎng)關(guān)簡介

1、網(wǎng)關(guān)背景

由于微服務(wù)“各自為政的特性”使微服務(wù)的使用非常麻煩。通常公司會有一個“前臺小姐姐”作為統(tǒng)一入口,這就是網(wǎng)關(guān)

2、網(wǎng)關(guān)作用

統(tǒng)一入口:為服務(wù)提供一個唯一的入口,網(wǎng)關(guān)起到外部和內(nèi)部隔離的作用, 保障了后臺服務(wù)的安全性。鑒權(quán)校驗:識別每個請求的權(quán)限,拒絕不符合要求的請求。動態(tài)路由:動態(tài)的將請求路由到不同的后端集群中。減少客戶端與服務(wù)端的耦合:服務(wù)可以獨立發(fā)展,通過網(wǎng)關(guān)層來做映射。

3、網(wǎng)關(guān)優(yōu)勢

路由和負(fù)載均衡:網(wǎng)關(guān)可以作為反向代理,接收客戶端請求并將其路由到后端的多個服務(wù)器。通過使用負(fù)載均衡算法,網(wǎng)關(guān)可以根據(jù)服務(wù)器的負(fù)載情況分發(fā)請求,從而實現(xiàn)請求的平衡和優(yōu)化。安全性和訪問控制:網(wǎng)關(guān)可以充當(dāng)安全層,通過在請求到達(dá)應(yīng)用程序之前進(jìn)行身份驗證、授權(quán)和訪問控制來保護(hù)應(yīng)用程序。它可以攔截和阻止惡意請求、DDoS攻擊和SQL注入等常見的安全威脅。協(xié)議轉(zhuǎn)換和數(shù)據(jù)格式轉(zhuǎn)換:網(wǎng)關(guān)可以處理不同的協(xié)議和數(shù)據(jù)格式之間的轉(zhuǎn)換。它可以將來自客戶端的請求從一種協(xié)議轉(zhuǎn)換為另一種協(xié)議,或?qū)⒑蠖朔?wù)的響應(yīng)轉(zhuǎn)換為適合客戶端的數(shù)據(jù)格式,從而實現(xiàn)系統(tǒng)之間的無縫集成和通信。監(jiān)控和分析:網(wǎng)關(guān)可以收集和監(jiān)控來自客戶端和后端服務(wù)的請求和響應(yīng)數(shù)據(jù)。它可以記錄日志、統(tǒng)計數(shù)據(jù)和指標(biāo),提供關(guān)于請求流量、性能和錯誤的實時監(jiān)控和分析。這些信息可以幫助開發(fā)人員和管理員識別問題、優(yōu)化性能和做出決策。

4、網(wǎng)關(guān)劣勢

在微服務(wù)這種去中心化架構(gòu)中,成為瓶頸點:如果網(wǎng)關(guān)掛掉,將會影響整個系統(tǒng)的可用性。作為系統(tǒng)的入口點,網(wǎng)關(guān)的故障可能導(dǎo)致無法訪問后端服務(wù)和應(yīng)用程序。服務(wù)如果不是異步或者同步非阻塞,耦合度高:如果通過網(wǎng)關(guān)調(diào)用后端服務(wù)不可用或者響應(yīng)時間超時,我們的連接數(shù)量是有限的,這時候網(wǎng)關(guān)處理能力下降這時候可能造成其他服務(wù)的不可用,嚴(yán)重者甚至導(dǎo)致雪崩效應(yīng)

二、常見網(wǎng)關(guān)的對比

1、Netflix Zuul1.0

中小廠落地案例豐富基于同步阻塞I0,性能差Netflix已經(jīng)停止了對Zuul 1.0的維護(hù)和開發(fā)

2、SpringCloud Gateway

是Spring Cloud生態(tài)系統(tǒng)中的官方網(wǎng)關(guān)解決方案,與其他Spring Cloud組件(如Eureka、Ribbon、Hystrix等)無縫集成響應(yīng)式支持:Spring Cloud Gateway基于Spring WebFlux框架,使用非阻塞式I/O和響應(yīng)式編程模型,具有高性能和高吞吐量的特點

3、Netflix Zuul2.0

基于非阻塞式I/O模型,性能接近SpringCloud Gateway它的開發(fā)和維護(hù)在2019年底停止了。Netflix推薦使用Spring Cloud Gateway作為替代方案,

4、綜合對比

Zuul1.0Spring Cloud GatewayZuul2.0長連接支持不支持支持支持IO模型阻塞非阻塞非阻塞性能低高高編程語言JavaJavaJava協(xié)議支持HttpHttpHttp流量管理需要二次開發(fā)需要二次開發(fā)需要二次開發(fā)擴(kuò)展性低高中成熟度高高低使用場景中小型流量項目大部分場景大部分場景

5、為什么自研網(wǎng)關(guān)

5.1 開源網(wǎng)關(guān)的不足

限制性:開源網(wǎng)關(guān)通常具有一些默認(rèn)的行為和規(guī)則,可能無法滿足特定業(yè)務(wù)需求的定制化要求。某些功能可能無法直接擴(kuò)展或修改,需要深入了解和修改源代碼,這對于非開發(fā)人員來說可能是一項挑戰(zhàn)??煽啃院头€(wěn)定性:開源網(wǎng)關(guān)在穩(wěn)定性和可靠性方面可能存在一些問題。盡管開源社區(qū)通常會及時修復(fù)和改進(jìn)問題,但是在某些情況下,可能會遇到較長時間的修復(fù)周期或仍存在未解決的問題。這對于對高可用性和系統(tǒng)穩(wěn)定性要求較高的應(yīng)用來說可能是一個問題。技術(shù)支持和文檔:相比商業(yè)解決方案,開源網(wǎng)關(guān)通常缺乏官方的技術(shù)支持和詳細(xì)的文檔。雖然開源社區(qū)通常提供一定的支持,但可能無法提供即時和全面的幫助。這對于在生產(chǎn)環(huán)境中使用開源網(wǎng)關(guān)的企業(yè)來說可能是一個潛在的風(fēng)險。學(xué)習(xí)和培訓(xùn)成本:使用開源網(wǎng)關(guān)可能需要團(tuán)隊成員投入時間和精力來學(xué)習(xí)和理解其架構(gòu)、配置和使用方式。這可能需要額外的培訓(xùn)和學(xué)習(xí)成本,特別是對于新加入的團(tuán)隊成員來說。安全性和漏洞:盡管開源網(wǎng)關(guān)通常經(jīng)過廣泛的社區(qū)審查,但仍然存在潛在的安全漏洞。由于開源代碼的公開性,攻擊者可以更容易地發(fā)現(xiàn)和利用其中的漏洞。這要求團(tuán)隊及時更新和升級網(wǎng)關(guān),以確保應(yīng)用的安全性。依賴和版本兼容性:開源網(wǎng)關(guān)可能依賴于其他的開源組件和庫,可能需要處理版本兼容性和依賴沖突的問題。這可能需要額外的工作量來管理和升級依賴項,以確保系統(tǒng)的穩(wěn)定性和一致性。

5.2 自研網(wǎng)關(guān)優(yōu)勢

定制化能力:自研網(wǎng)關(guān)可以根據(jù)具體業(yè)務(wù)需求進(jìn)行定制和擴(kuò)展,滿足特定場景的需求。你可以根據(jù)自己的業(yè)務(wù)邏輯、安全需求、性能要求等來設(shè)計和實現(xiàn)網(wǎng)關(guān),確保網(wǎng)關(guān)與整個系統(tǒng)的需求高度匹配。靈活性和可擴(kuò)展性:自研網(wǎng)關(guān)可以根據(jù)業(yè)務(wù)的發(fā)展和變化進(jìn)行靈活調(diào)整和擴(kuò)展。你可以根據(jù)需求添加新的功能、修改路由規(guī)則、引入新的協(xié)議等,而無需依賴第三方網(wǎng)關(guān)的更新和發(fā)布周期。性能和吞吐量:自研網(wǎng)關(guān)可以根據(jù)需求進(jìn)行性能優(yōu)化,以滿足高并發(fā)和低延遲的要求。你可以選擇合適的技術(shù)棧、采用非阻塞式I/O模型、引入異步處理等,以提升網(wǎng)關(guān)的性能和吞吐量。安全性和可控性:自研網(wǎng)關(guān)可以根據(jù)業(yè)務(wù)需求實現(xiàn)定制化的安全策略和訪問控制機制。你可以集成各種認(rèn)證和授權(quán)機制、請求過濾和防御機制,以確保系統(tǒng)的安全性,并根據(jù)具體需求進(jìn)行調(diào)整和優(yōu)化。增強的監(jiān)控和調(diào)試能力:自研網(wǎng)關(guān)可以針對自身的需求添加詳細(xì)的監(jiān)控指標(biāo)和調(diào)試功能。你可以收集和展示請求流量、性能指標(biāo)、錯誤日志等數(shù)據(jù),以便進(jìn)行監(jiān)控、故障排查和性能優(yōu)化。技術(shù)棧選擇:自研網(wǎng)關(guān)可以根據(jù)團(tuán)隊的技術(shù)棧和專長選擇合適的技術(shù)和工具。你可以選擇自己熟悉和喜歡的編程語言、框架和庫,使網(wǎng)關(guān)的開發(fā)和維護(hù)更加高效和舒適。

三、網(wǎng)關(guān)整體設(shè)計

1、技術(shù)選型

1.1 基礎(chǔ)框架

SpringIOC ,SpringAOP,SpringmvcSpring Boot原生Java

1.2 網(wǎng)絡(luò)框架

原生NIOMinaNetty

1.3 注冊中心

Zookeeper:Zookeeper是一個分布式協(xié)調(diào)系統(tǒng),可以用于服務(wù)注冊與發(fā)現(xiàn)。它提供了一個可靠的分布式數(shù)據(jù)存儲,并支持高可用性和一致性。由于他是強一致所以不適合,大數(shù)據(jù)量的注冊Eureka:Eureka是Netflix開源的服務(wù)注冊與發(fā)現(xiàn)組件,被設(shè)計為在云環(huán)境中運行。它采用了基于REST的架構(gòu),具有簡單的配置和易于使用的特點。Netflix在官方文檔中已宣布停止對Eureka的更新和維護(hù)Consul:Consul是一個開源的服務(wù)網(wǎng)格解決方案,提供了服務(wù)注冊與發(fā)現(xiàn)、健康檢查、鍵值存儲、分布式一致性和多數(shù)據(jù)中心功能等,但是他是GO語言實現(xiàn)的Nacos:Nacos是阿里巴巴開源的一個服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)治理平臺。它提供了統(tǒng)一的服務(wù)注冊與發(fā)現(xiàn)、動態(tài)配置管理、服務(wù)健康監(jiān)測和流量管理等功能,幫助構(gòu)建和管理云原生應(yīng)用和微服務(wù)架構(gòu)

1.4 配置中心

Spring Cloud Config:Spring Cloud Config是Spring Cloud提供的配置管理工具用于集中管理和分發(fā)應(yīng)用程序的配置,但是不支持動態(tài)刷新ApolloNacos

2、高性能要點

2.1異步化處理

單異步模式 (Future)雙異步模式 (completeFuture)

Future接口在某些方面存在一些局限性,這些局限性包括:

阻塞式獲取結(jié)果:Future的 get()方法是阻塞的,這意味著如果任務(wù)的結(jié)果還沒有準(zhǔn)備好,調(diào)用 get()方法的線程將會被阻塞,直到結(jié)果可用。這可能會導(dǎo)致應(yīng)用程序的性能下降,特別是當(dāng)需要同時處理多個 Future對象時。無法取消任務(wù):Future接口提供了 cancel()方法來取消任務(wù)的執(zhí)行,但是這個方法并不能真正地取消任務(wù)的執(zhí)行。它只是嘗試去取消任務(wù),并返回一個表示取消成功與否的布爾值。如果任務(wù)已經(jīng)開始執(zhí)行或已經(jīng)完成,那么 cancel()方法將無效。缺乏異常處理:Future接口的 get()方法會拋出 InterruptedException和 ExecutionException異常。然而,這些異常并不提供足夠的信息來了解任務(wù)失敗的原因。當(dāng)任務(wù)拋出異常時,我們無法在 Future對象上捕獲和處理這些異常。無法組合多個 Future對象:在某些情況下,我們可能需要組合多個異步任務(wù)的結(jié)果,例如并行執(zhí)行多個任務(wù)并將它們的結(jié)果合并。Future接口本身并不提供直接的支持來處理這種情況,需要使用其他的方法,例如使用 CompletionService或者 CompletableFuture來實現(xiàn)。

為了克服這些局限性,Java 8 引入了 CompletableFuture類,它提供了更強大和靈活的功能,包括更好的異常處理、組合多個任務(wù)的結(jié)果以及異步任務(wù)的回調(diào)等。CompletableFuture類提供了一種更現(xiàn)代和易于使用的方式來處理異步編程任務(wù)。

CompletableFuture

CompletableFuture是Java編程語言中的一個類,它在Java 8中引入作為CompletableFuture API的一部分。它屬于java.util.concurrent包,并提供了一種執(zhí)行異步編程和處理異步計算結(jié)果的方式。

CompletableFuture代表了一個可能在未來完成的計算,并允許你將多個操作鏈接在一起形成一個流水線。每個操作都是異步執(zhí)行的,這意味著它可以與其他操作或任務(wù)并發(fā)運行。

以下是關(guān)于CompletableFuture的一些關(guān)鍵特性和概念:

異步執(zhí)行:CompletableFuture提供了一種異步執(zhí)行任務(wù)的方式,這意味著你可以啟動一個任務(wù)并繼續(xù)執(zhí)行其他操作,而不需要等待任務(wù)完成。組合:你可以將多個CompletableFuture實例鏈接在一起,形成一個操作的流水線。這使得你可以表達(dá)復(fù)雜的異步工作流和任務(wù)之間的依賴關(guān)系。完成動作:CompletableFuture允許你指定在CompletableFuture完成時應(yīng)執(zhí)行的動作,無論是正常完成還是異常完成。你可以附加回調(diào)函數(shù),在計算結(jié)果可用時執(zhí)行,或者處理任何發(fā)生的異常。結(jié)果合并:CompletableFuture提供了多種方法,在多個CompletableFuture都完成時合并它們的結(jié)果。例如,你可以使用 thenCombine方法指定一個函數(shù),將兩個CompletableFuture的結(jié)果合并并產(chǎn)生一個新的結(jié)果。異常處理:CompletableFuture提供了多種方法來處理計算過程中發(fā)生的異常。你可以使用 exceptionally方法指定一個備用值,或者使用 handle方法處理異常并基于異常產(chǎn)生一個結(jié)果。異步執(zhí)行模型:CompletableFuture支持不同的執(zhí)行模型,例如使用單獨的線程異步執(zhí)行任務(wù),或者利用線程池執(zhí)行任務(wù)。

package com.msb;

import java.util.concurrent.*;

public class FutureTaskTest {

public static void main(String[] args) throws ExecutionException, InterruptedException {

// 創(chuàng)建任務(wù)T2 FutureTask

FutureTask ft2 = new FutureTask<>(new T2Task());

// 創(chuàng)建任務(wù)T1的 FutureTask

FutureTask ft1 = new FutureTask<>(new T1Task(ft2));

// 線程1 執(zhí)行T2任務(wù)

Thread t1 = new Thread(ft2);

t1.start();

// 線程2執(zhí)行 任務(wù)他

Thread t2 = new Thread(ft1);

t2.start();

//等待返回結(jié)果

System.out.println(ft1.get());

}

}

// T1 任務(wù) 洗水壺,燒開水,泡茶

class T1Task implements Callable{

FutureTask ft2;

public T1Task(FutureTask ft2) {

this.ft2 = ft2;

}

@Override

public String call() throws Exception {

System.out.println("T1 洗水壺。。。。。");

TimeUnit.SECONDS.sleep(1);

System.out.println("T1 燒開水。。。。。");

TimeUnit.SECONDS.sleep(2);

// 獲取T2線程

String res = ft2.get();

System.out.println("T1 拿到茶葉。。。" + res);

System.out.println("T1 泡茶。。。。。");

return "喝茶" + res;

}

}

// T2任務(wù) 洗茶壺、洗茶杯、拿茶葉

class T2Task implements Callable{

@Override

public String call() throws Exception {

System.out.println("T2 洗茶壺。。。。。");

TimeUnit.SECONDS.sleep(1);

System.out.println("T2 洗茶杯。。。。。");

TimeUnit.SECONDS.sleep(2);

System.out.println("T2 拿茶葉。。。。。");

TimeUnit.SECONDS.sleep(1);

return "鐵觀音";

}

}

package com.msb;

import java.util.concurrent.CompletableFuture;

import java.util.concurrent.TimeUnit;

public class CompletableFutureTest {

public static void main(String[] args) {

// 任務(wù)1: 洗水壺 -> 燒開水

CompletableFuture f1 = CompletableFuture.runAsync(() -> {

System.out.println("T1 洗水壺。。。。。");

sleep(1,TimeUnit.SECONDS);

System.out.println("T1 燒開水。。。。。");

sleep(2,TimeUnit.SECONDS);

});

// 任務(wù)2: 洗茶壺 -> 洗茶杯 -> 拿茶葉

CompletableFuture f2 = CompletableFuture.supplyAsync(() -> {

System.out.println("T2 洗茶壺。。。。。");

sleep(1,TimeUnit.SECONDS);

System.out.println("T2 洗茶杯。。。。。");

sleep(2,TimeUnit.SECONDS);

System.out.println("T2 拿茶葉。。。。。");

sleep(1,TimeUnit.SECONDS);

return "鐵觀音";

});

// 任務(wù)3: 任務(wù)1和任務(wù)2完成后執(zhí)行:泡茶

CompletableFuture f3 = f1.thenCombine(f2, (__, tf) -> {

System.out.println("T1 拿到茶葉。。。。" + tf);

System.out.println("T1 泡茶");

return "喝茶:" + tf;

});

// 等待任務(wù)3的執(zhí)行結(jié)果

System.out.println(f3.join());

}

static void sleep(int t ,TimeUnit u){

try {

u.sleep(t);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

2.2 使用緩存機制

盡量使用內(nèi)容作為緩存(Map、Queue) ,比如加載的配置

2.3 合理利用串行和并行化機制

串行化使用場景 耗時較小,性能要求較高的場景 并行化使用場景 耗時較久,任務(wù)之間沒有依賴關(guān)系,比如遠(yuǎn)程RPC調(diào)用場景

3、整體架構(gòu)

柚子快報激活碼778899分享:分布式之網(wǎng)關(guān)介紹

http://yzkb.51969.com/

相關(guān)文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18794539.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄