成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微服務網關Gateway實踐總結

網絡 通信技術
Gateway網關作為微服務架構系統中最先接收請求的一層,可以定義許多策略來保護系統的安全,比如高并發接口的限流,第三方授權驗證,遭到惡意攻擊時的IP攔截等等,盡量將非法請求在網關中攔截掉,從而保證系統的安全與穩定。

一、Gateway簡介

微服務架構中,網關服務通常提供動態路由,以及流量控制與請求識別等核心能力,在之前的篇幅中有說過Zuul組件的使用流程,但是當下Gateway組件是更常規的選擇,下面就圍繞Gateway的實踐做詳細分析;

圖片

從架構模式上看,網關不管采用什么技術組件,都是在客戶端與業務服務中間提供一層攔截與校驗的能力,但是相比較Zuul來說,Gateway提供了更強大的功能和卓越的性能;

基于實踐的場景來看,在功能上網關更側重請求方的合法校驗,流量管控,以及IP級別的攔截,從架構層面看,通常需要提供靈活的路由機制,比如灰度,負載均衡的策略等,并基于消息機制,進行系統級的安全通知等;

圖片

下面圍繞客戶端、網關層、門面服務的三個節點,分析Gateway的使用細節,即客戶端向網關發出請求,經過網關路由到門面服務處理;

二、動態路由

1.基礎概念

路由:作為網關中最核心的能力,從源碼結構上看,包括ID、請求URI、斷言集合、過濾集合等組成;

public class RouteDefinition {
private String id;
private URI uri;
private List<PredicateDefinition> predicates = new ArrayList<>();
private List<FilterDefinition> filters = new ArrayList<>();
}

斷言+過濾:通常在斷言中定義請求的匹配規則,在過濾中定義請求的處理動作,結構上看都是名稱加參數集合,并且支持快捷的方式配置;

public class PredicateDefinition {
private String name;
private Map<String, String> args = new LinkedHashMap<>();
}

public class FilterDefinition {
private String name;
private Map<String, String> args = new LinkedHashMap<>();
}

2.配置路由

以配置的方式,添加facade?服務路由,以路徑匹配的方式,如果請求路徑錯誤則斷言失敗,StripPrefix設置為1,即在過濾中去掉第一個/facade參數;

spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: facade
uri: http://127.0.0.1:8082
predicates:
- Path=/facade/**
filters:
- StripPrefix=1

執行原理如下:

圖片

這里是以配置文件的方式,設置facade服務的路由策略,其中指定了路徑方式,在Gateway文檔中提供了多種路由樣例,比如:Header、Cookie、Method、Query、Host等斷言方式;

3.編碼方式

基于編碼的方式管理路由策略,在Gateway文檔同樣提供了多種參考樣例,如果路由服務少并且固定,配置的方式可以解決,如果路由服務很多,并且需要動態添加,那基于庫表方式更適合;

@Configuration
public class GateConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("facade",r -> r.path("/facade/**").filters(f -> f.stripPrefix(1))
.uri("http://127.0.0.1:8082")).build();
}
}

4.庫表加載

在常規的應用中,從庫表中讀取路由策略是比較常見的方式,定義路由工廠類并實現RouteDefinitionRepository?接口,涉及加載、添加、刪除三個核心方法,然后基于服務類從庫中讀取數據轉換為RouteDefinition對象即可;

圖片

@Component
public class DefRouteFactory implements RouteDefinitionRepository {
@Resource
private ConfigRouteService routeService ;
// 加載
@Override
public Flux<RouteDefinition> getRouteDefinitions() {
return Flux.fromIterable(routeService.getRouteDefinitions());
}
// 添加
@Override
public Mono<Void> save(Mono<RouteDefinition> route) {
return route.flatMap(routeDefinition -> { routeService.saveRouter(routeDefinition);
return Mono.empty();
});
}
// 刪除
@Override
public Mono<Void> delete(Mono<String> idMono) {
return idMono.flatMap(routeId -> { routeService.removeRouter(routeId);
return Mono.empty();
});
}
}

在源碼倉庫中采用的就是庫表管理的方式,代碼邏輯的更多細節可以移步Git參考,此處不再過多粘貼;

三、自定義路由策略

自定義斷言,繼承AbstractRoutePredicateFactory?類,注意命名以RoutePredicateFactory?結尾,重寫apply方法,即可執行特定的匹配規則;

@Component
public class DefCheckRoutePredicateFactory extends AbstractRoutePredicateFactory<DefCheckRoutePredicateFactory.Config> {
public DefCheckRoutePredicateFactory() {
super(Config.class);
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return new GatewayPredicate() {
@Override
public boolean test(ServerWebExchange serverWebExchange) {
log.info("DefCheckRoutePredicateFactory:" + config.getName());
return StrUtil.equals("butte",config.getName());
}
};
}
@Data
public static class Config { private String name; }
@Override
public List<String> shortcutFieldOrder() { return Collections.singletonList("name"); }
}

自定義過濾,繼承AbstractNameValueGatewayFilterFactory?類,注意命名以GatewayFilterFactory?結尾,重寫apply方法,即可執行特定的過濾規則;

@Component
public class DefHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
@Override
public GatewayFilter apply(AbstractNameValueGatewayFilterFactory.NameValueConfig config) {
return (exchange, chain) -> {
log.info("DefHeaderGatewayFilterFactory:"+ config.getName() + "-" + config.getValue());
return chain.filter(exchange);
};
}
}

配置加載方式,此處斷言與過濾即快捷的配置方式,所以在命名上要遵守Gateway的約定;

spring:
cloud:
gateway:
routes:
- id: facade
uri: http://127.0.0.1:8082
predicates:
- Path=/facade/**
- DefCheck=butte
filters:
- StripPrefix=1
- DefHeader=cicada,smile

通常來說,在應用級的系統中都需要進行斷言和過濾的策略自定義,以提供業務或者架構層面的支撐,完成更加細致的規則校驗,尤其在相同服務多版本并行時,可以更好的管理路由策略,從而避免分支之間的影響;

四、全局過濾器

在路由中采用的過濾是GatewayFilter?,實際Gateway中還提供了GlobalFilter全局過濾器,雖然從結構上看十分相似,但是其職責是有本質區別的;

全局過濾器1:打印請求ID

@Component
@Order(1)
public class DefOneGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("request-id:{}",exchange.getRequest().getId()) ;
return chain.filter(exchange);
}
}

全局過濾器2:打印請求URI

@Component
@Order(2)
public class DefTwoGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("request-uri:{}",exchange.getRequest().getURI()) ;
return chain.filter(exchange);
}
}

Gateway網關作為微服務架構系統中最先接收請求的一層,可以定義許多策略來保護系統的安全,比如高并發接口的限流,第三方授權驗證,遭到惡意攻擊時的IP攔截等等,盡量將非法請求在網關中攔截掉,從而保證系統的安全與穩定。

五、參考源碼

應用倉庫:https://gitee.com/cicadasmile/butte-flyer-parent

組件封裝:https://gitee.com/cicadasmile/butte-frame-parent

責任編輯:武曉燕 來源: 知了一笑
相關推薦

2022-05-12 08:21:13

項目網關模塊

2023-11-09 08:31:56

Spring微服務網關

2022-05-16 08:22:11

網關過濾器路由

2020-03-27 08:46:51

微服務服務網關

2024-08-05 10:03:53

2024-10-29 08:44:18

2020-04-29 14:33:49

微服務網關Kong

2023-09-12 07:19:06

微服務網關架構

2017-09-04 16:15:44

服務網關架構

2023-04-03 08:51:06

2025-05-27 02:55:00

Spring微服務

2025-01-13 16:00:00

服務網關分布式系統架構

2022-05-11 08:22:21

服務網關架構

2020-10-10 10:37:54

微服務架構技術API

2017-09-09 23:15:20

Spring Clou微服務架構路由

2020-11-15 23:48:57

服務網格微服務網絡網絡技術

2018-12-19 15:05:55

Spring Clou網關 Gateway

2019-08-13 15:27:11

開源技術 趨勢

2017-09-15 23:29:53

Spring Clou微服務架構過濾器

2019-08-29 08:00:00

微服務架構服務網格
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av在线免费观看网站 | 亚洲激情在线观看 | 亚洲国产成人精 | 超碰av在线 | 亚洲一区二区三区在线观看免费 | 农村真人裸体丰满少妇毛片 | 日韩精品一区二区三区在线观看 | 又爽又黄axxx片免费观看 | 91免费在线看 | 久久亚洲二区 | 国产一级电影在线观看 | 一区在线播放 | 99久久精品国产毛片 | 国产欧美日韩精品一区 | 黄色片免费看视频 | 午夜视频一区 | 国产精品www | 日韩爱爱网 | 久久99这里只有精品 | 久久久成人精品 | 日韩欧美国产精品一区二区三区 | 成人精品一区二区三区中文字幕 | 伊人亚洲| 久久99精品久久久久久 | av国产精品 | 国产一区h | 国产精产国品一二三产区视频 | 成人国产一区二区三区精品麻豆 | 毛片在线看看 | 色999视频 | 中文字幕 在线观看 | 国产一区 在线视频 | 欧日韩在线观看 | 日韩免费视频一区二区 | 午夜视频一区二区 | 综合精品在线 | 久久爆操 | 亚洲 成人 av| 亚洲精品乱码久久久久久蜜桃 | 久久久久一区二区三区 | 在线婷婷 |