当前位置:   article > 正文

微服务架构与Spring Cloud:设计与治理_springcloud微服务架构

springcloud微服务架构

微服务架构概述

单体架构

单体架构是将所有业务功能集中在一个项目中,最终打包成一个可部署单元。这种方式的优点在于架构简单,部署成本低。然而,它的缺点也很明显:耦合度高,这使得维护和扩展变得困难。

在这里插入图片描述

分布式架构

分布式架构通过将系统根据业务功能拆分成多个独立项目,每个项目作为一个独立的服务运行。这种方式的优点包括降低服务间的耦合度,有利于服务的升级和扩展。

在这里插入图片描述

微服务架构

微服务架构是分布式架构的一种形式,它通过更细致的服务拆分,实现了更高的灵活性和可维护性。微服务架构的关键特征包括:

在这里插入图片描述

  • 单一职责:每个服务只负责一项业务功能,避免业务逻辑的重复开发。
  • 面向服务:服务通过API对外提供功能,强调服务的可访问性。
  • 自治性:每个服务由独立的团队开发、维护,拥有自己的技术栈和数据存储。
  • 隔离性:服务之间通过定义良好的接口进行通信,具有很好的容错和隔离机制。

Spring Cloud与微服务

在这里插入图片描述

Spring Cloud简介

Spring Cloud是一个基于Spring Boot的微服务框架,它集成了多种微服务治理组件,实现了这些组件的自动化配置,提供了一站式的微服务解决方案。

在这里插入图片描述

服务拆分与远程调用

服务拆分后,不同服务之间的通信通常通过远程调用实现。以下是服务拆分的一些注意事项:

  1. 避免业务重复:确保不同微服务之间不会开发相同的业务逻辑。
  2. 数据独立性:每个微服务应有自己的数据库,避免跨服务的数据访问。
  3. 接口暴露:微服务应将业务功能封装成API,供其他服务调用。

在这里插入图片描述

微服务调用模式

微服务之间的调用通常基于HTTP请求,这种方式具有语言无关性,只要知道服务的IP、端口、接口路径和请求参数,就可以实现跨语言的服务调用。

1. RestTemplate方式

@Bean
public RestTemplate getRestTemplate(){
    return new RestTemplate();
}

@Autowired
private RestTemplate restTemplate;

@GetMapping("/createOrder/{gid}/{number}")
public Order order(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
    log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);
    Goods goods = restTemplate.getForObject("http://localhost:9002/goods/getGoods/" + id, Goods.class);
    log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));

    log.info("开始下单:");
    Order order = new Order();
    order.setUid(1);
    order.setUname("测试用户");
    order.setGid(goods.getId());
    order.setGname(goods.getGoodsName());
    order.setNumber(number);

    orderService.createOrder(order);
    log.info("下单成功");
    return order;
}

2. Fegin实现服务调用

Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。

在服务消费者上进行以下操作:
1.添加依赖

<!--fegin组件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在启动类上添加注解

@EnableFeignClients

3.新建client包,并创建接口(把服务提供者controller对应的方法名复制过来,注意路径要完整

@FeignClient("goods-service")
public interface GoodsService {
 
    @RequestMapping("/goods/getGoods/{id}")
    public Goods goods(@PathVariable("id") Integer id);
}

4.调用代码示例

@Autowired
private GoodsService goodsService;

@GetMapping("/createOrder3/{gid}/{number}")
public Order order3(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
	log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);

	//通过feign调用商品微服务
    Goods goods = goodsService.goods(id);
    log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));

    log.info("开始下单:");
    Order order = new Order();
    order.setUid(1);
    order.setUname("测试用户");
    order.setGid(goods.getId());
    order.setGname(goods.getGoodsName());
    order.setNumber(number);

    orderService.createOrder(order);
    log.info("下单成功");
    return order;
 }
服务提供者与消费者
  • 服务提供者:在业务流程中,提供接口供其他服务调用的服务。
  • 服务消费者:在业务流程中,调用其他服务接口的服务。

一个服务可能同时扮演提供者和消费者的角色,这取决于业务流程的上下文。

总结与最佳实践

微服务架构提供了更细粒度的服务拆分,降低了服务间的耦合度,提高了系统的可维护性和可扩展性。然而,它也带来了架构复杂性,增加了运维、监控和部署的难度。

  1. 业务模块拆分:根据业务功能合理拆分微服务,确保每个服务都遵循单一职责原则。
  2. 接口暴露:微服务应将业务功能封装为API,便于其他服务调用。
  3. 独立数据库:每个微服务应有自己的数据库,保持数据的独立性。
  4. 服务治理:使用Spring Cloud等框架进行服务的注册、发现和配置管理,简化微服务治理。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/1022286
推荐阅读
相关标签
  

闽ICP备14008679号