springcloud技术体系学习

架构的演进

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

  • 垂直应用架构
    在这里插入图片描述
    通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。
    缺点: 公用模块无法重复利用,开发性的浪费

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

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

springcloud

在这里插入图片描述
在这里插入图片描述

微服务优缺点

在这里插入图片描述
在这里插入图片描述

微服务技术栈

在这里插入图片描述
各微服务框架的比较
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完整一套架构
在这里插入图片描述

dubbo和springcolud比较

在这里插入图片描述
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机器上也有一个)
在这里插入图片描述
客户端调用(客户端调用服务时不需要写具体的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);
        }
}

在这里插入图片描述
lvs
在这里插入图片描述
假设abc三个小区,每个小区带宽100M,a用网主要在早上,b中午,c晚上,不用负载均衡,由于资源有限,abc啥时候都是100M,用了负载,a早上是300M,bc是0M,b中午300M,ac是0M
在这里插入图片描述
nginx是服务端负载均衡,ribbon是客户端负载均衡

feign

在这里插入图片描述
个人理解: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);
   }
}
  • 二者所调用的服务(都是实现了负载均衡)
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值