前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何理解:微服务?

如何理解:微服务?

作者头像
浩说编程
发布2022-11-11 09:44:20
2730
发布2022-11-11 09:44:20
举报
文章被收录于专栏:Java经验之谈Java经验之谈

视频版 - 看着更方便:

哔哩哔哩(横板)👉 https://b23.tv/jsYPuA4

小红书(竖版)👉 http://xhslink.com/EIe9hi

微服务 是由 单体应用 演变而来的一种程序设计风格

单体应用的利弊

在 微服务 的概念被提出之前

我们的程序都是 单体应用 的风格

也就是说 把所有的业务都写到一个项目里

然后打成一个 jar 包或者 war 包

放到tomcat下托管运行

这种 单体应用 的设计风格对于

轻量级、业务规模小的程序来说 已经足够

但是随着 业务规模的 不断扩张

就像微信奥

最早不过就是聊天、朋友圈

现在呢

支付、扫一扫、购物、游戏、小程序、视频号....

这个时候 单体应用 的风格会带来下面这些问题奥:

首先 慢

业务扩张 体现在程序上 就是 代码量对吧

这样的话 整个 打包、部署、启动项目 的时间就会变得越来越慢

其次 牵一发而动全身

只要代码稍有改动,那么整个项目都要 停掉

重新 打包、部署、启动

也就是 支付那里要改代码,那整个微信就都用不了了

这点对于 用户来说 很难接受吧

我跟暧昧对象都铺垫了那么久了

刚准备发 表白 消息

结果你告诉我 微信要更新重启?

微服务的出现

为了解决这些问题

微服务 的概念就出现了

它的思路是:

以"服务类型"为基准

将单体应用拆分成颗粒度更细的 微服务

各个微服务独立开发、独立部署、独立维护

并将 方法调用方式 由单体应用的 本地方法内部调用

改造为 基于 RPC 的远程方法调用

这里的 RPC 是什么呢?

RPC 全称 远程过程调用

它是 远程调用的一种 设计模型、理论思想

简单来说就是:

RPC希望在远程调用时

能够屏蔽远程调用的底层实现细节

让远程调用变得简单

就像调用本地方法一样调用远程方法

光说概念可能不太好理解

我举个例子奥

正常我们在java中做远程调用可能是这样的:

代码语言:javascript
复制
//创建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组件调用远程方法是这样的:

代码语言:javascript
复制
// 远程接口服务在注册中心注册的服务名
@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

我是浩说

帮你入门到放弃

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档