华为云PaaS
平台以华为FusionStage2.0
项目为基础,基于Docker
、Kubernetes
等主流开源容器项目,提供了开发、测试、部署、运维的全流程自动化流水线能力,提供先进的微服务框架和丰富的服务组件,致力于让开发者专注于代码开发本身,提升开发效率,支持丰富的应用生态,推动企业更好的云化转型。
华为云PaaS
平台不光提供云容器部署、微服务治理的功能,而且提供微服务开发、测试、部署、运维一站式解决方 案,支持Dubbo
、SpringCloud
等技术开发的微服务接入PaaS
平台,也支持老系统的接入,并且对于Apache ServiceComb
开的微服务应用更是零修改代码接入。华为云PaaS
平台提供微服务引擎CSE
框架,此框架在ServiceComb
框架的基础上另外提供更多的商业功能支持。
微服务引擎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
,用户无需关心自己业务之外的微服务基础设施,保证系统整体稳定性。同时微服务部署,管理、 治理全部开箱即用,还可以获得开发时期的指导和帮助,以及后续技术发展的最新信息。
①引入依赖:
<dependency>
<groupId>com.huawei.paas.csegroupId>
<artifactId>cse‐solution‐service‐engineartifactId>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j‐log4j12artifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.apache.servicecombgroupId>
<artifactId>spring‐boot‐starter‐providerartifactId>
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);
}
}
serviceComb
提供Swagger
方式生成接口契约,为防止本项目生成Swagger
契约与ServiceComb
冲突,所以之前项目的Swagger
注解都是注释掉。web.xml
中增加监听,否则无法读取前端界面springcloud
传输数据不一致,建议转成时间戳传输,然后在转回来cse
通过edge-service
网关传输不支持@PathVariable
传接数组,直接访问可以httpservletRequest
获取方式。可用filter
或context
获取方式Date
的部分注解不支持Edge Service
以开发框架的形式提供,开发者可以非常简单的搭建一个Edge Service
服务,通过简单的配置就可以定义路由转发规则。同时Edge Service
支持强大的扩展能力,服务映射、请求解析、加密解密、鉴权等逻辑都可以通过扩展实现。
①引入依赖
<dependency>
<groupId>com.huawei.paas.csegroupId>
<artifactId>cse‐solution‐service‐engineartifactId>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j‐log4j12artifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.apache.servicecombgroupId>
<artifactId>edge‐coreartifactId>
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版本。
现在分布式架构中常常在网关这里通过过滤器可以校验请求的合法性,以下是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
(Cloud Container Engine
)提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes
社区原生应用和工具,简化云上自动化容器运行环境搭建。通过云容器引擎可以快速高效的将微服务部署在云端。
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
)能力CCE
基于业界主流的Docker
和Kubernetes
开源技术,并进行了大量的商用增强,在系统可靠性、高性能、开源社区的兼容性等多个方面具有独特的优势。
HA
和跨AZ
高可用,容器应用优雅伸缩,安全下线,保障业务不掉线Kubernetes
/Docker
社区原生版本,CNCF
首批认证的Kubernetes
服务提供商,社区的主要贡献者