SpringCloud Alibaba

2018年10月31日,SpringCloud Alibaba正式入驻SpringCloud官方孵化器,并在Maven中央库发布了第一个版本。现在SpringCloud Alibaba支持:

  • 服务限流降级:默认支持Servlet、Feign、RestTemplate、Dubbo和RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控
  • 服务注册与发现:适配SpringCloud服务注册和发现标准,默认集成了Ribbon的支持
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新
  • 消息驱动能力:基于SpringCloud Stream为微服务应用构建消息驱动能力
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精确、高可靠、高可用的定时(基于Cron表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行。

Nacos支持AP和CP之间切换

何时选择使用何种模式?

C是所有节点在同一时间看到的数据是一致的;而A的定义时候所有的请求都会收到响应

​ 一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么可以使用AP模式。当前主流的服务如SpringCloud、Dubbo服务,都适用于AP模式,AP模式为了服务的可用性而减弱了一致性,所以AP模式下只支持注册临时实例。

​ 如果需要在服务级别编辑或存储配置信息,那么CP是必须的K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

切换AP与CP

1
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

Nacos配置

在Nacos中dataId的完整格式是

1
${prefix}-${spring.profile.active}.${file-extension}
  • prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active即为当前环境对应的profile,注意:当spring.profile.active为空的时候,对应的连接符-也将不存在,dataId的拼接格式变为${prefix}.${file-extension}
  • file-extension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持propertiesyaml类型。
Namespace、Group、Data ID三者的关系,为什么这么设计?

​ 它的分类设计思想类似Java中的包名和类名,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

​ 默认情况:Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

​ Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说现在有三个环境:开发、测试、生产,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

​ Service就是微服务,一个Service可以包含多个CLuster,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾将Service部署在不同的地域,这时就可以给不同地域的微服务起不同的集群名称,还可以尽量让同一个机房的微服务相互调用,以提升性能。

​ 最后是Instance,就是微服务的实例。

配置Nacos集群

将Nacos中的SQL脚本执行

该脚本共11张表

在Nacos的conf/application.properties中添加

1
2
3
db.url.0=jdbc:mysql://192.168.56.70:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

在Nacos的conf/下新建cluster.conf,用此文件来设置集群的地址

修改bin目录下的startup.sh

配置Nginx下的Nginx.conf。

更改Server,新增upstream cluster

启动Nacos集群