微服务简介
# 1. 微服务
# 1.1 介绍
微服务的架构特征:
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
- 自治:团队独立、技术独立、数据独立,独立部署和交付
- 面向服务:服务提供统一标准的接口,与语言和技术无关
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,可以认为微服务是一种经过良好架构设计的分布式架构方案
# 1.2 SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
其中常见的组件包括:
另外,SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
# 1.3 总结
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
微服务:一种良好的分布式架构方案
①优点:拆分粒度更小、服务更独立、耦合度更低
②缺点:架构非常复杂,运维、监控、部署难度提高
SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件
# 2. 服务拆分和远程调用
# 2.1 服务拆分原则
这里我总结了微服务拆分时的几个原则:
- 不同微服务,不要重复开发相同业务
- 微服务数据独立,不要访问其它微服务的数据库
- 微服务可以将自己的业务暴露为接口,供其它微服务调用
# 2.2 远程调用 —— RestTemplate
RestTemplate 是 Spring 框架提供的一个用于进行 HTTP 请求的模板类,它简化了 Java 开发人员与 RESTful 服务的交互。通过 RestTemplate,我们可以发送 GET、POST、PUT、DELETE 等类型的 HTTP 请求,并且可以将返回的结果直接转换为需要的对象类型。
使用 RestTemplate 发送 HTTP 请求通常需要以下几个步骤:
- 创建 RestTemplate 对象:
RestTemplate restTemplate = new RestTemplate();
- 发送 HTTP 请求:
String url = "https://api.example.com/v1/users/{id}";
User user = restTemplate.getForObject(url, User.class, 1);
2
在上述代码中,我们使用 getForObject() 方法发送一个 GET 请求,其中 url 表示请求的 URL,User.class 表示需要将响应转换为 User 类型的对象,1 表示 URL 中的占位符 {id} 的值。
- 处理返回结果:
System.out.println(user.getName());
在上述代码中,我们将从服务端获取到的用户信息打印输出。
RestTemplate 还提供了其他很多方便的方法,例如 postForObject()、put()、delete() 等,开发者可以根据具体需求进行选择。
需要注意的是,在使用 RestTemplate 发送 HTTP 请求时,需要注意处理异常情况,例如网络不可用,或者无法连接到指定的服务端等等。
# 2.3 提供者与消费者
在服务调用关系中,会有两个不同的角色:
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)