華爲雲微服務治理方案

一、華爲雲PaaS平臺介紹

華爲雲PaaS平臺以華爲FusionStage2.0項目爲基礎,基於DockerKubernetes等主流開源容器項目,提供了開發、測試、部署、運維的全流程自動化流水線能力,提供先進的微服務框架和豐富的服務組件,致力於讓開發者專注於代碼開發本身,提升開發效率,支持豐富的應用生態,推動企業更好的雲化轉型。

華爲雲PaaS平臺不光提供雲容器部署、微服務治理的功能,而且提供微服務開發、測試、部署、運維一站式解決方 案,支持DubboSpringCloud等技術開發的微服務接入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有什麼不同?

  1. CSEServiceComb的商業版本,CSE的大部分組件來自於開源的ServiceCombServiceComb是開源的,CSE沒有開源但可以免費使用。
  2. 使用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開發中需要注意的點

  1. serviceComb提供Swagger方式生成接口契約,爲防止本項目生成Swagger契約與ServiceComb衝突,所以之前項目的Swagger註解都是註釋掉。
  2. 後臺必須以server結尾,前端必須以web結尾,以滿足網關正則表達式驗證,保證路由分配正確
  3. 在進行開發和頻繁調試和修改的情況下,儘量將微服務配置成開發者模式。如果不是開發者模式。當微服務接口變動時,啓動會報錯。
    在這裏插入圖片描述
  4. 前端微服務需要在web.xml中增加監聽,否則無法讀取前端界面
    在這裏插入圖片描述
  5. 日期格式接收與springcloud傳輸數據不一致,建議轉成時間戳傳輸,然後在轉回來
  6. 華爲cse通過edge-service網關傳輸不支持@PathVariable傳接數組,直接訪問可以
  7. 華爲雲不支持原先httpservletRequest獲取方式。可用filtercontext獲取方式
  8. 方法形參中不能有HttpServletReponse,不支持
  9. 日期格式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

雲容器引擎CCECloud Container Engine)提供高可靠高性能的企業級容器應用管理服務,支持Kubernetes社區原生應用和工具,簡化雲上自動化容器運行環境搭建。通過雲容器引擎可以快速高效的將微服務部署在雲端。

4.1 功能列表

CCE涵蓋了應用全生命週期管理、DevOps持續交付、應用調度、彈性伸縮等衆多功能,詳細如下:

  1. 一站式部署和運維一鍵創建Kubernetes集羣,自動化部署、運維容器應用,整個生命週期都在容器服務內一站式完成
  2. 高可用業務不中斷集羣控制面HA和跨AZ高可用,容器應用優雅伸縮,安全下線,保障業務不掉線
  3. 豐富的應用調度策略支持多種親和反親和調度策略,用戶可方便地根據應用特點在高性能和高可靠中找到平衡點。
  4. 靈活的彈性伸縮策略 支持按性能、按時間、按週期的彈性伸縮策略,用戶可自由組合策略以應對多變的突發浪涌
  5. 兼容原生KubernetesDocker緊跟社區,3個月同步最新版本,兼容原生API和命令行
  6. 可定製化的DevOps能力 支持Java/Python/Go/Node.JS/Vert.x等語言代碼開發一鍵式生成鏡像能力
  7. IaaS資源深度整合 直接使用華爲雲ECS/BMS、網絡(VPC/EIP)、存儲(EVS/OBS/SFS)能力

4.2 產品優勢

CCE基於業界主流的DockerKubernetes開源技術,並進行了大量的商用增強,在系統可靠性、高性能、開源社區的兼容性等多個方面具有獨特的優勢。

  • 簡單易用:自動化創建容器集羣,一站式部署/運維容器應用,一鍵式滾動升級
  • 高性能:自研高性能容器網絡,秒級自動彈性伸縮,支持高性能裸金屬容器私有集羣
  • 企業級:集羣控制面HA和跨AZ高可用,容器應用優雅伸縮,安全下線,保障業務不掉線
  • 開放性:全兼容Kubernetes/Docker社區原生版本,CNCF首批認證的Kubernetes服務提供商,社區的主要貢獻者
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章