文章目錄
一、華爲雲PaaS平臺介紹
華爲雲PaaS
平臺以華爲FusionStage2.0
項目爲基礎,基於Docker
、Kubernetes
等主流開源容器項目,提供了開發、測試、部署、運維的全流程自動化流水線能力,提供先進的微服務框架和豐富的服務組件,致力於讓開發者專注於代碼開發本身,提升開發效率,支持豐富的應用生態,推動企業更好的雲化轉型。
華爲雲PaaS
平臺不光提供雲容器部署、微服務治理的功能,而且提供微服務開發、測試、部署、運維一站式解決方 案,支持Dubbo
、SpringCloud
等技術開發的微服務接入PaaS
平臺,也支持老系統的接入,並且對於Apache ServiceComb
開的微服務應用更是零修改代碼接入。華爲雲PaaS
平臺提供微服務引擎CSE
框架,此框架在ServiceComb
框架的基礎上另外提供更多的商業功能支持。
二 、微服務引擎CSE
2.1 CSE簡介
微服務引擎CSE
(Cloud Service Engine
) 是華爲雲PaaS
家族提供的企業級微服務應用管理平臺,包含微服務SDK
(用於開發)、服務註冊、配置和治理中心,幫助用戶實現微服務應用的快速構建、實時監控和高可用保障。 兼容主流開源生態,不綁定特定開發框架和平臺。
CSE
具備開發模式門檻低、通用性強的改造優勢,並支持契約優先,服務接口統一規範管理,微服務之間的調用非常方便,根據業務的現實痛點將其後端拆分爲多個微服務,並實施集羣部署,這一切全部基於CSE
微服務框架開發並統一管理。
ServiceComb的學習: https://hucheng.blog.csdn.net/article/details/105991705
ServiceComb與CSE有什麼不同?
CSE
是ServiceComb
的商業版本,CSE
的大部分組件來自於開源的ServiceComb
,ServiceComb
是開源的,CSE
沒有開源但可以免費使用。- 使用
ServiceComb
開發的微服務不依賴華爲雲,使用CSE
開發的微服務則依賴華爲雲
爲什麼要用微服務引擎CSE?
在雲上使用CSE
,用戶無需關心自己業務之外的微服務基礎設施,保證系統整體穩定性。同時微服務部署,管理、 治理全部開箱即用,還可以獲得開發時期的指導和幫助,以及後續技術發展的最新信息。
2.2 搭建CSE項目
①引入依賴:
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse‐solution‐service‐engine</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j‐log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>spring‐boot‐starter‐provider</artifactId>
</dependency>
②配置文件:
APPLICATION_ID: mysoft
service_description:
name: my-service
version: 1.0.0
properties:
allowCrossApp: false
cse:
service:
registry:
address: https://cse.cn-north-1.myhuaweicloud.com
instance:
watch: false
credentials:
accessKey:
secretKey:
akskCustomCipher: default
rest:
address: 0.0.0.0:40200
③cse遠程調用
@Service
public class NumCse {
protected RestTemplate restTemplate = RestTemplateBuilder.create();
public ReturnData num(int num) {
String url = "cse://my-service/num";
return restTemplate.postForObject(url, num, ReturnData.class);
}
}
2.3 CSE開發中需要注意的點
serviceComb
提供Swagger
方式生成接口契約,爲防止本項目生成Swagger
契約與ServiceComb
衝突,所以之前項目的Swagger
註解都是註釋掉。- 後臺必須以server結尾,前端必須以web結尾,以滿足網關正則表達式驗證,保證路由分配正確
- 在進行開發和頻繁調試和修改的情況下,儘量將微服務配置成開發者模式。如果不是開發者模式。當微服務接口變動時,啓動會報錯。
- 前端微服務需要在
web.xml
中增加監聽,否則無法讀取前端界面
- 日期格式接收與
springcloud
傳輸數據不一致,建議轉成時間戳傳輸,然後在轉回來 - 華爲
cse
通過edge-service
網關傳輸不支持@PathVariable
傳接數組,直接訪問可以 - 華爲雲不支持原先
httpservletRequest
獲取方式。可用filter
或context
獲取方式 - 方法形參中不能有HttpServletReponse,不支持
- 日期格式
Date
的部分註解不支持
三、Edge Service
Edge Service
以開發框架的形式提供,開發者可以非常簡單的搭建一個Edge Service
服務,通過簡單的配置就可以定義路由轉發規則。同時Edge Service
支持強大的擴展能力,服務映射、請求解析、加密解密、鑑權等邏輯都可以通過擴展實現。
3.1 搭建Edge Service
①引入依賴
<!--cse-->
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse‐solution‐service‐engine</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j‐log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--edge-->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>edge‐core</artifactId>
</dependency>
②配置文件:
spring:
application:
name: my-edge
server:
port: 50201
# 應用名稱
APPLICATION_ID: mysoft
# 微服務名稱和版本號
service_description:
name: ${spring.application.name}
version: 1.0.0
# 服務中心和配置中心的地址
cse:
service:
registry:
address: https://cse.cn-north-1.myhuaweicloud.com
instance:
watch: false
config:
client:
serverUri: https://cse.cn-north-1.myhuaweicloud.com
refreshMode: 1
refresh_interval: 15000
# 對外發布的地址,端口號使用server.port
rest:
address: 0.0.0.0:${server.port}
# AK/SK認證信息,需要修改爲自己的AK/SK
credentials:
accessKey:
secretKey:
akskCustomCipher: default
③主啓動類
@SpringBootApplication
@EnableServiceComb
public class EdgeApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(EdgeApplication.class, args);
}
}
④路由配置
cse:
http:
dispatcher:
edge:
default:
enabled: true
prefix: api #請求url的前綴
withVersion: false
prefixSegmentCount: 2
url:
enabled: true
mappings:
my-service:
prefixSegmentCount: 2
path: "/api/service/.*"
withVersion: false
microserviceName: my-service
# versionRule: 1.0.0-2.0.0
上邊的路由配置包括兩部分,一部分爲默認路由,一部分是根據具體url
配置的路由。
默認路由:
默認路由是根據 /prefix/微服務名稱/*
來匹配請求url
,如果withVersion
設置爲true
則根據 /prefix/微服務名稱/版本號/*
來匹配請求。
prefixSegmentCount
表示前綴段的個數,由於使用/prefix/微服務名稱
來匹配請求url
所以設置爲2
自定義路由:
請求 /api/service/
將轉發到微服務my-service
。
microserviceName
:微服務名稱
versionRule
:版本匹配規則,常用於灰度發佈,上邊versionRule: 1.0.0-2.0.0
表示該mapping
只用於1.0.0到2.0.0版本。
3.2 過濾器
現在分佈式架構中常常在網關這裏通過過濾器可以校驗請求的合法性,以下是Edge Service
提供過濾器定義方式:
public class AuthenticationFilter implements HttpServerFilter {
private final RestTemplate template = RestTemplateBuilder.create();
private static final Set<String> NOT_REQUIRED_VERIFICATION_SERVICE_NAMES = new HashSet<>( Arrays.asList("my-service"));
@Override public int getOrder() {
return 0;
}
@Override
public Response afterReceiveRequest(Invocation invocation, HttpServletRequestEx httpServletRequestEx) {
if (isInvocationNeedValidate(invocation.getMicroserviceName())) {
String token = httpServletRequestEx.getHeader(AUTHORIZATION);
if (StringUtils.isNotEmpty(token)) {
//校驗token...
} else {
return Response.failResp( new InvocationException(Status.UNAUTHORIZED, "authentication failed, missing AUTHORIZATION header"));
}
}
return null;
}
private boolean isInvocationNeedValidate(String serviceName) {
for (String service_name : NOT_REQUIRED_VERIFICATION_SERVICE_NAMES) {
if (serviceName.startsWith(service_name)) {
return false;
}
}
return true;
}
}
配置過濾器:
過慮器配置採用Java SPI(Service Provider Interfaces)
的方式來配置,Java SPI
是通過java.util.ServiceLoader
實例化META-INF/services
下定義的接口類配置如下:
在src/main/resource
下定義META-INF/services
目錄,在該目錄下定義文件,文件名稱爲HttpServerFilter
的全限定名,如下:
文件內容是上邊定義的過慮器的全限定名,如下:
com.hucheng.gateway.filter.AuthenticationFilter
四、雲容器CCE
雲容器引擎CCE
(Cloud Container Engine
)提供高可靠高性能的企業級容器應用管理服務,支持Kubernetes
社區原生應用和工具,簡化雲上自動化容器運行環境搭建。通過雲容器引擎可以快速高效的將微服務部署在雲端。
4.1 功能列表
CCE
涵蓋了應用全生命週期管理、DevOps
持續交付、應用調度、彈性伸縮等衆多功能,詳細如下:
- 一站式部署和運維一鍵創建
Kubernetes
集羣,自動化部署、運維容器應用,整個生命週期都在容器服務內一站式完成 - 高可用業務不中斷集羣控制面
HA
和跨AZ
高可用,容器應用優雅伸縮,安全下線,保障業務不掉線 - 豐富的應用調度策略支持多種親和反親和調度策略,用戶可方便地根據應用特點在高性能和高可靠中找到平衡點。
- 靈活的彈性伸縮策略 支持按性能、按時間、按週期的彈性伸縮策略,用戶可自由組合策略以應對多變的突發浪涌
- 兼容原生
Kubernetes
和Docker
緊跟社區,3個月同步最新版本,兼容原生API
和命令行 - 可定製化的
DevOps
能力 支持Java
/Python
/Go
/Node.JS
/Vert.x
等語言代碼開發一鍵式生成鏡像能力 IaaS
資源深度整合 直接使用華爲雲ECS
/BMS
、網絡(VPC
/EIP
)、存儲(EVS
/OBS
/SFS
)能力
4.2 產品優勢
CCE
基於業界主流的Docker
和Kubernetes
開源技術,並進行了大量的商用增強,在系統可靠性、高性能、開源社區的兼容性等多個方面具有獨特的優勢。
- 簡單易用:自動化創建容器集羣,一站式部署/運維容器應用,一鍵式滾動升級
- 高性能:自研高性能容器網絡,秒級自動彈性伸縮,支持高性能裸金屬容器私有集羣
- 企業級:集羣控制面
HA
和跨AZ
高可用,容器應用優雅伸縮,安全下線,保障業務不掉線 - 開放性:全兼容
Kubernetes
/Docker
社區原生版本,CNCF
首批認證的Kubernetes
服務提供商,社區的主要貢獻者