SpringCloud & SpringCloud Alibaba(1)
前言:
在信息技术的浩瀚海洋中,技术文档不仅是知识的载体,更是每个人挑战技术难题的智慧结晶。
本人不才,文档编写水平和代码能力有限,但是每份文档经过精益求精和明察秋毫过程的编写,让每个读者通俗易懂。
尽管有时困惑、疲惫,但每当看到文档的浏览量扶摇直上,那份成就感便油然而生。
你们的关注和点赞是我持续更新的动力!
感谢大家的支持!
1. 什么是微服务
- 集群 : cluster同一种软件服务的多个服务节点共同为系统提供服务过程称之为该软件服务集群。
- 分布式 : distribute不同软件集群共同为一个系统提供服务——这个系统称之为分布式系统。
举例:厨房有三个厨师都在烧菜是集群,三个厨师一个在烧菜,一个在切水果,一个在洗菜是分布式。
推荐文档:微服务文档。
官方定义 : 微服务是一种架构。
a. 基于原来单个应用开发出—系列微小服务。
b. 每个服务运行在自己计算机进程里面。
c. 每个服务基于项目中业务进行拆分。
d. 拆分出来的每个服务独立部署。
e. 这些服务都是基于分布式管理。
通俗定义:
微服务是—种架构。
这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中。
2. 为什么是微服务
单体应用
- 优点
1)单一架构模式在项目初期很小的时候开发方便,测试方便,部署方便,运行良好。
- 缺点
1)应用随着时间的推进,加入的功能越来越多,最终会变得巨大,一个项目中很有可能数百万行的代码,互相之间繁琐的jar包。
2)久而久之,开发效率低,代码维护困难。
3)还有一个如果想整体应用采用新的技术,新的框架或者语言,那是不可能的。
4)任意模块的漏洞或者错误都会影响这个应用,降低系统的可靠性。
2.1 微服务架构应用
- 优点
1)将服务拆分成多个单一职责的小的服务,进行单独部署,服务之间通过网络进行通信。
2)每个服务应该有自己单独的管理团队,高度自治。
3)服务各自有自己单独的职责,服务之间松耦合,避免因一个模块的问题导致服务崩溃。
- 缺点
1)开发入员要处理分布式系统的复杂性。
2)多服务运维难度,随着服务的增加,运维的压力也在增大。
3)服务治理和服务监控关键。
2.2 架构演变
- All in One Application 单一架构
起初当网站流量很小时,将所有功能都写在一个应用里面,对整个应用进行部署,以减少部署节点和成本。对于这个架构简化增删改查的工作量的数据访问框架(ORM)是关键。
- vertical Application 垂直架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,握升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的web框架(MVC)是关键。
- Distributed service 分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关链。
- Elastic computing 流动计算架构即微服务架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
3. SpringCloud-引言
3.1 定义
官方定义: SpringCloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具。
通俗定义: SpringCloud含有众多子项目的工具集 tools collection微服务工具集合。
3.2 微服务
基于单体基于业务进行拆分,每个服务都是独立应用独立部署运行在自己计算机进程对于这些服务都是分布式管理。
3.3 命名
定义: SpringCloud涵盖众多子项目工具集 服务发现 服务注册 负载均衡 子项目版本使用数字。
早期命名:选择伦敦地铁站名称作为发布版本命名A-Z,Angel、Brixton、Camden、Dalston、Edgware、Finchley、Greenwich、Hoxton Hoxton.SR6。
举例: 2020.0.2 数字。
3.4 SpringCloud 与SpringBoot 的版本对应关系
4. SpringCloud-环境搭建
4.2 SpringCloud工具集
定义:用来帮助开发人员快速构建一套分布式应用,微服务工具集(服务注册/发现/负载均衡/路由组件/统一配置管理)。
4.3 环境搭建
SpringCloud & SpringBoot版本:
SpringCloud Hoxton.SR6(1-10)
SpringBoot 2.2 .5版本
jdk1.8
maven 3.x idea 2018
a. 创建SpringCloud parent。
b. 在父项目中继承SpringBoot父项目。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifact Id>
<version>2.2.5.RELEASE</version>
</parent>
c. 维护SpringCloud的依赖。
<properties>
<spring.cloud-version>Hoxton.SR6</spring.cloud-version>
</properties>
<dependencyManagement>
<dependencies>
<!--维护springcloud版本-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${
spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
5. Eureka
5.1 服务注册中心组件
定义:服务注册中心就是在整个微服务架构单独抽取一个服务,这个服务不完成项目中任何业务功能,仅仅用来在微服务中记录微服务以及对整个系统微服务进行健康状态检查,以及服务元数据信息存储。
5.2 服务注册中心组件开发
常用注册中心组件: Eureka (netflix) 、Zookeeper (java) 、Consul (Go) 、Nacos (Java阿里巴巴)。
5.3 Eureka
简介:Eureka是Hletflix开发的服务发现框架SpringCloud-Netflix-Eureka服务注册中心Eureka包含两个组件: Eureka server和Eureka client。
用户/商品/订单服务用哪个注册中心就是哪个client,比如用Zookeeper注册中心,就是Zookeeper client。
5.4 开发Eureka Server 服务注册中心
a. 创建SpringBoot项目。
com.baichi.EurekaServerApplication.class写入SpringApplication.run跑起来。
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,args);
}
}
b. 引入Eureka Server 依赖 和Springboot Web依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
c. 配置application.properties。
# eureka server 端口号 默认就是8761
server.port=8761
# 指定服务名称 注意:服务名不能出现下划线 默认服务名不区分大小写,推进服务名大写
spring.application.name=EUREKASERVER
# eureka server服务注册中心 暴露服务地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
d. EurekaServerApplication.class添加依赖@EnableEurekaServer。
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {