1.系统架构演变
单体架构
比如,大家都很熟悉的电商系统,里面涉及的业务主要有:用户管理、商品管理、订单管理、支付管理、库存管理、物流管理等等模块,初期我们会将所有模块写到一个Web项目中,然后统一部署到一台tomcat服务器上。
存在问题:代码高耦合,代码迭代困难,功能扩展受限,项目非常复杂。
分布式架构
分布式架构,就是将原来一个项目应用进行拆分,将其拆分为互不想干的几个应用,以此来提升系统的整体性能。
存在问题:各系统难免存在重叠的业务(如订单服、物流、推广都需要调用用户服务)
SOA架构
在SOA架构中,我们会将系统整体拆分为服务层和表现层。服务层封装了具体的业务逻辑供表现层调用,表现层则负责处理与页面的交互操作。
通过一个注册中心,解决服务的注册与订阅,服务层专注于服务注册,表现层专注发现与订阅服务。
存在的问题:
- 服务提供方与调用方接口耦合度较高
- 抽取服务的粒度较大,即服务功能庞杂,所有模块功能订阅在一起。
微服务
在SOA架构基础上进一步扩展,将其将其彻底拆分为一个个小的可以独立部署的微服务。
微服务架构特征:
- 面向服务:按照业务,每一个服务都可以独立部署,每一个服务可以作为服务提供者,也可以作为服务消费者。
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
- 隔离性好:服务调用的隔离、容错
- 自治:独立打包。部署,升级,降低开发成本
2. SpringCloud 与SpringCloud Alibaba
Spring Cloud是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,是一个微服务解决方案的框架。
简单来说:
- SpringCloud = Springboot + Netflix的一些服务组件
- SpringCloud Alibaba = Springboot + Alibaba服务组件+Spring官方组件
关于版本号:关注版本号冲突,尽量选择合适版本
下表为按时间顺序发布的 Spring Cloud Alibaba 以及对应的适配 Spring Cloud 和 Spring Boot 版本关系:
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2021.0.1.0 | Spring Cloud 2021.0.1 | 2.6.3 |
2.2.7.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2021.1 | Spring Cloud 2020.0.1 | 2.4.2 |
2.2.6.RELEASE | Spring Cloud Hoxton.SR9 | 2.3.2.RELEASE |
2.1.4.RELEASE | Spring Cloud Greenwich.SR6 | 2.1.13.RELEASE |
2.2.1.RELEASE | Spring Cloud Hoxton.SR3 | 2.2.5.RELEASE |
2.2.0.RELEASE | Spring Cloud Hoxton.RELEASE | 2.2.X.RELEASE |
2.1.2.RELEASE | Spring Cloud Greenwich | 2.1.X.RELEASE |
2.0.4.RELEASE(停止维护,建议升级) | Spring Cloud Finchley | 2.0.X.RELEASE |
1.5.1.RELEASE(停止维护,建议升级) | Spring Cloud Edgware | 1.5.X.RELEASE |
3.Nacos
nacos简介
Nacos 是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的集注册中心与配置中心于一体的管理平台”。
前面四个字母分别表示 Naming 和 Configuration 的前两个字母, 最后一个s 为 Service。
即服务注册订阅、配置中心、服务。
linux安装Nacos
- 解压
tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local - 启动和关闭
- 启动:
cd /usr/local/nacos/bin
./starup.sh -m standalone - 关闭:
cd /usr/local/nacos/bin
./shutdown.sh
- 启动:
网址:http://ip:8848/nacos/,默认用户名/密码为: nacos/nacos
nacos界面管理器
Nacos 注册中心(服务注册与订阅)
pom.xml依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
application.yml
spring: cloud: nacos: discovery: server-addr: 39.105.52.61:8848 #注册中心nacos服务的地址 application: name: nacos-consumer #向注册中心注册的名字
springboot启动类注解:@EnableDiscoveryClient:向注册中心注册该服务,并可以获取其他服务的调用地址
服务提供者和服务消费者都需要以上的内容,nacos注册中心包含了服务的注册与订阅,而且每个微服务既可以做提供者也可以作为消费者
Nacos 配置中心(管理配置文件)
配置中心的思路是:
- 首先把项目中各种配置全部都放到一个集中的地方进行统一管理。
- 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。
- 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。
pom.xml依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
bootstrap.yml(必须为这个文件名)
spring: cloud: nacos: config: server-addr: 39.105.52.61:8848 #nacos配置中心地址 file-extension: yaml prefix: nacos-config #prefix + file-extension 就是配置列表里的Data ID,一般指项目里的工程名 namespace: dev #命名空间,一般指环境 group: NACOS_DEMO #group组,一般指项目
在nacos中创建配置文件,Data ID:prefix.file-extension,配置格式:yaml或properties。原来在springboot中工程的yml配置文件,统一在nacos配置中心中存放
可以实现集中管理配置文件,动态更新配置文件
注意在controller里加@RefreshScope注解,重新从BeanFactory获取一个新的实例(该实例使用新的配置)。
配置隔离
- 对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。
Namespace Group DataId介绍:
- Namespace: 代表不同的环境的配置隔离, 如: 开发、测试, 生产等
- Group: 可以代表某个项目, 如XX医疗项目, XX电商项目
- DataId: 每个项目下往往有若干个工程, 每个配置集(DataId)是一个工程的主配置文件