微服務網關方案調研

綜述

經調研,使用Spring Cloud Zuul解決方案的佔多數,已經能知足絕大多數公司需求。但除了一些超級公司外,好比阿里,京東,他們是本身擼的一套網關。此外,點評直接採用的nginx負載均衡前置網關,而沒用第七層網關,緣由聽說是七層網關會影響性能,但因爲對其架構不甚瞭解,因此也不得而知。java

一 各企業網關調研

1 京東: tomcat sevelet ,基於netty自研

京東商API網關實踐nginx

目前大部分服務位於tomcat,但因爲tomcat只能同步,因此正在向netty一步步遷移git

clipboard.png

2 蘇寧: netty

clipboard.png

3 點融:基於zuul定製

基於框架:https://github.com/venus-boot...,saluki is a microservice framework rely on grpc-java,多是結合Spring cloud的東西作了一些定製化開發,加入好比rpc的一些東西。程序員

saluki gateway是以zuul、saluki、oauth2爲基礎構建的網關係統,主要功能以下github

  1. api限流,利用令牌桶機制進行限流操做
  2. 受權,oauth2進行api的受權
  3. 協議轉化,將http的請求轉化爲grpc的服務請求

saluki框架在Spring Cloud基礎上進行了進一步封裝,提供了對rpc的支持、用戶權限等等api

4 美團點評

貌似沒有第七層網關,只有nginx+lua,基於tengine定製緩存

clipboard.png

諮詢過美團的童鞋,他說網關會增長機器負擔,並且有可能成爲系統瓶頸。所以將統一的鑑權、日誌都打成統一的jar包,讓各個微服務本身去作,但具體系統的具體結構不得而知,可能存在必定的合理性,對於日活上億體量的系統,或許網關確實有可能成爲瓶頸,由於加入統一網關意味着機器數量增長一倍,tomcat

5 攜程:zuul

基於zuul的一套API網關
clipboard.png架構

6 megaease

還有megaease這家公司,是IT骨灰級程序員兼網紅陳皓所建立,他認爲一個好的gateway須要具有以下關鍵技術負載均衡

  1. 高性能。必須使用高性能的技術,並且須要高性能的語言(好比他所推崇的go)
  2. 抗流量。集羣技術
  3. 業務邏輯。要可以支持簡單的業務邏輯
  4. 服務化。能夠不停機的修改管理配置

因此,他們本身用go開發了一套easegateway
產品說明:http://megaease.com/docs/gate...

其架構說明圖以下
clipboard.png

二 經常使用網關方案

網關(API Gateway)技術選型

  1. zuul
  2. kong
  3. nginx+lua(nginx+openresty )
  4. 本身擼:難度大

網關(API Gateway)的設計要素

  1. 限流:實現微服務訪問流量計算,基於流量計算分析進行限流,能夠定義多種限流規則。
  2. 緩存:數據緩存。
  3. 日誌:日誌記錄。
  4. 監控:記錄請求響應數據,api耗時分析,性能監控。
  5. 鑑權:權限身份認證。
  6. 灰度:線上灰度部署,能夠減少風險。
  7. 路由:路由是API網關很核心的模塊功能,此模塊實現根據請求,鎖定目標微服務並將請求進行轉發。

三 基於Zuul的網關設計

Spring Cloud生態中,標準配置是基於Zuul的網關,並且,已經有多加大型互聯網公司是基於Zuul來實現,好比攜程、點融,因此,咱們不妨用Zuul網關來首先搭建網關,已經能知足大部分企業的需求了

四 探索,阿里無線: ACCS網關方案

阿里粑粑固然財大氣粗,本身擼一個唄

clipboard.png

clipboard.png

clipboard.png
在線集羣用於實時消息,而離線集羣用於諸如營銷信息推廣等容許很高延時等的的請求

clipboard.png
以及兩個優化點

clipboard.png

  1. 用ECDH機密代替RSA。帶來加密效率的巨大提高,以及SPDY協議
  2. 用相似tcp-fast-open的技術,在握手時直接帶數據包
相關文章
相關標籤/搜索