dubbo cloud 中区别:
dubbo: RPC方式实现服务间调用 数据库是一个 每个服务 都需要引入dao层依赖 访问操作的数据库都是同一个
cloud: Http 方式实现服务间的调用 每个服务间可以拆分更加细化 ,同时每个服务都可以独立部署 ,并且每个服务可以有自己独立的数据源
用户服务[对用户的数据维护操作] 用户数据库 [与用户相关的数据表]
### 微服务架构
微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构 --来源百度
微服务指的就是 一个可以单独运行的程序 并且可以被外部访问调用(轻量级)
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。
## SpringCloud优点
1. 集大成者,Spring Cloud 包含了微服务架构的方方面面。
2. 约定优于配置,基于注解,没有配置文件。(扯淡)
3. 轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者。
4. 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。
5. 开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件。
在分布式架构中 有许多问题需要解决:
1.前台应用web(pc app 由于每个服务会分开部署 那么进行访问时 调用的接口地址不能统一) 统一网关处理
2.当应用越来越庞大时 ,部署的服务也好越来越多 服务间的调用链路也会越来越长 服务间的快速失败响应
当一个请求到达 一个服务时 ,这服务需要调用其他的服务 另外的一个服务由于网络原因会出现问题导致整个响应时间过长 , 请求的线程得不到释放 请求大量积压 最终导致服务器资源耗尽 服务宕机
0-1
在dubbo中 想要集成一些分布式开发中常用的一些处理措施技术时需要额外去添加这个组件,并且配置非常复杂.
原生SpringCloud中虽然是集成了这个组件 但是需要开发人员收动配置,并且需要二次开发 0.5 ->1
800多个微服务架构
## Netflix
![1624180177743](assets/1624180177743.png)
Netflix(Nasdaq NFLX) 译为奈飞或网飞,是一家会员订阅制的流媒体播放平台 ,总部位于美国加利福尼亚州洛斯盖图。成立于1997年,曾经是一家在线DVD及蓝光租赁提供商,用户可以通过免费快递信封租赁及归还Netflix库存的大量影片实体光盘
![1624180497920](assets/1624180497920.png)
## SpringBoot
Spring Boot 是由 Pivotal 团队提供的基于 Spring 的全新框架,其设计目的是为了简化 Spring 应用的搭建和开发过程。该框架遵循“约定大于配置”原则,采用特定的方式进行配置,从而使开发者无需定义大量的 XML 配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。
Spring Boot 并不重复造轮子,而且在原有 Spring 的框架基础上封装了一层,并且它集成了一些类库,用于简化开发。换句话说,Spring Boot 就是一个大容器
## SpringCloud与Dubbo
dubbo并不是什么都没有 ,如果想要实现下面的技术需要手动进行复杂的配置才能完成
而cloud是已经组件这些依赖 只要简单的配置就可实现gateway zuul2 webflux 异步响应式编程\
服务众多 每个服务不同配置属性 800 10台服务负载 配置一样 其中一个配置需要更新
配置名称: 配置内容 平滑性的更改配置内容
配置中心中保存 服务配置信息 当配置发生变更后 不需要主动的去更改每个服务的配置 而引入配置中心的服务会自动更新配置 而服务不需要重新启动即可获取最新的配置信息
![1607683717162](assets/1607683717162.png)
springcloud是一种将每个服务拆分为更细化的分布式架构,服务的调用
微服务架构中对于服务的拆分没有一个严格的标准只有更合理的拆分体系
springcloud - > springboot
zk中服务发现与同步是一致性
eureka 相互注册 体系 可用性 如果eureka注册后在注册中心没有发现 客户端时 是正常现象 需要等待最少30s后才能正常获取或显示注册的实例
# 服务注册与发现-Eureka
依赖:
```xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
```
## cloud&boot依赖引导通用设置
```xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
```
Eureka配置:
```yml
spring:
application:
name: cloud-eureka #服务名称
server:
port: 9000 #端口
eureka:
instance:
hostname: localhost:${server.port} #实例注册地址
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://${eureka.instance.hostname} #注册的协议地址访问名称
```
eureka包含2个组件,Server和Client.Server服务端提供服务注册功能,提供者节点启动后会在Eureka中进行注册,这样EurekaServer的服务注册表中将会存储所有可用的服务节点信息.然后各个提供者将会向EurekaServer发送心跳.以告知EurekaServer自己的健康状况,默认周期为30秒.如果在多个心跳周期内(默认为30秒)没有接收到某个提供者的心跳,EurekaServer会认为其已无法提供服务,会将该提供者节点从服务注册表中移除.EurekaServer之间通过复制的方式完成数据的同步.
EurekaClient是一个java客户端,用于简化消费者与EurekaServer的交互,同时EurekaClient还内置有负载均衡器,为消费者从EurekaServer的服务注册表中选择合适的提供者.
Eureka提供了客户端缓存机制,即使所有的eurekaServer都挂掉客户端依然可以利用缓存中的信息为消费者提供服务发现功能,不过,此时不再接受服务注册,为EurekaServer已经全部挂掉,这是AP原则的体现.
## 创建服务提供者
引入依赖
```xml
其他的依赖找boot项目的依赖添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
```
服务提供者其他组件(mysql mybatis-plus等)
```xml
<dependencies>
<!--应用监控 依赖 在1.5后需要手动加载和开启-->
<dependency>