女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是API網(wǎng)關(guān) 如何設(shè)計億萬級統(tǒng)一網(wǎng)關(guān)

fjYQ_ittbank ? 作者:工程師李察 ? 2018-11-02 10:45 ? 次閱讀

1.背景

1.1 什么是API網(wǎng)關(guān)

API網(wǎng)關(guān)可以看做系統(tǒng)與外界聯(lián)通的入口,我們可以在網(wǎng)關(guān)進(jìn)行處理一些非業(yè)務(wù)邏輯的邏輯,比如權(quán)限驗證,監(jiān)控,緩存,請求路由等等。

1.2 為什么需要API網(wǎng)關(guān)

RPC協(xié)議轉(zhuǎn)成HTTP。

由于在內(nèi)部開發(fā)中我們都是以RPC協(xié)議(thrift or dubbo)去做開發(fā),暴露給內(nèi)部服務(wù),當(dāng)外部服務(wù)需要使用這個接口的時候往往需要將RPC協(xié)議轉(zhuǎn)換成HTTP協(xié)議。

請求路由

在我們的系統(tǒng)中由于同一個接口新老兩套系統(tǒng)都在使用,我們需要根據(jù)請求上下文將請求路由到對應(yīng)的接口。

統(tǒng)一鑒權(quán)

對于鑒權(quán)操作不涉及到業(yè)務(wù)邏輯,那么可以在網(wǎng)關(guān)層進(jìn)行處理,不用下層到業(yè)務(wù)邏輯。

統(tǒng)一監(jiān)控

由于網(wǎng)關(guān)是外部服務(wù)的入口,所以我們可以在這里監(jiān)控我們想要的數(shù)據(jù),比如入?yún)⒊鰠ⅲ溌窌r間。

流量控制,熔斷降級

對于流量控制,熔斷降級非業(yè)務(wù)邏輯可以統(tǒng)一放到網(wǎng)關(guān)層。

有很多業(yè)務(wù)都會自己去實現(xiàn)一層網(wǎng)關(guān)層,用來接入自己的服務(wù),但是對于整個公司來說這還不夠。

1.3 統(tǒng)一API網(wǎng)關(guān)

統(tǒng)一的API網(wǎng)關(guān)不僅有API網(wǎng)關(guān)的所有的特點,還有下面幾個好處:

統(tǒng)一技術(shù)組件升級

在公司中如果有某個技術(shù)組件需要升級,那么是需要和每個業(yè)務(wù)線溝通,通常幾個月都搞不定。舉個例子如果對于入口的安全鑒權(quán)有重大安全隱患需要升級,如果速度還是這么慢肯定是不行,那么有了統(tǒng)一的網(wǎng)關(guān)升級是很快的。

統(tǒng)一服務(wù)接入

對于某個服務(wù)的接入也比較困難,比如公司已經(jīng)研發(fā)出了比較穩(wěn)定的服務(wù)組件,正在公司大力推廣,這個周期肯定也特別漫長,由于有了統(tǒng)一網(wǎng)關(guān),那么只需要統(tǒng)一網(wǎng)關(guān)統(tǒng)一接入。

節(jié)約資源

不同業(yè)務(wù)不同部門如果按照我們上面的做法應(yīng)該會都自己搞一個網(wǎng)關(guān)層,用來做這個事,可以想象如果一個公司有100個這種業(yè)務(wù),每個業(yè)務(wù)配備4臺機(jī)器,那么就需要400臺機(jī)器。并且每個業(yè)務(wù)的開發(fā)RD都需要去開發(fā)這個網(wǎng)關(guān)層,去隨時去維護(hù),增加人力。如果有了統(tǒng)一網(wǎng)關(guān)層,那么也許只需要50臺機(jī)器就可以做這100個業(yè)務(wù)的網(wǎng)關(guān)層的事,并且業(yè)務(wù)RD不需要隨時關(guān)注開發(fā),上線的步驟。

2.統(tǒng)一網(wǎng)關(guān)的設(shè)計

2.1 異步化請求

對于我們自己實現(xiàn)的網(wǎng)關(guān)層,由于只有我們自己使用,對于吞吐量的要求并不高所以,我們一般同步請求調(diào)用即可。

對于我們統(tǒng)一的網(wǎng)關(guān)層,如何用少量的機(jī)器接入更多的服務(wù),這就需要我們的異步,用來提高更多的吞吐量。對于異步化一般有下面兩種策略:

Tomcat/Jetty+NIO+servlet3

這種策略使用的比較普遍,京東,有贊,Zuul,都選取的是這個策略,這種策略比較適合HTTP。在Servlet3中可以開啟異步。

Netty+NIO

Netty為高并發(fā)而生,目前唯品會的網(wǎng)關(guān)使用這個策略,在唯品會的技術(shù)文章中在相同的情況下Netty是每秒30w+的吞吐量,Tomcat是13w+,可以看出是有一定的差距的,但是Netty需要自己處理HTTP協(xié)議,這一塊比較麻煩。

對于網(wǎng)關(guān)是HTTP請求場景比較多的情況可以采用Servlet,畢竟有更加成熟的處理HTTP協(xié)議。如果更加重視吞吐量那么可以采用Netty。

2.1.1 全鏈路異步

對于來的請求我們已經(jīng)使用異步了,為了達(dá)到全鏈路異步所以我們需要對去的請求也進(jìn)行異步處理,對于去的請求我們可以利用我們rpc的異步支持進(jìn)行異步請求所以基本可以達(dá)到下圖:

由在web容器中開啟servlet異步,然后進(jìn)入到網(wǎng)關(guān)的業(yè)務(wù)線程池中進(jìn)行業(yè)務(wù)處理,然后進(jìn)行rpc的異步調(diào)用并注冊需要回調(diào)的業(yè)務(wù),最后在回調(diào)線程池中進(jìn)行回調(diào)處理。

2.2 鏈?zhǔn)教幚?/strong>

在設(shè)計模式中有一個模式叫責(zé)任鏈模式,他的作用是避免請求發(fā)送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。通過這種模式將請求的發(fā)送者和請求的處理者解耦了。在我們的各個框架中對此模式都有實現(xiàn),比如servlet里面的filter,springmvc里面的Interceptor。

在Netflix Zuul中也應(yīng)用了這種模式,如下圖所示:

這種模式在網(wǎng)關(guān)的設(shè)計中我們可以借鑒到自己的網(wǎng)關(guān)設(shè)計:

preFilters:前置過濾器,用來處理一些公共的業(yè)務(wù),比如統(tǒng)一鑒權(quán),統(tǒng)一限流,熔斷降級,緩存處理等,并且提供業(yè)務(wù)方擴(kuò)展。

routingFilters: 用來處理一些泛化調(diào)用,主要是做協(xié)議的轉(zhuǎn)換,請求的路由工作。

postFilters: 后置過濾器,主要用來做結(jié)果的處理,日志打點,記錄時間等等。

errorFilters: 錯誤過濾器,用來處理調(diào)用異常的情況。

這種設(shè)計在有贊的網(wǎng)關(guān)也有應(yīng)用。

2.3 業(yè)務(wù)隔離

上面在全鏈路異步的情況下不同業(yè)務(wù)之間的影響很小,但是如果在提供的自定義FiIlter中進(jìn)行了某些同步調(diào)用,一旦超時頻繁那么就會對其他業(yè)務(wù)產(chǎn)生影響。所以我們需要采用隔離之術(shù),降低業(yè)務(wù)之間的互相影響。

2.3.1 信號量隔離

信號量隔離只是限制了總的并發(fā)數(shù),服務(wù)還是主線程進(jìn)行同步調(diào)用。這個隔離如果遠(yuǎn)程調(diào)用超時依然會影響主線程,從而會影響其他業(yè)務(wù)。因此,如果只是想限制某個服務(wù)的總并發(fā)調(diào)用量或者調(diào)用的服務(wù)不涉及遠(yuǎn)程調(diào)用的話,可以使用輕量級的信號量來實現(xiàn)。有贊的網(wǎng)關(guān)由于沒有自定義filter所以選取的是信號量隔離。

2.3.2 線程池隔離

最簡單的就是不同業(yè)務(wù)之間通過不同的線程池進(jìn)行隔離,就算業(yè)務(wù)接口出現(xiàn)了問題由于線程池已經(jīng)進(jìn)行了隔離那么也不會影響其他業(yè)務(wù)。在京東的網(wǎng)關(guān)實現(xiàn)之中就是采用的線程池隔離,比較重要的業(yè)務(wù)比如商品或者訂單 都是單獨的通過線程池去處理。但是由于是統(tǒng)一網(wǎng)關(guān)平臺,如果業(yè)務(wù)線眾多,大家都覺得自己的業(yè)務(wù)比較重要需要單獨的線程池隔離,如果使用的是Java語言開發(fā)的話那么,在Java中線程是比較重的資源比較受限,如果需要隔離的線程池過多不是很適用。如果使用一些其他語言比如Golang進(jìn)行開發(fā)網(wǎng)關(guān)的話,線程是比較輕的資源,所以比較適合使用線程池隔離。

2.3.3 集群隔離

如果有某些業(yè)務(wù)就需要使用隔離但是統(tǒng)一網(wǎng)關(guān)又沒有線程池隔離那么應(yīng)該怎么辦呢?那么可以使用集群隔離,如果你的某些業(yè)務(wù)真的很重要那么可以為這一系列業(yè)務(wù)單獨申請一個集群或者多個集群,通過機(jī)器之間進(jìn)行隔離。

2.4 請求限流

流量控制可以采用很多開源的實現(xiàn),比如阿里最近開源的Sentinel和比較成熟的Hystrix。

一般限流分為集群限流和單機(jī)限流:

利用統(tǒng)一存儲保存當(dāng)前流量的情況,一般可以采用Redis,這個一般會有一些性能損耗。

單機(jī)限流:限流每臺機(jī)器我們可以直接利用Guava的令牌桶去做,由于沒有遠(yuǎn)程調(diào)用性能消耗較小。

2.5 熔斷降級

這一塊也可以參照開源的實現(xiàn)Sentinel和Hystrix,這里不是重點就不多提了。

2.6 泛化調(diào)用

泛化調(diào)用指的是一些通信協(xié)議的轉(zhuǎn)換,比如將HTTP轉(zhuǎn)換成Thrift。在一些開源的網(wǎng)關(guān)中比如Zuul是沒有實現(xiàn)的,因為各個公司的內(nèi)部服務(wù)通信協(xié)議都不同。比如在唯品會中支持HTTP1,HTTP2,以及二進(jìn)制的協(xié)議,然后轉(zhuǎn)化成內(nèi)部的協(xié)議,淘寶的支持HTTPS,HTTP1,HTTP2這些協(xié)議都可以轉(zhuǎn)換成,HTTP,HSF,Dubbo等協(xié)議。

2.6.1泛化調(diào)用

如何去實現(xiàn)泛化調(diào)用呢?由于協(xié)議很難自動轉(zhuǎn)換,那么其實每個協(xié)議對應(yīng)的接口需要提供一種映射。簡單來說就是把兩個協(xié)議都能轉(zhuǎn)換成共同語言,從而互相轉(zhuǎn)換。

一般來說共同語言有三種方式指定:

json:json數(shù)據(jù)格式比較簡單,解析速度快,較輕量級。在Dubbo的生態(tài)中有一個HTTP轉(zhuǎn)Dubbo的項目是用JsonRpc做的,將HTTP轉(zhuǎn)化成JsonRpc再轉(zhuǎn)化成Dubbo。

比如可以將一個 www.baidu.com/id = 1 GET 可以映射為json:

代碼塊



{

“method”:"getBaidu"

"param":{

"id":1

}

}

xml:xml數(shù)據(jù)比較重,解析比較困難,這里不過多討論。

自定義描述語言:一般來說這個成本比較高需要自己定義語言來進(jìn)行描述并進(jìn)行解析,但是其擴(kuò)展性,自定義個性化性都是最高。例:spring自定義了一套自己的SPEL表達(dá)式語言

對于泛化調(diào)用如果要自己設(shè)計的話JSON基本可以滿足,如果對于個性化的需要特別多的話倒是可以自己定義一套語言。

2.7 管理平臺

上面介紹的都是如何實現(xiàn)一個網(wǎng)關(guān)的技術(shù)關(guān)鍵。這里需要介紹網(wǎng)關(guān)的一個業(yè)務(wù)關(guān)鍵。有了網(wǎng)關(guān)之后,需要一個管理平臺如何去對我們上面所描述的技術(shù)關(guān)鍵進(jìn)行配置,包括但不限于下面這些配置:

限流

熔斷

緩存

日志

自定義filter

泛化調(diào)用

3.總結(jié)

最后一個合理的標(biāo)準(zhǔn)網(wǎng)關(guān)應(yīng)該按照如下去實現(xiàn):

什么是API網(wǎng)關(guān) 如何設(shè)計億萬級統(tǒng)一網(wǎng)關(guān)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    5190

    瀏覽量

    52358
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1558

    瀏覽量

    63437

原文標(biāo)題:有史以來最強(qiáng)的5G入門科普!

文章出處:【微信號:ittbank,微信公眾號:ittbank】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    Profinet轉(zhuǎn)RS232網(wǎng)關(guān)與固定式條碼槍的應(yīng)用

    Profinet轉(zhuǎn)RS232網(wǎng)關(guān)可以實現(xiàn)RS232接口的設(shè)備與Profinet網(wǎng)絡(luò)之間的通信。這包括各種儀表、變頻器、綜保、軟啟動器等設(shè)備,使其可以接入到S71500、S71200
    發(fā)表于 01-11 17:08

    API信息全掌控,方便你的日志管理——阿里云推出API網(wǎng)關(guān)打通日志服務(wù)

    支持用戶實時在線的SQL查詢。 多維度自定義統(tǒng)計:日志服務(wù)還支持基于日志和用戶的SQL自定義創(chuàng)建報表,自動生成,API網(wǎng)關(guān)還為用戶預(yù)設(shè)些很重要的數(shù)據(jù)報表。在服務(wù)國內(nèi)的用戶的功能和開發(fā)方面,阿里云顯然
    發(fā)表于 02-06 15:24

    請問為什么以太網(wǎng)網(wǎng)關(guān)和DNS的地址樣?

    臺以太網(wǎng)設(shè)備有如下信息:IP地址:172.24.1.1DNS:172.24.1.100網(wǎng)關(guān):172.24.1.100這里面的 網(wǎng)關(guān) 為什么和DNS的地址
    發(fā)表于 04-16 07:56

    linux雙網(wǎng)卡雙網(wǎng)關(guān)實現(xiàn)

    192.168.1.1 eth0 #1.0網(wǎng)段走192.168.1.1網(wǎng)關(guān)走 eth0為要走的網(wǎng)卡。 route add -net 192.168.2.0/24 gw 192.168.2.254 eth1 #2.0網(wǎng)
    發(fā)表于 07-05 08:39

    Modbus Tcp轉(zhuǎn)Profinet網(wǎng)關(guān)連接施耐德PLC配置案例

    Modbus]本案例是開疆智能Modbus TCP轉(zhuǎn)Profinet網(wǎng)關(guān)連接施耐德PLC的配置案例用到的設(shè)備為西門子1200PLC臺,KJ-PNG-106網(wǎng)關(guān)個,施耐德PLC
    發(fā)表于 11-22 18:18

    種低成本高速以太網(wǎng)_RS485網(wǎng)關(guān)設(shè)計_賀春艷

    種低成本高速以太網(wǎng)_RS485網(wǎng)關(guān)設(shè)計_賀春艷
    發(fā)表于 01-18 20:21 ?4次下載

    什么是API網(wǎng)關(guān)為什么需要API網(wǎng)關(guān)

    API網(wǎng)關(guān)可以看做系統(tǒng)與外界聯(lián)通的入口,我們可以在網(wǎng)關(guān)進(jìn)行處理些非業(yè)務(wù)邏輯的邏輯,比如權(quán)限驗證,監(jiān)控,緩存,請求路由等等。
    發(fā)表于 12-23 09:57 ?1.3w次閱讀
    什么是<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>為什么需要<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>

    基于ESP32的工業(yè)RS485網(wǎng)關(guān)項目

    電子發(fā)燒友網(wǎng)站提供《基于ESP32的工業(yè)RS485網(wǎng)關(guān)項目.zip》資料免費下載
    發(fā)表于 08-05 09:40 ?44次下載
    基于ESP32的工業(yè)RS485<b class='flag-5'>網(wǎng)關(guān)</b>項目

    關(guān)于API網(wǎng)關(guān)策略的知識分享

    近些年隨著云原生和微服務(wù)架構(gòu)的日趨發(fā)展,API 網(wǎng)關(guān)以流量入口的角色在技術(shù)架構(gòu)中扮演著越來越重要的作用。API 網(wǎng)關(guān)主要負(fù)責(zé)接收所有請求的流量并進(jìn)行處理轉(zhuǎn)發(fā)至上游服務(wù),
    的頭像 發(fā)表于 02-11 10:45 ?1409次閱讀

    API 網(wǎng)關(guān)詳細(xì)介紹(上)

    業(yè)界有很多流行的 API 網(wǎng)關(guān),開源的有 Nginx、Netflix Zuul、Kong 等。當(dāng)然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關(guān)還有 GoKu API Gateway 和 T
    的頭像 發(fā)表于 05-04 17:28 ?1756次閱讀
    <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>詳細(xì)介紹(上)

    API 網(wǎng)關(guān)詳細(xì)介紹(下)

    業(yè)界有很多流行的 API 網(wǎng)關(guān),開源的有 Nginx、Netflix Zuul、Kong 等。當(dāng)然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關(guān)還有 GoKu API Gateway 和 T
    的頭像 發(fā)表于 05-04 17:28 ?1083次閱讀
    <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>詳細(xì)介紹(下)

    為什么需要 API 網(wǎng)關(guān)

    API 網(wǎng)關(guān)API 全生命周期管理的關(guān)鍵基礎(chǔ)組件,負(fù)責(zé)生產(chǎn)環(huán)境中 API 的配置、發(fā)布、版本回滾、安全、負(fù)載均衡等。API
    的頭像 發(fā)表于 05-04 17:47 ?979次閱讀
    為什么需要 <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>?

    企業(yè)怎么選擇API網(wǎng)關(guān)

    、騰訊公司的QQ開發(fā)平臺、微信開放平臺。 Open API開放平臺必然涉及到客戶應(yīng)用的接入、API權(quán)限的管理、調(diào)用次數(shù)管理等,必然會有統(tǒng)一的入口進(jìn)行管理,這正是
    的頭像 發(fā)表于 05-23 11:05 ?824次閱讀
    企業(yè)怎么選擇<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>

    api網(wǎng)關(guān) kong 教程入門

    統(tǒng)一權(quán)限控制、接口請求訪問日志統(tǒng)計 安全,是保護(hù)內(nèi)部服務(wù)而設(shè)計的道屏障 開源-最大好處 當(dāng)然也有個很大的缺點,api-gw很可能成為性能瓶頸,因為所有的請求都經(jīng)過這里,可以通過橫
    的頭像 發(fā)表于 11-10 11:39 ?1062次閱讀
    <b class='flag-5'>api</b><b class='flag-5'>網(wǎng)關(guān)</b> kong 教程入門

    RS485網(wǎng)關(guān)功能特點有哪些?

    在工業(yè)自動化和智能物聯(lián)網(wǎng)(IoT)快速發(fā)展的今天,各種設(shè)備和系統(tǒng)之間的數(shù)據(jù)交換和通信變得至關(guān)重要。RS485網(wǎng)關(guān)作為種關(guān)鍵的數(shù)據(jù)通信設(shè)備,在工業(yè)自動化、樓宇自動化等領(lǐng)域發(fā)揮著不可替代的作用。本文將
    的頭像 發(fā)表于 06-13 14:56 ?1165次閱讀
    RS485<b class='flag-5'>網(wǎng)關(guān)</b>功能特點有哪些?