目录
一、认识微服务
微服务是一种经过良好架构设计的分布式架构方案,拆分粒度更小、服务更独立、耦合度更低,但是架构非常复杂,运维、监控、部署难度提高
单体架构:将业务的所有功能集中在一个项目开发,打成一个包部署
优点:架构简单、部署成本低
缺点:耦合度高
分布式架构:根据业务功能对系统进行拆分,每个业务作为独立项目开发
优点:降低服务耦合,有利于服务拓展
耦合度是指在给定的系统中,各组成部分与中心部分之间的关系。耦合度描述的是各组成部分之间的相互依赖和相互影响的程度
完整的微服务技术栈
二、服务拆分与调用
任何分布式架构都离不开服务的拆分,微服务也是一样。
2.1 服务拆分的原则
这里我总结了微服务拆分时的几个原则:
- 不同微服务,做到单一职责,不要重复开发相同业务
- 微服务数据独立,不要访问其它微服务的数据库
- 微服务可以将自己的业务暴露为接口,供其它微服务调用!
2.2 服务间的远程调用
如何在java代码中发送http请求?
使用RestTemplate发送 //现在主流方式是采用Feign的方式调用服务
远程调用步骤:
- 注册RestTemplate对象
-
- 在主配置中@Bean注册加载
- 使用RestTemplate提供的API来发起http请求
代码案例如下:
将RestTemplate对象注册容器
/**
* 创建RestTemplate并注册Spring容器
* @return
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
使用restTemplate提供的API来发起http请求
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.利用RestTemple 发起http请求,查询用户
// 2.1.url路径
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;
}
三、微服务技术对比
3.1 技术对比
3.2 企业常见技术
3.3 SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架,严格意义上讲Spring Cloud 不是一个传统意义上的框架,而更接近于一个分布式系统的生态系统和工具集合。官网地址:https://spring.io/projects/spring-cloud。
Spring Cloud的核心并没有实现服务注册、熔断、配置中心等功能,它提供了一个标准规范。它是一个由多个子项目组成的生态系统,每个子项目专注于解决特定的问题,而这些子项目共同构建了完整的微服务架构解决方案。
其中常见的组件包括:
另外,SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
总结
- 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
- 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
- 微服务:一种良好的分布式架构方案
①优点:拆分粒度更小、服务更独立、耦合度更低
②缺点:架构非常复杂,运维、监控、部署难度提高 - SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件