分布式、微服务、springcloud

我的疑问:分布式和微服务是什么?他们不都是把原来的单体架构进行拆分吗?他们的区别是什么?

单体架构:

一个项目就是一个war包,部署在一个服务器上

分布式:

就是将原来的单体架构进行拆分;

为什么拆:

原来的一个项目部署在一个服务器上,天天用,日积月累,计算和存储任务也随之增加,时间久了,服务器受不了了,于是加内存,加磁盘,换CPU,但是治标不治本,那就将原来的单体架构进行拆分。

怎么拆:

横向拆分:

简单来说,就好比我们以前接触的三层架构,将每一层都独立出来,打成war包,部署在不同的服务器上

垂直拆分:

就好比一个电商项目,拆分成订单项目和用户项目

什么是微服务:

微服务就是很微小的服务,它的特点就是只干一件事。

一个电商项目拆分成订单项目、用户项目,但是还可以拆;

订单项目再拆分为购物项目、结算项目。微服务就出来了,它功能单一;

分布式和微服务的区别

分布式是分散压力,按模块划分,部署在不同的服务器上;

微服务是分散能力,按功能划分,功能单一,相互隔离,自己管理自己(自治)

分布式属于微服务,但是微服务不一定是分布式,因为微服务的应用不一定是分散在多个服务器上

pringcloud

Spring官网:https://spring.io/

分布式、微服务、springcloud_第1张图片

分布式、微服务、springcloud_第2张图片

什么是Spring Cloud 

 Spring Cloud是Spring提供的微服务框架。它利用Spring Boot的开发特性简化了微服务开发的复杂性,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,这些工作都可以借助Spring Boot的开发风格做到一键启动和部署

作用

通过一系列组件,帮助开发者迅速构件一个分布式系统,Spring Cloud 是通过包装其它公司产品来实现的,比如Spring Cloud整合了开源的Netflix很多产品。Spring Cloud提供了微服务治理的诸多组件,例如服务注册和发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等。Spring Cloud组件非常多,涉及微服务开发的诸多场景

五大组件

分布式、微服务、springcloud_第3张图片

 Spring Cloud实现微服务的治理功能产品很多,下面简单介绍下Spring Cloud各个产品的作用,以及采用的原则,如图1-6所示

分布式、微服务、springcloud_第4张图片

入门案例:

1.聚合工程

分布式、微服务、springcloud_第5张图片

2..创建maven实体类

pom.xml

    com.wjg.demo1
    a_cloud_common
    1.0-SNAPSHOT

    
        org.projectlombok
        lombok
        1.18.22
    
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Payment {
    /**
     * 订单编号
     */
    private Integer id;
    /**
     * 支付状态
     */
    private String message;
}

3..支付工程

分布式、微服务、springcloud_第6张图片

分布式、微服务、springcloud_第7张图片 pom中引入web和实体类common

        
            com.wjg.demo1
            a_cloud_common
            1.0-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter-web
        

application.properties改名为application.yml指定端口

server:
  port: 9001
PaymentController
@RestController
@RequestMapping("/payment")
public class PaymentController {
    @GetMapping("/{id}")
    public ResponseEntity payment(@PathVariable("id") Integer id) {
        Payment payment = new Payment(id, "支付成功");
        return ResponseEntity.ok(payment);
    }
}

找到services,启动

分布式、微服务、springcloud_第8张图片

 分布式、微服务、springcloud_第9张图片

找到springboot,运行

分布式、微服务、springcloud_第10张图片

 订单工程

分布式、微服务、springcloud_第11张图片

分布式、微服务、springcloud_第12张图片

 pom.xml同上

启动类

@SpringBootApplication
public class CCloudOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(CCloudOrderApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

 指定端口

server:
  port: 9002
OrderController
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/payment/{id}")
    public ResponseEntity getPaymentById(@PathVariable("id") Integer id) {
        String url = "http://localhost:9001/payment/" + id;
        Payment payment = restTemplate.getForObject(url, Payment.class);
        return ResponseEntity.ok(payment);
    }

}

启动

分布式、微服务、springcloud_第13张图片

 成功

分布式、微服务、springcloud_第14张图片

 发现:微服务的调用是向外提供了接口

  • payment-service:对外提供了支付的接口
  • order-service:通过RestTemplate访问 http://locahost:9091/order/{id} 接口,调用支付服务

改代码存在的问题:

  • 在order中,我们把url地址硬编码到了代码中,不方便后期维护
  • order需要记忆payment-service的地址,如果出现变更,可能得不到通知,地址将失效
  • 即便payment-service形成集群,order还需自己实现负载均衡
  • order不清楚payment-service的状态,服务宕机也不知道
  • payment-service只有1台服务,不具备高可用性

问题的解决需要新的工具,下一章EurekEureka_lifeisworship的博客-CSDN博客

分布式、微服务、springcloud_第15张图片

你可能感兴趣的:(微服务,分布式,spring,cloud)