Spring 必会之微服务篇(2)

经过上一篇文章的介绍,应该对微服务有了基本的认识,以及为什么要用微服务和微服务要面临的挑战和对应的解决问题,这一期继续聊聊关于微服务的相关知识。

服务拆分

为什么拆

对于大多数的小型项目来说,一般是先采用单体架构,但是随着后面的用户规模变大,业务越来越复杂,维护成本变高,我们要逐渐拆分为微服务架构。但是在拆分的过程中可能会遇到很多代码的耦合问题,所以我们需要明确一个单体架构的项目如何一步步拆分为微服务项目,以及要遵循哪些原则;

拆分思想

“高内聚,低耦合”一直是项目开发的规范,拆分微服务的时候同样要按照这个原则来:

  • 高内聚:每个微服务的职责要尽量单一,包含的业务相关的互联度和完整度要高。
  • 低耦合:每个微服务的功能要相对独立,尽量减少对其他服务的依赖,或者依赖接口的稳定性要强。

“高内聚”首先是单一职责,但不能说一个微服务就只有一个接口,而是要保证微服务内部业务的完整性为前提。目标是当我们要修改某个业务的时候,最好只修改当前微服务,这样变更的成本就更低。一旦微服务做到了高内聚,那么之间的耦合度自然就降低了;

拆分方法

对于拆分的方式我们可以通过横向拆分纵向拆分两种方式:

  • 纵向拆分按照代码的功能模块进行拆分为一个个服务,这种拆分模式可以尽可能的提高服务的内聚性;
  • 横向拆分:看各个功能模块之间有没有公共的部分,如果有的话就抽取出来作为通用服务。这样可以提高业务的复用性,避免重复开发,同时通用业务一般接口的稳定性也很强,也不会使得服务之间过分耦合

服务注册和发现

当服务拆分之后,不可避免的会出现跨微服务的业务,比如某个服务业务中需要实现的逻辑在另一个服务才实现,此时微服务之间就需要进行远程调用(RPC),而远程调用对本质就是访问对应接口的 URL 发起请求然后获取响应,我们可以通过基于 Http 协议和 Dubbo 协议的方式实现 RPC,大部分情况下使用的是 Http 的方式,这种方式不关心服务提供者的具体技术实现,只要对外暴露 Http 接口就行了,更符合微服务的需要;

在 Java 中发送 Http 请求可以使用 Spring 提供的 RestTemplate ,使用的时候我们需要先注册 RestTemplate 到 Spring 容器中,然后再调用其 API 发起请求,以下是常见方法:

  • g

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word换行符和段落标记

换行符:只换行不分段 作用:我们需要对它进行分段,但它是一个信息群组,我希望它们有同样的段落格式! 快捷键:shiftenter 段落标记:分段 快捷键:enter 修改字体格式或段落格式 …

JSON|cJSON 介绍以及具体项目编写

一、JSON介绍 JSON(JavaScript Object Notation 即JavaScript对象表示法)是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。 JSON是一种数据交换格式.JSON独立于编程语言(你不必学习JavaScript).JSON表达数据的方式对通…

【LLaMA-Factory】使用LoRa微调训练DeepSeek-R1-Distill-Qwen-7B

【LLaMA-Factory】使用LoRa微调训练DeepSeek-R1-Distill-Qwen-7B 本地环境说明禁用开源驱动nouveau安装nvidia-smi安装Git环境安装Anaconda(conda)环境下载DeepSeek-R1-Distill-Qwen-7B模型安装LLaMA-Factory下载LLaMA-Factory安装LLaMA-Factory依赖修改环境变量安装deepspeedA…

初始图形学(7)

上一章完成了相机类的实现,对之前所学的内容进行了封装与整理,现在要学习新的内容。 抗锯齿 我们放大之前渲染的图片,往往会发现我们渲染的图像边缘有尖锐的"阶梯"性质。这种阶梯状被称为"锯齿"。当真实的相机拍照时&a…

vllm笔记

目录 vllm简介vllm解决了哪些问题?1. **瓶颈:KV 缓存内存管理低效**2. **瓶颈:并行采样和束搜索中的内存冗余**3. **瓶颈:批处理请求中的内存碎片化** 快速开始安装vllm开始使用离线推理启动 vLLM 服务器 支持的模型文本语言模型生…

访问网站提示“不安全”“有风险”怎么办?

访问网站提示“不安全”“有风险”有以下几种解决方案 一、理解警告类型 1.“不安全”提示(HTTP网站) 原因:网站未使用HTTPS加密,传输数据(如密码、支付信息)可能被窃取。 表现:浏览器地址栏显…

vue3的响应式设计原理

Vue 3 的响应式设计是其核心特性之一,依赖于 Proxy 和 依赖收集机制,相比 Vue 2 的 Object.defineProperty,Vue 3 的响应式系统更加高效、灵活且易于维护。 以下是 Vue 3 响应式设计的核心原理: 一、核心机制概览 使用 Proxy 实现…

C++模板笔记

Cpp模板笔记 文章目录 Cpp模板笔记1. 为什么要定义模板2. 模板的定义2.1 函数模板2.1.1 函数模板的重载2.1.2 头文件与实现文件形式(重要)2.1.3 模板的特化2.1.4 模板的参数类型2.1.5 成员函数模板2.1.6 使用模板的规则 2.2 类模板2.3 可变参数模板 模板…

递归函数(斐波那契数列0,1,1,2,3,5,8,13,21,34,55...)

目录 一、斐波那契数列(兔子问题) 二、迭代法(用while循环推下一项 ) 三、递归函数 (函数的定义中调用函数自身的一种函数定义方式) 四、递归函数的底层逻辑推理 (二叉树推倒最左下节点回退法) 一、斐波那契数列(兔子问题&…

光的本质(以暗物质维度粒子为介质的能量传导)

一、光的概要描述 1、光的本质是能量传导 空间中均匀分布着暗物质维度粒子。光不是粒子也不是波,而是没有质量和形态的能量,在临近暗物质粒子之间的一种能量传递。 2、光能传递类似牛顿钟摆(空间中的牛顿钟摆) 当光能能量骚动一个暗物质粒子后,该暗物质粒…

Open CASCADE学习|管道壳体生成

一、引言 在计算机辅助设计(CAD)和计算机图形学领域,OpenCASCADE 是一款功能强大的开源 3D 建模库。它提供了丰富的几何和拓扑建模工具,其中管道壳体(Pipe Shell)生成是其重要功能之一。管道壳体广泛应用于…

JS正则表达式介绍(JavaScript正则表达式)

文章目录 JavaScript正则表达式完全指南正则表达式基础元字符与特殊字符基本元字符. - 点号\d - 数字\D - 非数字\w - 单词字符\W - 非单词字符\s - 空白字符\S - 非空白字符 正则表达式标志常用标志详解g - 全局匹配i - 忽略大小写m - 多行匹配s - 点号匹配所有字符u - Unicod…

Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

目录 Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南 一、为什么 containerd 是趋势? 二、目标 三、前提条件 四、方式一:containerd nvidia-container-toolkit(基础方式) 1️⃣ 安装 NVIDIA Containe…

leetcode 2918. 数组的最小相等和 中等

给你两个由正整数和 0 组成的数组 nums1 和 nums2 。 你必须将两个数组中的 所有 0 替换为 严格 正整数,并且满足两个数组中所有元素的和 相等 。 返回 最小 相等和 ,如果无法使两数组相等,则返回 -1 。 示例 1: 输入&#xf…

猿人学第十二题-js入门

1. 链接 https://match.yuanrenxue.cn/match/12 2. 抓包分析 2.1. m参数 通过观察,只有m参数要解决: 3. 逆向分析 3.1. 跟栈 直接跟栈吧,一下就出结果了: 可以看到m其实很简单,就是固定字符串 当前页数&#xf…

双系统电脑中如何把ubuntu装进外接移动固态硬盘

电脑:win11 ubuntu22.04 实体机 虚拟机:VMware17 镜像文件:ubuntu-22.04.4-desktop-amd64.iso 或者 ubuntu20.4的镜像 外接固态硬盘1个 一、首先win11中安装vmware17 具体安装方法,网上很多教程 二、磁盘分区 1.在笔…

202535| Kafka架构与重要概念+幂等性+事务

好的!以下是关于 Kafka 架构 以及其 重要概念 的详细介绍,结合 Mermaid 图形 和 表格,帮助你更好地理解各个概念的关系和作用。 Kafka 架构与重要概念 Kafka 是一个分布式消息系统,广泛应用于日志收集、流处理、事件驱动架构等场…

从0开始学习大模型--Day05--理解prompt工程

提示词工程原理 N-gram:通过统计,计算N个词共同出现的概率,从而预测下一个词是什么。 深度学习模型:有多层神经网络组成,可以自动从数据中学习特征,让模型通过不断地自我学习不断成长,直到模型…

Amazing晶焱科技:系统级 EOS 测试方法 - System Level EOS Testing Method

系统上常见的EOS测试端口以AC电源、电话线(RJ11)、同轴电缆(coaxial cable)以及以太网络(RJ45)最常见,这些端口因有机会布线至户外的关系,受到EOS/Surge冲击的几率也大大提升。因此电…

数据结构—(概述)

目录 一 数据结构,相关概念 1. 数据结构: 2. 数据(Data): 3. 数据元素(Data Element): 4. 数据项: 5. 数据对象(Data Object): 6. 容器(container): 7. 结点(Node)&#xff…