概述
Spring Cloud应用可以方便的接入CSE提供的基础服务。接入CSE服务有如下好处:
-
开发者可以专注于业务系统的开发,把精力从中间件的可靠性评估、集群部署、运维监控等复杂的事情中解放出来。
-
实现业务快速交付和敏捷开发。利用PaaS平台,根据业务规模,动态的调整资源使用,降低业务风险。
下图展现了CSE基础服务、PaaS平台服务和第三方服务的关系:
CSE官方支持ServiceComb微服务框架接入和Spring Cloud微服务框架接入。两个框架接入的步骤基本类似。在本文中,主要介绍Spring Cloud应用接入CSE的原理,然后通过一个Spring Cloud应用改造的案例,说明改造步骤。
为了使用CSE基础服务,还需要开发者拥有华为云账号,可以登路华为云免费注册。建议开发者先通过CSE提供的“快速体验微服务能力”了解CSE,在下面的章节中,会省略体验过程中涉及到的一些公共操作,比如如何获取AK/SK认证信息等。
演进路线图
CSE提供了非常丰富的开箱即用的微服务管控能力,这些能力通过CSE的RPC框架集成。如果使用Spring Cloud,开发者需要组合非常多的三方组件来完成这些功能,下面列举了部分功能:
CSE功能 | Spring Cloud实现方式 |
---|---|
负载均衡策略 | 使用ribbon组件 |
实例故障隔离和失败重试 | 使用ribbon/hystrix组件 |
微服务隔离、熔断、容错 | 使用hystrix组件 |
微服务方法级别隔离、熔断、容错 | 使用hystrix组件,定义复杂的配置规则 |
流量控制 | 实现流量控制算法,定义复杂的配置规则 |
故障注入 | 实现动态配置,定义故障规则 |
灰度发布 | 实现灰度发布算法,定义灰度发布规则 |
微服务监控,包括调用链等 | 使用zipkin组件 |
metrics | Spring Cloud 自带,没有集中监控能力,或者集成prometheus |
CSE还提供了非常友好的管理界面,帮助开发者在运行时管理和监控微服务。Spring Cloud开发者在使用CSE的过程中有非常多灵活的选择,下面是一个可选的技术路线:
- 第一步:遗留系统快速接入,完成Spring Cloud应用的云上部署
Spring Cloud开发者通过修改pom文件,就可以接入CSE提供的公共服务中心和配置中心服务,使用公共服务作为注册发现、动态配置功能,节省了开发、部署eureka、git等Spring Cloud提供的服务的时间和购买部署公共服务的机器成本。
这个步骤一般在1小时内就可以完成开发和部署测试,提供了快速上云的通道。
这个步骤完成后,业务原有的功能基本不受任何影响(一些严重依赖于服务发现中间件的功能除外)。接入也给用户提供了一个可以直观感受CSE提供的功能的机会,用户可以根据实际的运维感受,作出更加理性的选择是否使用CSE进行下一步的演进。
- 第二步:将Spring MVC REST Framework改造为CSE
这个步骤会在Spring Boot框架中集成CSE的REST框架。通过这个步骤,CSE提供的所有微服务管理功能都可以开箱即用,业务可以专注于逻辑的开发。完成这个步骤,用户需要对CSE的设计原理,与Spring Boot集成原理和关系有一定初步了解,这样才能够快速解决文档中未提到的一些技术问题。开始之前,建议开发者先进行如下准备工作,以更好的解决开发过程中可能遇到的问题。
- 完成第一步,并体验CSE
- 阅读CSE的设计原理,了解CSE框架的设计思路和组件组成
- 体验在Spring Boot中使用CSE,理解在Spring Boot框架下使用CSE的基本原理。
- 第三步:使用轻量级容器和Edge Service
对于多数后台服务,对外只提供REST接口,不提供WEB页面。这些服务运行于J2EE容器(比如tomcat)会额外多出很多性能损耗。CSE提供了轻量级的HTTP服务器来提供REST服务,可以极大的提高性能和减少资源占用。Edge Service是CSE提供的和CSE微服务完美配合的网关服务,除了高性能,还支持强大的灰度版本管理能力、异步编程扩展能力和治理能力。
遗留系统快速接入
本章节通过一个实际的案例,说明Spring Cloud应用如何经过少量的配置修改,快速接入CSE。Demo下载地址:GitHub 码云Gitee
- 原始Spring Cloud应用位于SpringCloudIntegration的子项目:springcloud-sample
- 修改后的Spring Cloud应用位于SpringCloudIntegration的子项目:springcloud-sample-2-cse,该项目已提供Dockerfile和start.sh,可以直接拷贝以便在微服务云应用平台快速构建镜像。
springcloud-sample提供了3个项目:
- eureka-server 提供注册发现能力。
- springcloud-provider 服务提供者,该服务提供了名称为HelloService的REST接口。
- springcloud-consumer 服务消费者,该服务也提供了名称为HelloService的REST接口,其实现通过Feign调用springcloud-provider的REST接口。
修改后的springcloud-sample-2-cse具备如下能力和变化:
- 使用CSE提供的服务中心作为注册发现服务;
- 使用CSE提供的配置中心作为动态配置服务,可以通过配置中心管理公共配置;
- 业务的其他逻辑不发生任何变化,写代码的方式也不发生变化。开发者仍然可以按照原来的开发习惯书写业务代码。
接入步骤说明
CSE为Spring Cloud应用提供了非常简单的接入方式,开发者只需要修改依赖关系和少量的配置,就可以启用服务中心和配置中心客户端连接功能,将Spring Cloud应用作为一个CSE的微服务注册到服务中心和使用动态配置能力。
- 参考环境准备配置maven setting文件,并将Spring Cloud中对于eureka的依赖换成CSE的依赖。 Eureka的依赖:开发者一般会使用spring-cloud-starter-eureka。spring-cloud-starter-eureka-server是作为注册服务使用的,替换服务中心后不需要继续使用。
删除如下依赖,以springcloud-sample为例,修改springcloud-provider/pom.xml,springcloud-consumer/pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>