为什么要学习springCloud

在项目开发种随着业务开发越来越多,导致功能之间耦合度高,开发效率低,系统运行缓慢,难以维护及不稳定,微服务架构可以解决或避免这些问题。springcloud正是微服务架构的实现。

系统架构的演变

集中式架构(单一应用)

流量少时,将所有功能部署在一起,以减少部署节点和成本;所有业务模块部署在一起,放在一台服务器上。

优点:系统开发速度快,开发,测试,调试比较方便维护成本低,

缺点:

1、因为集成度高,一个系统种需要处理各类业务,并发量不能支撑很大。

2、代码耦合度高,维护困难,针对某个模块修改时,往往会改动到其他模块的代码。

3、无法针对性优化(某个模块访问量比较大,需要进行集群部署,无法针对某个模块集群部署,只能对所有的功能模块集群部署)

4、单点容错率低:一个模块宕机,所有模块都不能用。

垂直拆分

根据业务功能把原来单一的应用拆成多个独立的子系统

优点:实现流量分担,解决并发问题,模块针对性优化,针对性扩展不会影响其他模块,容器率提高,宕机一个模块不会互相使用

缺点:如果需要相同的逻辑去写,因为是独立的就需要重写一遍,代码重用率低

分布式服务

垂直应用越来越多,应用之间必然存在交互,将核心业务抽取出来,作为独立的服务,形成服务中心。

优点:在垂直拆分的基础上实现代码不再重复编写。

缺点:调用错综复杂,耦合度高,难以维护。

面向服务架构(SOA)

优点:通过ESB服务总线(消息转化解释,路由),连接各个应用节点。简化了调用关系。

缺点:供应商提供的ESB有偏差,自身实现复杂性高。所有服务都通过ESB协调,转化,运维,测试,部署都困难,全部都经过一个ESB进行通信降低了通信速度。

微服务架构

使用一套小服务来开发单个应用,每个服务基于单一业务构建,运行在自己的进程种,并使用轻量机制通信,通常是HTTP API,这些服务独立部署,可以使用不通的编程语言,不同的数据存储技术。

springcloud过时了吗 替代品是什么 springcloud的缺点_负载均衡

API Geteway网关也是一个服务器,是系统的唯一入口,客户端通过统一的网关进入微服务,在网关层处理非业务功能(身份验证,监控,负载均衡等等)。服务端通过服务注册中心进行服务注册管理。

微服务特点

单一职责:每个服务只对应唯一,单一的业务。

微:拆分粒度很小,服务虽小但是可以用自己的编程语言,数据库等等完整的一套服务。(任何可以访问http协议的语言都可以)

面向服务:每个服务都要暴露Rest api

自治:服务间互相独立,互不干扰

团队独立:每个服务都可以是一个独立的团队开发

技术独立:只要提供Rest,用什么技术都可以。

前后端分离:提供统一的Rest接口,后端不再为PC,移动开发不同接口;

数据库分离:每个服务使用自己的数据源

部署独立:服务间虽然有调用,但重启互不影响,服务都是独立的组件,可复用,可替换,易维护。

服务调用方式说明

微服务需要远程调用;

RPC:基于Socket,工作在会话层,自定义数据格式,比如dubbo;

http:基于TCP,工作在应用层,规定了数据传输格式,优点是对服务的提供和调用没有任何技术限定,缺点是封装臃肿,

热门的Rest风格,可以通过http协议来实现。

区别

RPC是根据语言的api,如果公司全都采用java来实现应用可以使用dubbo来做。如果公司技术栈多样化,那么采用springCloud来搭建更合适,所以用的是http来实现的。

SpringCloud概述

为什么springCloud最火

后台硬:spring家族的一员

技术强:spring团队技术强大;

群众基础好:spring有很多程序员在用

使用方便:springboot开发非常方便,而springcloud在springboot上构建,有springboot的特点。

SpringCloud简介

将市面上刘翔的技术整合到一起,实现了大量功能:配置管理,服务发现,只能路由,负载均衡,熔断器,控制总线,集群状态等。

(Eureka:注册中心;Zuul、Gateway:服务网关;Ribbon:负载均衡;Feign:服务调用;Hystrix或Resilience4j:熔断器)

流程:

1、请求–>服务网关

2、负载均衡 从地址中选择一个地址来调用,这个地址是从服务中心获取服务列表,基于负载均衡算法选择一个地址来访问

3、服务之间调用根据Feign来调用

4、配置需要改变 根据配置服务中心统一实时的修改微服务的配置项

创建微服务工程

需求:查询数据库中用户数据并输入到浏览器

创建微服务父工程:添加spring boot父坐标,管理组件依赖;

不仅要依赖springboot的父坐标,也要继承依赖springcloud的父坐标,这边通过scope的import可以继承springcloud的父坐标。(需要两个不同的父坐标所以要样加)

springcloud过时了吗 替代品是什么 springcloud的缺点_spring_02

用户服务工程:整合mybatis查询数据库中用户数据
可以访指定http链接输出用户数据
1、添加启动器依赖(web,通用Mapper)
2、创建启动引导类和配置文件
3、修改配置文件中的参数
4、编写测试代码
5、测试
跟普通的springboot项目基本上没有什么不同,
用户消费工程:利用查询用户服务获取用户数据并输出到浏览器
需求:访问指定http链接,使用RestTemplate获取服务工程链接的数据。
实现步骤:
1、添加启动器依赖
2、创建启动引动类和配置文件
3、编写测试代码(处理器中使用RestTemplate访问服务获取数据)
注入RestTemplate,复制实体类字段,不需要数据库交互注解,
使用 restTemplate.getForObject(url, String.class);来访问服务工程。
(url为服务工程链接,用于获取数据库数据的那个)
4、测试