华为云微服务治理方案

一、华为云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服务提供商,社区的主要贡献者

猜你喜欢

转载自blog.csdn.net/qq_38697437/article/details/106222729