-
Notifications
You must be signed in to change notification settings - Fork 8.3k
ANS
ANS(Application Naming Service) 是隶属于阿里云 EDAS 产品的组件, Spring Cloud AliCloud ANS 提供了 Spring Cloud 规范下商业版的服务注册与发现,可以让用户方便的在本地开发,同时也可以运行在云环境里。
Spring Cloud Alibaba 已经发布了 0.2.0.RELEASE 版本,需要首先导入依赖管理 POM。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
接下来引入 Spring Cloud AliCloud ANS Starter 即可。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-ans</artifactId>
</dependency>
当客户端引入了 Spring Cloud AliCloud ANS Starter 以后,服务的元数据会被自动注册到注册中心,比如IP、端口、权重等信息。客户端会与服务端保持心跳,来证明自己可以正常提供服务。
以下是一个简单的应用示例。
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ProviderApplication {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
既然服务会被注册到注册中心,那么肯定需要配置注册中心的地址,在 application.properties 中,还需要配置上以下地址。
# 应用名会被作为服务名称使用,因此会必选
spring.application.name=ans-provider
server.port=18081
# 以下就是注册中心的IP和端口配置
spring.cloud.alicloud.ans.server-list=127.0.0.1
spring.cloud.alicloud.ans.server-port=8080
Note
|
此时没有启动注册中心,启动应用会报错,因此在应用启动之前,应当首先启动注册中心。 |
ANS 使用的注册中心有两种,一种是完全免费的轻量版配置中心,主要用于开发和本地调试,一种是云上注册中心,ANS 依托于阿里云 EDAS 产品提供服务注册的功能。通常情况下,可以使用轻量版配置中心作为开发和测试环境,使用云上的 EDAS 作为灰度和生产环境。
轻量版配置中心的下载和启动方式可参考 这里
Note
|
只需要进行第1步(下载轻量配置中心)和第2步(启动轻量配置中心)即可,第3步(配置hosts)在与 ANS 结合使用时,不需要操作。 |
启动完轻量版配置中心以后,直接启动 ProviderApplication ,即可将服务注册到轻量版配置中心,由于轻量版配置中心的默认端口是8080,因此你可以打开 http://127.0.0.1:8080 ,点击左侧"服务列表",查看注册上来的服务。
使用云上注册中心,可以省去服务端的维护工作,同时稳定性也会更有保障。当使用云上注册中心时,代码部分和使用轻量配置中心并没有区别,但是配置上会有一些区别。
以下是一个简单的使用云上配置中心的配置示例。
# 应用名会被作为服务名称使用,因此是必选
spring.application.name=ans-provider
# 端口配置自由配置即可
server.port=18081
# 以下就是注册中心的IP和端口配置,因为默认就是127.0.0.1和8080,因此以下两行配置也可以省略
spring.cloud.alicloud.ans.server-mode=EDAS
spring.cloud.alicloud.access-key=你的阿里云AK
spring.cloud.alicloud.secret-key=你的阿里云SK
spring.cloud.alicloud.edas.namespace=cn-xxxxx
server-mode 的默认值为 LOCAL ,如果要使用云上注册中心,则需要更改为 EDAS 。
access-key 和 secret-key 则是阿里云账号的 AK/SK,需要首先注册阿里云账号,然后登陆 阿里云AK/SK管理页面 ,即可看到 AccessKey ID 和 Access Key Secret ,如果没有的话,需要点击"创建 AccessKey"按钮创建。
namespace 是阿里云 EDAS 产品的概念,用于隔离不同的环境,比如测试环境和生产环境。要获取 namespace 需要 开通 EDAS 服务,按量计费模式下开通是免费的,开通以后进入 EDAS控制台,即可看到对应的 namespace,比如 cn-hangzhou。
Note
|
EDAS 提供应用托管服务,如果你将应用托管到 EDAS,那么 EDAS 将会自动为你填充所有配置。 |
Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态,后续不再进行更新已成为事实。作为开发者的我们,如何使用极简的方式替换现有的 Netflix 组件成为了首要解决的问题。Spring Cloud Alibaba 实现了 Spring Cloud 服务注册的标准规范,这就天然的给开发者提供了一种非常便利的方式将服务注册中心的 Eureka 迁移到商业化的组件 ANS 。
下面是大致整理了 SCN 迁移 SCA 之 Eureka 迁移的三种方案。
-
方案1:
重启进程迁移
客户改造完代码后,直接停掉所有的进程并重新部署新代码到 EDAS 上。
缺点:需要停机
-
方案 2: 切流迁移
即准备两套环境,一套是迁移后的环境,一套现有的环境。总的流量入口控制访问流量流入迁移后的环境还是现有环境,两环境之间的服务是不可调用的。当迁移后的环境跑一段时间服务运行稳定后,对现有的环境机器总体停机,流量全部打到迁移后的环境;如果有问题,入口流量切断迁移后的环境,流量又访问现有的环境。
缺点:维护机器成本增加一倍
-
方案 3: 混存迁移
在现有的环境里,对部分服务进行迁移的改造,部署后,服务既注册于 Eureka,又注册于 ANS 。当所有的服务都注册于 ANS 时,迁移完成,直接将 Eureka 的服务下线调。
缺点:实现起来较有挑战,需要双注册,双定阅。
接下来将重点讨论下 混存迁移 的具体实现。
混存迁移的核心思路是在 ANS Starter 中,支持多注册中心的双注册/双订阅,以此来达到不需要全部重启进程,也不需要增加一套环境的目的,降低成本,提高服务的在线服务时长。
在 Spring Cloud 服务注册与发现的规范中,只能支持单注册中心,这主要是因为在 Spring Cloud 的服务注册与发现过程中,限制了在 Spring 的 Ioc 容器中只能存在一个 AnsServiceRegistry、AnsRegistration、AbstractAutoServiceRegistration 三种类型的 Bean。因此首要解决的第一个问题是:如何解决 Eureka Starter 和 ANS Starter 共存的问题 ?
- 文档
- Documents
- Open Source components
- Commercial components
- Example
- awesome spring cloud alibaba
- 2021.0.1.0升级指南