视频版 - 看着更方便:
哔哩哔哩(横板)👉 https://b23.tv/jsYPuA4
小红书(竖版)👉 http://xhslink.com/EIe9hi
微服务 是由 单体应用 演变而来的一种程序设计风格
单体应用的利弊
在 微服务 的概念被提出之前
我们的程序都是 单体应用 的风格
也就是说 把所有的业务都写到一个项目里
然后打成一个 jar 包或者 war 包
放到tomcat下托管运行
这种 单体应用 的设计风格对于
轻量级、业务规模小的程序来说 已经足够
但是随着 业务规模的 不断扩张
就像微信奥
最早不过就是聊天、朋友圈
现在呢
支付、扫一扫、购物、游戏、小程序、视频号....
这个时候 单体应用 的风格会带来下面这些问题奥:
首先 慢
业务扩张 体现在程序上 就是 代码量对吧
这样的话 整个 打包、部署、启动项目 的时间就会变得越来越慢
其次 牵一发而动全身
只要代码稍有改动,那么整个项目都要 停掉
重新 打包、部署、启动
也就是 支付那里要改代码,那整个微信就都用不了了
这点对于 用户来说 很难接受吧
我跟暧昧对象都铺垫了那么久了
刚准备发 表白 消息
结果你告诉我 微信要更新重启?
微服务的出现
为了解决这些问题
微服务 的概念就出现了
它的思路是:
以"服务类型"为基准
将单体应用拆分成颗粒度更细的 微服务
各个微服务独立开发、独立部署、独立维护
并将 方法调用方式 由单体应用的 本地方法内部调用
改造为 基于 RPC 的远程方法调用
这里的 RPC 是什么呢?
RPC 全称 远程过程调用
它是 远程调用的一种 设计模型、理论思想
简单来说就是:
RPC希望在远程调用时
能够屏蔽远程调用的底层实现细节
让远程调用变得简单
就像调用本地方法一样调用远程方法
光说概念可能不太好理解
我举个例子奥
正常我们在java中做远程调用可能是这样的:
//创建RestTemplate对象
RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setOutputStreaming(false);
restTemplate.setRequestFactory(requestFactory);
// 设置请求头
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json");
HttpEntity<Map> httpEntity = new HttpEntity<Map>(map, requestHeaders);
//请求参数
SyncRoleResDto syncRoleResDto = restTemplate.postForObject("https://....", httpEntity, SyncRoleResDto.class);
而如果使用 基于RPC的框架spring cloud
我们知道 其中 feign组件就是做服务调用的
使用feign组件调用远程方法是这样的:
// 远程接口服务在注册中心注册的服务名
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
// 这远程接口地址
@PostMapping("/coupon/spubounds/save")
R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);
}
这就和我们调用本地方法差不多简单了吧!
这就是 微服务 的核心了
重要的话再说一遍:
将 方法调用方式 由单体应用的 本地方法内部调用
改造为 基于 RPC 的 远程方法调用
基于RPC的微服务框架
那基于RPC的框架除了 spring cloud
常用的还有 Dubbo
区别在于:
Dubbo 是纯 RPC 框架
而Spring cloud 除了支持RPC的 feign组件
另外还提供了其它微服务管理组件
像 注册中心、熔断、链路跟踪、配置中心
所以对于微服务架构的技术选型
我们可以使用
spring boot + spring cloud 的方式
用前者搭建微服务
后者做微服务治理
此外
阿里巴巴基于spring cloud 研发了自己的 spring cloud alibaba 微服务治理框架
感兴趣你可以去了解一下
另一种技术选型我们可以使用
dubbo +zookeeper
dubbo实现rpc
zookeeper做注册中心
总结
今天我们通过 单体应用 到 微服务 的演变过程
了解了 微服务的概念以及 RPC 思想
并给出了两种微服务的实现方案:
spring boor + spring cloud
dubbo + zookeeper
我是浩说
帮你入门到放弃