一、什么是微服务?

​ 微服务是一种分布式架构,分布式架构就是把服务做拆分,在我们的传统单体架构中,我们把所有的服务都写在一起,随着业务的扩大我们的代码耦合度会变得越来越高,后期维护起来也很不方便。微服务就是把模块拆分,把我们整个项目拆解分成许多独立的子项目,每个子项目之间独立开发和部署,子项目也有自己独立的功能,这些独立的子项目就形成了微服务,不同的子项目就进而形成一个服务集群。

​ 举例说明:一个商城系统很多模块组成,例如订单模块、用户功能、商品服务、支付模块等,这些模块如果采用单体架构,代码之间的耦合度会非常高,也不便于后期的维护,当一个模块出现问题时整个项目也会受到影响。如果采用微服务,每个模块独立开发,由这些子模块构成整个商城系统,有利于提升我们的开发效率,也便于后期的维护。

单体架构:

优点:架构简单、部署成本低。

缺点:耦合度高。

微服务架构:

优点:耦合度低、便于后期维护扩展。

缺点:部署成本高、需要实线远程调用。

二、微服务特征

在这里插入图片描述

三、微服务中各组件的作用

注册中心:记录微服务中每个服务的ip、端口、能干什么事等信息。(我们调用微服务中的某个服务时,可能服务A需要调用服务B,服务B需要调用服务C,注册中心负责记录服务之间的调用关系,我们调用服务时找注册中心就可以了)。

配置中心:统一管理每个服务的配置信息,如果需要变更某个服务的配置信息,只需找到配置中心即可。

网关服务:形如小区保安,能对用户身份做校验,另一方面可以把用户的请求路由到具体的服务中去。

四、微服务技术对比

在这里插入图片描述

以Spring Cloud Alibaba为重点学习。

在这里插入图片描述

自我建议学习第三种方案:Spring Cloud Alibaba + Dubbo

五、微服务远程调用

在单体项目中要实线服务的调用可直接调用(调用对应的service方法),由于微服务中各模块是独立的,各自的数据库都是不可见的,因此通过远程调用来实现互相调用:

  1. 注册RestTemplate
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    //创建RestTemplate并注入Spring容器
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
  1. 修改OrderService(OrderServiceImpl)
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        //1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用RestTemplate发起http请求,查询用户
        //2.1.远程调用user信息
        String url = "http://localhost:8081/user/" + order.getUserId();
        //2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        //3.封装user到Order
        order.setUser(user);
        //4.返回
        return order;
    }
}

六、消费者与提供者

服务提供者:提供接口给其他微服务调用。

服务消费者:调用其他微服务的接口。

一个微服务既可以是消费者,也可以是提供者,例如服务A调用服务B,服务B又调用服务C,因此B即使消费者又是提供者。对于一个微服务具体是消费者还是提供者,是相对的。

七、Eureka注册中心

由于微服务远程调用地址很多,并且地址也在不停的发生变化,因此不能每次都写死调用的地址,并且我们的服务提供者又很多,也不知道到底该调用哪一个提供者,因此采用Eureka,它替我们解决此问题。

Eureka作用:
在这里插入图片描述

在Eureka中,微服务分为客户端和服务的两类,服务端记录服务信息,客户端记录的是服务提供者和服务消费者。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐