微服务日志从0到1-----第一章初识微服务01.认识微服务
01.微服务简介
单体架构特点:简单方便,高度耦合,拓展性差,适合小型项目。
分布式架构特点:低耦合,架构复杂,难度大,适合大型项目
微服务:一种良好的分布式架构方案(分布式架构中的一种),拆分粒度更小,服务更独立,耦合度更低,但是架构非常的复杂,运维和监控还有部署难度相对提高
单体服务结构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点 架构简单 部署成本低
缺点 耦合度高 升级/维护 困难
分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
**优点 **降低服务耦合,有利于服务升级和拓展
缺点 服务调用关系错综复杂,服务拆分的粒度,服务之间的调度,服务调度关系的处理
微服务的架构特征:微服务属于分布式服务中的一种方案
微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
团队独立、技术独立、数据独立,独立部署和交付
服务提供统一标准的接口,与语言和技术无关
服务调用做好隔离、容错、降级,避免出现级联问题
02.总结
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。
其中在 Java 领域最引人注目的就是 SpringCloud 提供的方案了。
(之所以是最引人注目的原因是背靠Spring 其很多配置都能交由SpringBoot来实现自动装配,基于SpringBoot 将众多的微服务组件集成)
03.微服务技术栈
04.拓展知识点
02.渐入佳境
01.构建项目
首先创建一个简单的项目项目结构如下
简单的实现
订单模块主要实现根据id查询订单的功能,用户模块实现根据id实现查询用户的功能
项目地址: https://github.com/codeXYW/Microservices/tree/main/hello
02.提出需求
在查看订单信息时要求把订单所属的用户信息也一并查询出来
(由于是不同的两个数据库存放的数据所以不能和之前单体项目一样直接访问数据库进行查询)
解决方案:
使用Spring自带的RestTemplate在查询出订单信息后在访问用户服务,查询用户信息将查询到的用户信息添加进订单信息内,基于RestTemplate实现的http请求是与语言技术无关只要是REST风格的接口都可以进行请求
01.创建一个User实体类
02.注册RestTemplate
@Configuration
public class MyBeanFactory {
/**
* @Description //TODO 向容器中注册一个 RestTemplate Bean
* @Param:
* @Return:
* @Author CodeXYW
* @Date 2022/6/28 20:58
*/
@Configuration
static class MyRestTemplate{
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
}
03.修改实现方法
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.拼接访问地址
String url="http://localhost:8081/user/"+order.getUserId();
log.info(url);
// 3.获取用户信息
ResponseEntity<User> user = restTemplate.getForEntity(url, User.class);
order.setUser(user.getBody());
// 4.返回
return order;
}
功能实现后总结一下几个缺点
01.有重复的代码 User 实体类
02.访问的URL是写死的
03.访问的服务是否能访问(是否健康)
这个系列会一直更新下去,有喜欢的姥爷可以给个关注哦