精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

日流量200億,攜程網(wǎng)關(guān)的架構(gòu)設(shè)計

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
網(wǎng)關(guān)在各種技術(shù)交流平臺上一直是備受關(guān)注的話題,有很多成熟的解決方案:易于上手且發(fā)展較早的 Zuul 1.0、高性能的 Nginx、集成度高的 Spring Cloud Gateway、日益流行的 Istio 等等。

日流量200億,攜程網(wǎng)關(guān)的架構(gòu)設(shè)計

方案的作者:Butters,攜程軟件技術(shù)專家,專注于網(wǎng)絡(luò)架構(gòu)、API網(wǎng)關(guān)、負(fù)載均衡、Service Mesh等領(lǐng)域。

一、概述

類似于許多企業(yè)的做法,攜程 API 網(wǎng)關(guān)是伴隨著微服務(wù)架構(gòu)一同引入的基礎(chǔ)設(shè)施,其最初版本于 2014 年發(fā)布。隨著服務(wù)化在公司內(nèi)的迅速推進(jìn),網(wǎng)關(guān)逐步成為應(yīng)用程序暴露在外網(wǎng)的標(biāo)準(zhǔn)解決方案。后續(xù)的“ALL IN 無線”、國際化、異地多活等項目,網(wǎng)關(guān)都隨著公司公共業(yè)務(wù)與基礎(chǔ)架構(gòu)的共同演進(jìn)而不斷發(fā)展。截至 2021 年 7 月,整體接入服務(wù)數(shù)量超過 3000 個,日均處理流量達(dá)到 200 億。

在技術(shù)方案方面,公司微服務(wù)的早期發(fā)展深受 NetflixOSS 的影響,網(wǎng)關(guān)部分最早也是參考了 Zuul 1.0 進(jìn)行的二次開發(fā),其核心可以總結(jié)為以下四點:

  • server端:Tomcat NIO + AsyncServlet
  • 業(yè)務(wù)流程:獨立線程池,分階段的責(zé)任鏈模式
  • client端:Apache HttpClient,同步調(diào)用
  • 核心組件:Archaius(動態(tài)配置客戶端),Hystrix(熔斷限流),Groovy(熱更新支持)

圖片圖片


眾所周知,同步調(diào)用會阻塞線程,系統(tǒng)的吞吐能力受 IO 影響較大。

作為行業(yè)的領(lǐng)先者,Zuul 在設(shè)計時已經(jīng)考慮到了這個問題:通過引入 Hystrix,實現(xiàn)資源隔離和限流,將故障(慢 IO)限制在一定范圍內(nèi);結(jié)合熔斷策略,可以提前釋放部分線程資源;最終達(dá)到局部異常不會影響整體的目標(biāo)。

然而,隨著公司業(yè)務(wù)的不斷發(fā)展,上述策略的效果逐漸減弱,主要原因有兩方面:

  • 業(yè)務(wù)出海:網(wǎng)關(guān)作為海外接入層,部分流量需要轉(zhuǎn)回國內(nèi),慢 IO 成為常態(tài)
  • 服務(wù)規(guī)模增長:局部異常成為常態(tài),加上微服務(wù)異常擴散的特性,線程池可能長期處于亞健康狀態(tài)

圖片圖片

全異步改造是攜程 API 網(wǎng)關(guān)近年來的一項核心工作,本文也將圍繞此展開,探討我們在網(wǎng)關(guān)方面的工作與實踐經(jīng)驗。

重點包括:性能優(yōu)化、業(yè)務(wù)形態(tài)、技術(shù)架構(gòu)、治理經(jīng)驗等。

二、高性能網(wǎng)關(guān)核心設(shè)計

2.1. 異步流程設(shè)計

全異步 = server端異步 + 業(yè)務(wù)流程異步 + client端異步

對于server與client端,我們采用了 Netty 框架,其 NIO/Epoll + Eventloop 的本質(zhì)就是事件驅(qū)動的設(shè)計。

我們改造的核心部分是將業(yè)務(wù)流程進(jìn)行異步化,常見的異步場景有:

  • 業(yè)務(wù) IO 事件:例如請求校驗、身份驗證,涉及遠(yuǎn)程調(diào)用
  • 自身 IO 事件:例如讀取到了報文的前 xx 字節(jié)
  • 請求轉(zhuǎn)發(fā):包括 TCP 連接,HTTP 請求

從經(jīng)驗上看,異步編程在設(shè)計和讀寫方面相比同步會稍微困難一些,主要包括:

  • 流程設(shè)計&狀態(tài)轉(zhuǎn)換
  • 異常處理,包括常規(guī)異常與超時
  • 上下文傳遞,包括業(yè)務(wù)上下文與trace log
  • 線程調(diào)度
  • 流量控制

特別是在Netty上下文內(nèi),如果對 ByteBuf 的生命周期設(shè)計不完善,很容易導(dǎo)致內(nèi)存泄漏。

圍繞這些問題,我們設(shè)計了對應(yīng)外圍框架,最大努力對業(yè)務(wù)代碼抹平同步/異步差異,方便開發(fā);同時默認(rèn)兜底與容錯,保證程序整體安全。

在工具方面,我們使用了 RxJava,其主要流程如下圖所示。

圖片圖片


  • Maybe
  • RxJava 的內(nèi)置容器類,表示正常結(jié)束、有且僅有一個對象返回、異常三種狀態(tài)
  • 響應(yīng)式,便于整體狀態(tài)機設(shè)計,自帶異常處理、超時、線程調(diào)度等封裝
  • Maybe.empty()/Maybe.just(T),適用同步場景
  • 工具類RxJavaPlugins,方便切面邏輯封裝
  • Filter
  • 代表一塊獨立的業(yè)務(wù)邏輯,同步&異步業(yè)務(wù)統(tǒng)一接口,返回Maybe
  • 異步場景(如遠(yuǎn)程調(diào)用)統(tǒng)一封裝,如涉及線程切換,通過maybe.obesrveOn(eventloop)切回
  • 異步filter默認(rèn)增加超時,并按弱依賴處理,忽略錯誤
public interface Processor<T> {    
    ProcessorType getType();
    
    int getOrder();
    
    boolean shouldProcess(RequestContext context);
    
    //對外統(tǒng)一封裝為Maybe    
    Maybe<T> process(RequestContext context) throws Exception; 
}
public abstract class AbstractProcessor implements Processor { 
    //同步&無響應(yīng),繼承此方法 
    //場景:常規(guī)業(yè)務(wù)處理 
    protected void processSync(RequestContext context) throws Exception {}


    //同步&有響應(yīng),繼承此方法,健康檢測
    //場景:健康檢測、未通過校驗時的靜態(tài)響應(yīng)
    protected T processSyncAndGetReponse(RequestContext context) throws Exception {
        process(context);
        return null;
    };


    //異步,繼承此方法
    //場景:認(rèn)證、鑒權(quán)等涉及遠(yuǎn)程調(diào)用的模塊
    protected Maybe<T> processAsync(RequestContext context) throws Exception 
    {
        T response = processSyncAndGetReponse(context);
        if (response == null) {
            return Maybe.empty();
        } else {
            return Maybe.just(response);
        }
    };


    @Override
    public Maybe<T> process(RequestContext context) throws Exception {
        Maybe<T> maybe = processAsync(context);
        if (maybe instanceof ScalarCallable) {
            //標(biāo)識同步方法,無需額外封裝
            return maybe;
        } else {
            //統(tǒng)一加超時,默認(rèn)忽略錯誤
            return maybe.timeout(getAsyncTimeout(context), TimeUnit.MILLISECONDS,
                                 Schedulers.from(context.getEventloop()), timeoutFallback(context));
        }
    }


    protected long getAsyncTimeout(RequestContext context) {
        return 2000;
    }


    protected Maybe<T> timeoutFallback(RequestContext context) {
        return Maybe.empty();
    }
}
  • 整體流程
  • 沿用責(zé)任鏈的設(shè)計,分為inbound、outbound、error、log四階段
  • 各階段由一或多個filter組成
  • filter順序執(zhí)行,遇到異常則中斷,inbound期間任意filter返回response也觸發(fā)中斷
public class RxUtil{
    //組合某階段(如Inbound)內(nèi)的多個filter(即Callable<Maybe<T>>)
    public static <T> Maybe<T> concat(Iterable<? extends Callable<Maybe<T>>> iterable) {
        Iterator<? extends Callable<Maybe<T>>> sources = iterable.iterator();
        while (sources.hasNext()) {
            Maybe<T> maybe;
            try {
                maybe = sources.next().call();
            } catch (Exception e) {
                return Maybe.error(e);
            }
            if (maybe != null) {
                if (maybe instanceof ScalarCallable) {
                    //同步方法
                    T response = ((ScalarCallable<T>)maybe).call();
                    if (response != null) {
                        //有response,中斷
                        return maybe;
                    }
                } else {
                    //異步方法
                    if (sources.hasNext()) {
                        //將sources傳入回調(diào),后續(xù)filter重復(fù)此邏輯
                        return new ConcattedMaybe(maybe, sources);
                    } else {
                        return maybe;
                    }
                }
            }
        }
        return Maybe.empty();
    }
}
public class ProcessEngine{
    //各個階段,增加默認(rèn)超時與錯誤處理
    private void process(RequestContext context) {
        List<Callable<Maybe<Response>>> inboundTask = get(ProcessorType.INBOUND, context);
        List<Callable<Maybe<Void>>> outboundTask = get(ProcessorType.OUTBOUND, context);
        List<Callable<Maybe<Response>>> errorTask = get(ProcessorType.ERROR, context);
        List<Callable<Maybe<Void>>> logTask = get(ProcessorType.LOG, context);

        RxUtil.concat(inboundTask)    //inbound階段                    
            .toSingle()        //獲取response                          
            .flatMapMaybe(response -> {
                context.setOriginResponse(response);
                return RxUtil.concat(outboundTask);
            })            //進(jìn)入outbound
            .onErrorResumeNext(e -> {
                context.setThrowable(e);
                return RxUtil.concat(errorTask).flatMap(response -> {
                    context.resetResponse(response);
                    return RxUtil.concat(outboundTask);
                });
            })            //異常則進(jìn)入error,并重新進(jìn)入outbound
            .flatMap(response -> RxUtil.concat(logTask))  //日志階段
            .timeout(asyncTimeout.get(), TimeUnit.MILLISECONDS, Schedulers.from(context.getEventloop()),
                     Maybe.error(new ServerException(500, "Async-Timeout-Processing"))
                    )            //全局兜底超時
            .subscribe(        //釋放資源
            unused -> {
                logger.error("this should not happen, " + context);
                context.release();
            },
            e -> {
                logger.error("this should not happen, " + context, e);
                context.release();
            },
            () -> context.release()
        );
    }   
}


2.2. 流式轉(zhuǎn)發(fā)&單線程

以HTTP為例,報文可劃分為initial line/header/body三個組成部分。

圖片圖片

在攜程,網(wǎng)關(guān)層業(yè)務(wù)不涉及請求體body。

因為無需全量存,所以解析完請求頭header后可直接進(jìn)入業(yè)務(wù)流程。

同時,如果收到請求體body部分:

①若已向upstream轉(zhuǎn)發(fā)請求,則直接轉(zhuǎn)發(fā);

②否則,需要將其暫時存儲,等待業(yè)務(wù)流程處理完畢后,再將其與initial line/header一并發(fā)送;

③對upstream端響應(yīng)的處理方式亦然。

對比完整解析HTTP報文的方式,這樣處理:

  • 更早進(jìn)入業(yè)務(wù)流程,意味著upstream更早接收到請求,可以有效地降低網(wǎng)關(guān)層引入的延遲
  • body生命周期被壓縮,可降低網(wǎng)關(guān)自身的內(nèi)存開銷

盡管性能有所提升,但流式處理也大大增加了整個流程的復(fù)雜性。

圖片圖片

在非流式場景下,Netty Server端編解碼、入向業(yè)務(wù)邏輯、Netty Client端的編解碼、出向業(yè)務(wù)邏輯,各個子流程相互獨立,各自處理完整的HTTP對象。而采用流式處理后,請求可能同時處于多個流程中,這帶來了以下三個挑戰(zhàn):

  • 線程安全問題:如果各個流程使用不同的線程,那么可能會涉及到上下文的并發(fā)修改;
  • 多階段聯(lián)動:比如Netty Server請求接收一半遇到了連接中斷,此時已經(jīng)連上了upstream,那么upstream側(cè)的協(xié)議棧是走不完的,也必須隨之關(guān)閉連接;
  • 邊緣場景處理:比如upstream在請求未完整發(fā)送情況下返回了404/413,是選擇繼續(xù)發(fā)送、走完協(xié)議棧、讓連接能夠復(fù)用,還是選擇提前終止流程,節(jié)約資源,但同時放棄連接?再比如,upstream已收到請求但未響應(yīng),此時Netty Server突然斷開,Netty Client是否也要隨之?dāng)嚅_?等等。

為了應(yīng)對這些挑戰(zhàn),我們采用了單線程的方式,核心設(shè)計包括:

  • 上線文綁定Eventloop,Netty Server/業(yè)務(wù)流程/Netty Client在同個eventloop執(zhí)行;
  • 異步filter如因IO庫的關(guān)系,必須使用獨立線程池,那在后置處理上必須切回;
  • 流程內(nèi)資源做必要的線程隔離(如連接池);

單線程方式避免了并發(fā)問題,在處理多階段聯(lián)動、邊緣場景問題時,整個系統(tǒng)處于確定的狀態(tài)下,有效降低了開發(fā)難度和風(fēng)險;此外,減少線程切換,也能在一定程度上提升性能。然而,由于 worker 線程數(shù)較少(一般等于 CPU 核數(shù)),eventloop 內(nèi)必須完全避免 IO 操作,否則將對系統(tǒng)的吞吐量造成重大影響。

2.3 其他優(yōu)化

  • 內(nèi)部變量懶加載

對于請求的 cookie/query 等字段,如果沒有必要,不提前進(jìn)行字符串解析

  • 堆外內(nèi)存&零拷貝

結(jié)合前文的流式轉(zhuǎn)發(fā)設(shè)計,進(jìn)一步減少系統(tǒng)內(nèi)存占用。

  • ZGC

由于項目升級到 TLSv1.3,引入了 JDK11(JDK8 支持較晚,8u261 版本,2020.7.14),同時也嘗試了新一代的垃圾回收算法,其實際表現(xiàn)確實如人們所期待的那樣出色。盡管 CPU 占用有所增加,但整體 GC 耗時下降非常顯著。

圖片圖片


圖片圖片

  • 定制的HTTP編解碼

由于 HTTP 協(xié)議的歷史悠久及其開放性,產(chǎn)生了很多“不良實踐”,輕則影響請求成功率,重則對網(wǎng)站安全構(gòu)成威脅。

  • 流量治理

對于請求體過大(413)、URI 過長(414)、非 ASCII 字符(400)等問題,一般的 Web 服務(wù)器會選擇直接拒絕并返回相應(yīng)的狀態(tài)碼。由于這類問題跳過了業(yè)務(wù)流程,因此在統(tǒng)計、服務(wù)定位和故障排查方面會帶來一些麻煩。通過擴展編解碼,讓問題請求也能完成路由流程,有助于解決非標(biāo)準(zhǔn)流量的管理問題。

  • 請求過濾

例如 request smuggling(Netty 4.1.61.Final 修復(fù),2021.3.30 發(fā)布)。通過擴展編解碼,增加自定義校驗邏輯,可以讓安全補丁更快地得以應(yīng)用。

三、網(wǎng)關(guān)業(yè)務(wù)形態(tài)

作為獨立的、統(tǒng)一的入向流量收口點,網(wǎng)關(guān)對企業(yè)的價值主要展現(xiàn)在三個方面:

  • 解耦不同網(wǎng)絡(luò)環(huán)境:典型場景包括內(nèi)網(wǎng)&外網(wǎng)、生產(chǎn)環(huán)境&辦公區(qū)、IDC內(nèi)部不同安全域、專線等;
  • 天然的公共業(yè)務(wù)切面:包括安全&認(rèn)證&反爬、路由&灰度、限流&熔斷&降級、監(jiān)控&告警&排障等;

圖片圖片

圖片圖片

  • 高效、靈活的流量控制

這里展開講幾個細(xì)分場景:

  • 私有協(xié)議

在收口的客戶端(APP)中,框架層會攔截用戶發(fā)起的 HTTP 請求,通過私有協(xié)議(SOTP)的方式傳送到服務(wù)端。

選址方面:①通過服務(wù)端分配 IP,防止 DNS 劫持;②進(jìn)行連接預(yù)熱;③采用自定義的選址策略,可以根據(jù)網(wǎng)絡(luò)狀況、環(huán)境等因素自行切換。

交互方式上:①采用更輕量的協(xié)議體;②統(tǒng)一進(jìn)行加密與壓縮與多路復(fù)用;③在入口處由網(wǎng)關(guān)統(tǒng)一轉(zhuǎn)換協(xié)議,對業(yè)務(wù)無影響。

  • 鏈路優(yōu)化

關(guān)鍵在于引入接入層,讓遠(yuǎn)程用戶就近訪問,解決握手開銷過大的問題。同時,由于接入層與 IDC 兩端都是可控的,因此在網(wǎng)絡(luò)鏈路選擇、協(xié)議交互模式等方面都有更大的優(yōu)化空間。

  • 異地多活

與按比例分配、就近訪問策略等不同,在異地多活模式下,網(wǎng)關(guān)(接入層)需要根據(jù)業(yè)務(wù)維度的 shardingKey 進(jìn)行分流(如 userId),防止底層數(shù)據(jù)沖突。

圖片圖片

四、網(wǎng)關(guān)治理

下所示的圖表概括了網(wǎng)上網(wǎng)關(guān)的工作狀態(tài)。縱向?qū)?yīng)我們的業(yè)務(wù)流程:各種渠道(如 APP、H5、小程序、供應(yīng)商)和各種協(xié)議(如 HTTP、SOTP)的流量通過負(fù)載均衡分配到網(wǎng)關(guān),通過一系列業(yè)務(wù)邏輯處理后,最終被轉(zhuǎn)發(fā)到后端服務(wù)。經(jīng)過第二章的改進(jìn)后,橫向業(yè)務(wù)在性能和穩(wěn)定性方面都得到了顯著提升。

圖片圖片


另一方面,由于多渠道/協(xié)議的存在,網(wǎng)上網(wǎng)關(guān)根據(jù)業(yè)務(wù)進(jìn)行了獨立集群的部署。早期,業(yè)務(wù)差異(如路由數(shù)據(jù)、功能模塊)通過獨立的代碼分支進(jìn)行管理,但是隨著分支數(shù)量的增加,整體運維的復(fù)雜性也在不斷提高。在系統(tǒng)設(shè)計中,復(fù)雜性通常也意味著風(fēng)險。因此,如何對多協(xié)議、多角色的網(wǎng)關(guān)進(jìn)行統(tǒng)一管理,如何以較低的成本快速為新業(yè)務(wù)構(gòu)建定制化的網(wǎng)關(guān),成為了我們下一階段的工作重點。

解決方案已經(jīng)在圖中直觀地呈現(xiàn)出來,一是在協(xié)議上進(jìn)行兼容處理,使網(wǎng)上代碼在一個框架下運行;二是引入控制面,對網(wǎng)上網(wǎng)關(guān)的差異特性進(jìn)行統(tǒng)一管理。

圖片圖片

4.1 多協(xié)議兼容

多協(xié)議兼容的方法并不新穎,可以參考 Tomcat 對 HTTP/1.0、HTTP/1.1、HTTP/2.0 的抽象處理。盡管 HTTP 在各個版本中增加了許多新特性,但在進(jìn)行業(yè)務(wù)開發(fā)時,我們通常無法感知到這些變化,關(guān)鍵在于 HttpServletRequest 接口的抽象。

在攜程,網(wǎng)上網(wǎng)關(guān)處理的都是請求 - 響應(yīng)模式的無狀態(tài)協(xié)議,報文結(jié)構(gòu)也可以劃分為元數(shù)據(jù)、擴展頭、業(yè)務(wù)報文三部分,因此可以方便地進(jìn)行類似的嘗試。相關(guān)工作可以用以下兩點來概括:

  • 協(xié)議適配層:用于屏蔽不同協(xié)議的編解碼、交互模式、對 TCP 連接的處理等
  • 定義通用中間模型與接口:業(yè)務(wù)面向中間模型與接口進(jìn)行編程,更好地關(guān)注到協(xié)議對應(yīng)的業(yè)務(wù)屬性上

圖片圖片


4.2 路由模塊

路由模塊是控制面的兩個主要組成部分之一,除了管理網(wǎng)關(guān)與服務(wù)之間的映射關(guān)系外,服務(wù)本身可以用以下模型來概括:

{
    //匹配方式
    "type": "uri",

    //HTTP默認(rèn)采用uri前綴匹配,內(nèi)部通過樹結(jié)構(gòu)尋址;私有協(xié)議(SOTP)通過服務(wù)唯一標(biāo)識定位。
    "value": "/hotel/order",
    "matcherType": "prefix",

    //標(biāo)簽與屬性
    //用于portal端權(quán)限管理、切面邏輯運行(如按核心/非核心)等
    "tags": [
        "owner_admin",
        "org_framework",
        "appId_123456"
    ],
    "properties": {
        "core": "true"
    },

    //endpoint信息
    "routes": [{
        //condition用于二級路由,如按app版本劃分、按query重分配等
        "condition": "true",
        "conditionParam": {},
        "zone": "PRO",

        //具體服務(wù)地址,權(quán)重用于灰度場景
        "targets": [{
            "url": "http://test.ctrip.com/hotel",
            "weight": 100
        }
                   ]
    }]
}


4.3 模塊編排

模塊調(diào)度是控制面的另一個關(guān)鍵組成部分。我們在網(wǎng)關(guān)處理流程中設(shè)置了多個階段(圖中用粉色表示)。除了熔斷、限流、日志等通用功能外,運行時,不同網(wǎng)關(guān)需要執(zhí)行的業(yè)務(wù)功能由控制面統(tǒng)一分配。這些功能在網(wǎng)關(guān)內(nèi)部有獨立的代碼模塊,而控制面則額外定義了這些功能對應(yīng)的執(zhí)行條件、參數(shù)、灰度比例和錯誤處理方式等。這種調(diào)度方式也在一定程度上保證了模塊之間的解耦。

圖片圖片

{
    //模塊名稱,對應(yīng)網(wǎng)關(guān)內(nèi)部某個具體模塊
    "name": "addResponseHeader",

    //執(zhí)行階段
    "stage": "PRE_RESPONSE",

    //執(zhí)行順序
    "ruleOrder": 0,

    //灰度比例
    "grayRatio": 100,

    //執(zhí)行條件
    "condition": "true",
    "conditionParam": {},

    //執(zhí)行參數(shù)
    //大量${}形式的內(nèi)置模板,用于獲取運行時數(shù)據(jù)
    "actionParam": {
        "connection": "keep-alive",
        "x-service-call": "${request.func.remoteCost}",
        "Access-Control-Expose-Headers": "x-service-call",
        "x-gate-root-id": "${func.catRootMessageId}"
    },

    //異常處理方式,可以拋出或忽略
    "exceptionHandle": "return"
}


五、總結(jié)

網(wǎng)關(guān)在各種技術(shù)交流平臺上一直是備受關(guān)注的話題,有很多成熟的解決方案:易于上手且發(fā)展較早的 Zuul 1.0、高性能的 Nginx、集成度高的 Spring Cloud Gateway、日益流行的 Istio 等等。

最終的選型還是取決于各公司的業(yè)務(wù)背景和技術(shù)生態(tài)。

因此,在攜程,我們選擇了自主研發(fā)的道路。

技術(shù)在不斷發(fā)展,我們也在持續(xù)探索,包括公共網(wǎng)關(guān)與業(yè)務(wù)網(wǎng)關(guān)的關(guān)系、新協(xié)議(如 HTTP3)的應(yīng)用、與 ServiceMesh 的關(guān)聯(lián)等等。

責(zé)任編輯:武曉燕 來源: 樓仔
相關(guān)推薦

2021-06-28 10:09:59

架構(gòu)網(wǎng)關(guān)技術(shù)

2021-03-02 07:54:18

流量網(wǎng)關(guān)設(shè)計

2024-05-27 08:32:45

2021-10-14 09:51:17

架構(gòu)運維技術(shù)

2024-10-29 09:40:07

流量技術(shù)架構(gòu)

2021-12-03 10:47:28

WOT技術(shù)峰會技術(shù)

2020-01-17 11:00:23

流量系統(tǒng)架構(gòu)

2024-08-16 14:01:00

2009-04-22 10:16:37

網(wǎng)站架構(gòu)Web數(shù)據(jù)冗余

2022-02-22 10:29:24

分布式架構(gòu)高可用

2020-04-22 14:25:48

云開發(fā)高可用架構(gòu)

2024-08-16 10:11:24

2025-04-15 04:00:00

2017-01-19 18:20:59

數(shù)據(jù)架構(gòu)數(shù)據(jù)庫

2021-10-12 10:00:25

架構(gòu)運維技術(shù)

2013-05-27 10:58:28

Tumblr架構(gòu)設(shè)計雅虎收購

2023-05-12 08:06:46

Kubernetes多云架構(gòu)

2014-06-30 13:34:57

2009-05-05 10:24:48

應(yīng)用架構(gòu)設(shè)計原則

2021-08-02 11:01:32

架構(gòu)運維技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

樱桃国产成人精品视频| 久热国产精品| 亚洲国产精品大全| av动漫在线观看| 欧美69xxxx| 99久久久久免费精品国产| 日本久久久久久| 亚洲综合久久av一区二区三区| 亚洲电影一区| 91福利精品视频| 成人免费在线视频播放| 你懂的好爽在线观看| 国产一区在线不卡| 国产91在线播放| 黄色一级视频在线观看| 国语产色综合| 亚洲福利视频在线| 999久久久精品视频| 原纱央莉成人av片| 亚洲伊人色欲综合网| 日韩在线三区| 性xxxx搡xxxxx搡欧美| 国产一区在线精品| 国产精品久久一区| 69视频免费在线观看| 欧美激情第二页| 中文字幕精品www乱入免费视频| 亚洲图片欧美另类| 国产精久久久| 欧美日韩视频在线第一区| 久久综合九色综合88i| 国产鲁鲁视频在线观看特色| 国产午夜亚洲精品不卡| 国产精品一区视频网站| 99在线精品视频免费观看20| 日本aⅴ免费视频一区二区三区| 亚洲97在线观看| 久久精品久久国产| 欧美国产综合| 久久成人精品视频| 欧美美女性生活视频| 国产精品亚洲二区| 亚洲精品中文字幕av| 肉丝美足丝袜一区二区三区四| 亚洲国产伊人| 欧美精品在线视频| 另类小说色综合| 午夜精品成人av| 日本乱人伦一区| 男人天堂网视频| 在线日韩影院| 色综合久久久久网| www.国产区| 成人在线爆射| 欧美在线高清视频| 婷婷丁香激情网| 成人1区2区| 在线播放日韩导航| 精品国产鲁一鲁一区二区三区| 黄色日韩网站| 91麻豆精品国产91久久久久久 | 色综合久久久久综合| www国产黄色| 欧美xxx视频| 欧美日韩另类国产亚洲欧美一级| 中文字幕22页| 香蕉大人久久国产成人av| 日韩三区在线观看| 亚洲精品成人无码毛片| 欧美黑白配在线| 亚洲天堂av网| 日本中文字幕免费在线观看| 午夜国产一区| 秋霞av国产精品一区| 在线观看污污网站| 久久国产精品一区二区| 91视频在线免费观看| 色婷婷综合视频| 久久天堂av综合合色蜜桃网| 亚洲精品中字| 日韩激情av| 色综合久久综合网欧美综合网| 精品www久久久久奶水| 色成人综合网| 亚洲成人av片在线观看| 欧美成人国产精品一区二区| 欧美大片aaaa| 97福利一区二区| 91av国产精品| av中文一区二区三区| 亚洲高清视频一区二区| 日本在线视频中文有码| 日韩欧美精品网址| 在线看免费毛片| 日本一区福利在线| 理论片在线不卡免费观看| 91精品国产乱码久久久张津瑜| 蜜桃av一区二区在线观看| 超碰97在线资源| 成人性生交大片免费看午夜| 亚洲激情欧美激情| 日本成人中文字幕在线| 午夜日韩影院| 中文字幕久热精品在线视频| 国产精品suv一区二区| 美女网站在线免费欧美精品| 国产精品污www一区二区三区| 成人午夜影视| 偷窥少妇高潮呻吟av久久免费 | 国产成人免费高清| 日韩高清专区| 高清在线视频不卡| 日韩一区二区三区视频在线| a级在线免费观看| 国产精品毛片在线| www久久99| 免费大片在线观看www| 色综合久久综合网欧美综合网| 久久无码专区国产精品s| 99re久久最新地址获取| 国产z一区二区三区| 肥臀熟女一区二区三区| 亚洲视频在线观看三级| 欧美婷婷精品激情| 国产麻豆一区二区三区精品视频| 久久久免费精品| 国产成人a人亚洲精品无码| 亚洲国产电影在线观看| aⅴ在线免费观看| 日韩电影不卡一区| 国内外成人免费激情在线视频网站| 一级特黄aaa大片| 91视频在线观看免费| 天堂8在线天堂资源bt| 日韩视频在线直播| 欧美人成在线视频| 国产成人毛毛毛片| 亚洲伦理在线精品| 青青草原播放器| 在线精品国产| 亚洲自拍偷拍第一页| a级在线观看| 日韩视频在线永久播放| 国语对白在线播放| 国产一区二区三区国产| 致1999电视剧免费观看策驰影院| 国产精品原创视频| 日韩视频在线免费观看| 一区二区三区亚洲视频| 亚洲人成精品久久久久久| 潘金莲激情呻吟欲求不满视频| 欧美码中文字幕在线| 国产精品激情av电影在线观看 | 色综合色综合久久综合频道88| 国产suv精品一区二区69| 亚洲精品免费在线观看| 中文字幕一区久久| 欧美国产91| 黄色国产精品一区二区三区| √8天堂资源地址中文在线| 日韩成人免费视频| 青青国产在线视频| 1024亚洲合集| 欧美激情 亚洲| 久久xxxx精品视频| 亚洲在线视频一区二区| 久久伊人影院| 69视频在线免费观看| 黄色片在线免费观看| 欧美视频精品在线观看| 欧美丰满熟妇bbbbbb| www.欧美亚洲| 少妇网站在线观看| 欧美日本国产| 美媛馆国产精品一区二区| 色猫猫成人app| 欧美伦理91i| 日韩欧美在线观看一区二区| 欧美三级三级三级爽爽爽| 国产精品 欧美激情| www.欧美精品一二区| 日韩福利视频在线| 欧美日韩精品免费观看视频完整| 国产伦精品一区二区三区四区视频 | 亚洲第一区第二区第三区| 欧美视频官网| 欧美一区三区二区在线观看| 国产精品一站二站| 欧美亚洲第一页| a级影片在线观看| 国产亚洲精品高潮| 亚洲精品福利网站| 欧美色视频在线| 日本在线视频免费观看| 国产日韩欧美亚洲| 精品久久久久久无码人妻| 日韩中文字幕区一区有砖一区 | 日韩av在线播放中文字幕| 免费国产成人看片在线| 亚洲三级精品| 91精品婷婷国产综合久久蝌蚪| 波多野结衣亚洲| 欧美高清videos高潮hd| 成人免费黄色网页| 亚洲精品按摩视频| a在线观看视频| 欧美日韩亚洲丝袜制服| 国产区一区二区三| 尤物在线观看一区| 最新日韩免费视频| 久久久久久一二三区| 欧美日韩一区二区区别是什么 | 综合色一区二区| 日韩影片在线播放| 亚洲小说图片视频| 国产精品区一区| 久久69av| 成人免费网站在线| 91九色综合| 日本视频久久久| 超碰在线99| 欧美黄网免费在线观看| 日本中文字幕在线播放| 亚洲色无码播放| 手机看片福利在线观看| 欧美成人猛片aaaaaaa| 国产又粗又黄视频| 欧美日韩一区二区三区在线看| 秋霞精品一区二区三区| 欧美日韩免费在线| 久久久久久久极品| 亚洲二区在线观看| 免费观看一级视频| 亚洲网友自拍偷拍| 日本一二三区不卡| 性欧美大战久久久久久久久| 免费人成在线观看| 一区2区3区在线看| 久久丫精品久久丫| 亚洲国产美女搞黄色| 欧美人与禽zozzo禽性配| 亚洲精品菠萝久久久久久久| 顶臀精品视频www| 亚洲人成网站色在线观看| 国产高潮国产高潮久久久91| 自拍视频在线观看一区二区| 尤物在线免费视频| 亚洲精品中文在线影院| 日韩欧美中文字幕视频| 一区二区三区久久久| 久久国产精品波多野结衣av| 亚洲伊人色欲综合网| 日韩少妇裸体做爰视频| 欧美性精品220| 波多野结衣一本一道| 欧美视频中文字幕| 91在线公开视频| 日韩视频一区二区三区| 人人妻人人澡人人爽人人欧美一区| 精品国产一区二区三区av性色| 亚洲a视频在线观看| 亚洲二区中文字幕| 欧洲天堂在线观看| 一区二区三区四区视频| 精品自拍一区| 久久久亚洲影院你懂的| 丁香六月综合| 国产又爽又黄的激情精品视频| 国产一区二区| 久久精品欧美| 日韩精品永久网址| 国产制服91一区二区三区制服| 日韩天天综合| 麻豆传传媒久久久爱| 国产在线不卡一区| 亚洲永久无码7777kkk| 中文字幕免费在线观看视频一区| 四虎地址8848| 亚洲不卡在线观看| 国产精品传媒在线观看| 日韩限制级电影在线观看| 婷婷在线免费观看| 色偷偷av亚洲男人的天堂| 国模私拍视频在线播放| 国产成人一区二| 久久精品免视看国产成人| 黄色小网站91| 亚洲欧洲日韩| 成年人在线看片| 国产成人亚洲综合a∨婷婷图片| 亚洲自拍偷拍一区二区| 亚洲精品日产精品乱码不卡| 日日摸天天添天天添破| 欧美精品乱码久久久久久按摩| 视频一区二区免费| 日韩在线观看免费高清完整版| av在线网页| 2014亚洲精品| 欧洲毛片在线视频免费观看| 高清无码视频直接看| 男女激情视频一区| 在线观看国产网站| 一区二区免费看| 在线观看一二三区| 亚洲精品视频网上网址在线观看| 国产在线观看a视频| 国产国产精品人在线视| a看欧美黄色女同性恋| 亚洲欧洲一区二区在线观看| av成人毛片| 又大又长粗又爽又黄少妇视频| 欧美激情一区二区三区不卡| 精品国产乱码一区二区| 欧美一区二区三区四区高清| 高清在线观看av| 欧洲美女7788成人免费视频| 伊人精品综合| 欧美 国产 精品| 精品伊人久久久久7777人| 国产精品国产三级国产专业不| 五月天亚洲婷婷| 蜜臀av午夜精品| 色综合久久精品亚洲国产| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 国产亚洲自拍偷拍| 欧美高清不卡| 岛国大片在线免费观看| 亚洲手机成人高清视频| 国产99久久久久久免费看| 精品视频中文字幕| 成人在线黄色电影| 国产另类自拍| 亚洲欧洲一级| 小毛片在线观看| 午夜精品在线视频一区| 懂色av蜜臀av粉嫩av分享吧| 欧美高清视频在线播放| 日韩一二三区| 加勒比成人在线| 成年人午夜久久久| 97超碰人人干| 亚洲色图17p| 99久久婷婷国产综合精品首页| 欧美日韩国产免费一区二区三区| 国产精品亚洲欧美| 一级性生活毛片| 欧美在线观看视频一区二区三区 | 久久视频精品在线| 精品国产乱码一区二区三区| 国产免费一区二区三区四在线播放| 久久激情综合网| 日本福利片在线观看| 日韩欧美在线网站| 国产经典三级在线| 精品视频导航| 日韩中文字幕1| 国产又黄又粗又猛又爽的| 欧美精品亚洲二区| 手机av在线播放| 久久国产一区二区| 免费美女久久99| 印度午夜性春猛xxx交| 精品精品欲导航| 色偷偷色偷偷色偷偷在线视频| 欧美国产综合视频| 久久99最新地址| 国产精品30p| 一本一本久久a久久精品牛牛影视| 992tv国产精品成人影院| 日本成人性视频| 成人午夜av在线| 欧美brazzers| 久久躁狠狠躁夜夜爽| 久久大胆人体视频| 激情视频免费网站| 亚洲一二三四在线观看| 免费福利在线观看| 亚洲自拍欧美色图| 久久福利影视| 精品国产乱码久久久久久鸭王1| 欧美成人精品3d动漫h| 免费观看欧美大片| 青青草原国产免费| 久久影院电视剧免费观看| 在线观看亚洲一区二区| 国内自拍欧美激情| 婷婷成人基地| 精品人妻一区二区三区香蕉| 欧美日韩成人综合在线一区二区| 日韩免费影院| 亚洲图片都市激情| 99热这里都是精品| 91久久精品无码一区二区| 91精品国产91久久久久久最新 | www.日本在线播放| 国产精品久久久久久久浪潮网站| 黄色av网站免费在线观看| 国产精品视频一区二区高潮| 尤物在线精品| 永久久久久久久|