springcloud技术体系学习

文章目录

  • 架构的演进
  • springcloud
  • 微服务优缺点
  • 微服务技术栈
  • dubbo和springcolud比较
  • 注册中心 Consul 使用详解
  • Ribbon负载均衡
  • feign

架构的演进

  • 单体应用架构
    springcloud技术体系学习_第1张图片
    适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。
    缺点:
    1、性能扩展比较难
    2、协同开发问题
    3、不利于升级维护

  • 垂直应用架构
    springcloud技术体系学习_第2张图片
    通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。
    缺点: 公用模块无法重复利用,开发性的浪费

  • 分布式应用架构
    springcloud技术体系学习_第3张图片
    将各个应用通过分层独立出来,可以利用rpc实现web与service、service与service的互相调用,提高了代码的复用性。
    缺点: 每个调用的模块要存储一份完整的被调用模块的位置和状态,一旦位置和状态发生变化,就要更新所有涉及的配置。

  • 面向服务的分布式架构
    springcloud技术体系学习_第4张图片
    随着架构不断增大,服务节点也越来越多,服务之间的调用和依赖关系也越来越复杂,需要有一个统一的中心来调度、路由、管理所有的服务,基于这个中心构建的这个星型架构就是现在目前最主流的SOA分布式架构。

springcloud

springcloud技术体系学习_第5张图片
springcloud技术体系学习_第6张图片

微服务优缺点

springcloud技术体系学习_第7张图片
springcloud技术体系学习_第8张图片

微服务技术栈

springcloud技术体系学习_第9张图片
各微服务框架的比较
springcloud技术体系学习_第10张图片
springcloud技术体系学习_第11张图片
springcloud技术体系学习_第12张图片
完整一套架构
springcloud技术体系学习_第13张图片

dubbo和springcolud比较

springcloud技术体系学习_第14张图片
dubbo解决的问题就是(高性能)rpc调用(微服务中的一环),springcloud是微服务的一站式解决方案

Eureka好死不如赖活着
在这里插入图片描述

注册中心 Consul 使用详解

https://blog.csdn.net/love_zngy/article/details/82216696

Ribbon负载均衡

在这里插入图片描述

# 服务1的配置
server:
  port: 19999
spring:
  cloud:
      consul:
        host:  localhost #10.33.123.87
        port: 8500
        discovery:
        service-name: privoderDept
# 服务2的配置
#只需将端口19999改成9999

注册中心的情况(对于同一个服务privoderDept,9999机器上有一个,19999机器上也有一个)
springcloud技术体系学习_第15张图片
客户端调用(客户端调用服务时不需要写具体的ip,写成serviceID就可以,ribbon会使用负载均衡算法自动分配一个服务的一个ip去调用)

@RestController
public class DeptComsumeController {
   @Autowired
    RestTemplate restTemplate;
   //指定服务,未采用负载均衡
   //private static final String REST_USL_prefix="http://localhost:9999";
   //使用了ribbon,从集群中实现负载均衡,地址使用服务id就可以了
   private static final String REST_USL_prefix="http://privoderDept";
   @RequestMapping("/comsumer/dept/get/{id}")
    public DeptEntity get(@PathVariable("id") Long id){
       return restTemplate.getForObject(REST_USL_prefix+"/getDeptById/"+id,DeptEntity.class);
   }
}

服务端启动类

@SpringBootApplication
@EnableDiscoveryClient      //支持服务发现
@MapperScan("org.lmj.springcloud.mapper")
public class DeptApplication {
        public static void main(String[] args) {
            SpringApplication.run(DeptApplication.class, args);
        }
}

springcloud技术体系学习_第16张图片
lvs
springcloud技术体系学习_第17张图片
假设abc三个小区,每个小区带宽100M,a用网主要在早上,b中午,c晚上,不用负载均衡,由于资源有限,abc啥时候都是100M,用了负载,a早上是300M,bc是0M,b中午300M,ac是0M
springcloud技术体系学习_第18张图片
nginx是服务端负载均衡,ribbon是客户端负载均衡

feign

springcloud技术体系学习_第19张图片
个人理解:RestTemplate+ribbon 和feign实现功能时一样的,都是远程调用,只是实现方式不同。feign是面向接口,RestTemplate+ribbon是面向服务名

  • feign调用
@Component
@FeignClient(value = "privoderDept")
public interface DeptFeignService {
    @GetMapping("/getDeptById/{id}")
    DeptEntity selectDept(@PathVariable("id") Long deptNo);
}


====================
@RestController
public class DeptComsumeController {
@Autowired
    DeptFeignService deptFeignService=null;
    @RequestMapping("/comsumerFeign/dept/get/{id}")
    public DeptEntity comsumerFeign(@PathVariable("id") Long id){
        return this.deptFeignService.selectDept(id);
    }
}
  • RestTemplate+ribbon调用
@RestController
public class DeptComsumeController {
   @Autowired
    RestTemplate restTemplate;
   private static final String REST_USL_prefix="http://privoderDept";
   @RequestMapping("/comsumer/dept/get/{id}")
    public DeptEntity get(@PathVariable("id") Long id){
       return restTemplate.getForObject(REST_USL_prefix+"/getDeptById/"+id,DeptEntity.class);
   }
}
  • 二者所调用的服务(都是实现了负载均衡)
    springcloud技术体系学习_第20张图片

你可能感兴趣的:(分布式)