微服务
一、概述
什么是微服务
微服务是分布式架构的一种解决方案,系统平台架构通常分为两种:一:单体架构 二:分布式架构
-
单体架构:所有业务代码都写在一个项目下,业务之间可以互相调用(ioc、创建对象等方式)
优点:
架构简单,易于理解,方便部署
缺点:
代码不方便维护,耦合度太高
-
分布式架构;
优点:
分布式架构极大地对业务和代码进行了解耦,易于维护
缺点:
部署困难,架构难度大
微服务能干什么
微服务用于解决分布式架构,为分布式架构提供了一种很好的解决方案
怎么用微服务
微服务是一套完整的解决方案,其中有 :
服务集群(将系统拆分成一个一个的粒度很小的服务后进行集群)
对于每一个服务都要观察它的健康状态等,需要一个注册中心
并且每一个服务都是用不同的数据源,不同的框架,不同的工具,配置信息也不同,所以也需要一个记录配置信息的配置中心
用户进行访问时,需要一个服务网关进行身份验证和分配路由(告诉用户 服务都在哪里)
服务与服务之间的通信通过传统rpc方式性能开销 内存开销都比较大,我们就需要一个消息中间件,进行异步传递消息,起到通知的作用,这样通知完不需要等待
最后数据库也要进行分布式 集群(数据量太大)
对于微服务,我们划分服务时要尽可能的将粒度压缩,保证单一职责
设计中还要达到面向服务的效果,对外暴露接口
自治,就是 独立部署 自定义配置 数据也是自己的
隔离性强,不能其中一个服务挂了,其他服务也跟着挂了
rpc是什么
rpc即远程调用方式,服务与服务之间ip 端口都不同,所以需要一个相同调用的方式来传递消息,单体架构中,业务与业务之间调用方式一帮通过ioc注入,直接调用实例的方法来获取数据,对于分布式架构就不能这么做了
rpc就为我们提供了一种方法,就是通过java后端发起http请求(就是通过url方式调用接口)
二、远程调动实例
需求:
写两个服务,订单服务,用户服务,REST风格访问
订单服务:8080端口,对外暴露接口 http://localhost:8080/order/{orderId},访问接口得到订单数据
图示:
用户服务:8081端口:对外暴露接口 http://localhost:8081/user/{userId]},访问接口得到用户数据
图示:
两个服务分别使用自己的数据库,现在需要查询订单反馈的JSON数据中要级联用户的数据
代码:
在配置类中 注册RestTemplate
@MapperScan("com.geekrose.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
// 向spring容器里注入一个RestTemplate对象
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
在业务层 获取订单数据(发送http请求)
@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
String url = "http://localhost:8081/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
order.setUser(user);
// 4.返回
return order;
}
}
实现效果:
图示: