【SpringCloud】什么是微服务?

news2024/12/25 13:54:20

一、单体架构 

单体架构就是把所有业务模块编写在一个项目,最终打包成一个 war 包,进行部署

单体架构的优点:

部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可

技术单一:项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发

用人成本低:单个程序可以完成业务接口到数据库的整个流程

单体架构的缺点:

系统启动慢,一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动,重启周期边长

系统错误隔离性差,可用性差,任何一个模块的错误可能导致整个系统的宕机

可伸缩性差,系统的扩容只能对整个应用扩容,不能做到对整个功能点进行扩容

线上问题修复时间长,任何一个线上问题修复需要对整个应用系统进行全面升级

二、微服务架构 

微服务是一种架构模式,将整个系统拆分成多个服务的架构,服务之间相互协调

每个服务都有独立的生命周期,可以单独的维护和部署,各个业务模块之间是松耦合的

若对系统进行升级扩展,只需要为额外的组件部署,不需要部署一个完整的系统即可完成更新迭代

微服务的优点:

开发简单:每个服务完成独立的功能

技术栈灵活:可以选择不同的语言完成不同的服务,发挥各种语言的最大优势

服务独立无依赖:每个服务都可以独立部署,一个服务出现问题不会导致整个系统瘫痪

独立按需扩展:以应对高并发大流量

可用性高:当其中一个点出现问题时,能够及时切换,不影响业务的正常运行

复杂应用解耦为小而众的服务:拆分可以基于一定的原则,将耗时的应用解耦

各服务精而专:也就是常说的专人干专事,映射到微服务中就是专服务干专事

服务间通信通过 API 完成:选择轻量的 API 通信 

微服务的缺点:

多服务运维难度:服务的增加意味着运维的难度,如何有效管理是一个挑战 

系统部署依赖:当业务复杂时,系统之间的耦合关系高度耦合,如何高效部署是一个挑战 

服务间通信成本:包括网络延迟、接口不可用性等,保证服务的高可用性是一个挑战

数据一致性: 各个服务间如何有效的共享数据,确保相应服务的数据一致性是一个挑战

系统继承测试:拆分后,需要测试的内容成倍的增加,如何高效降低测试成本是一个挑战 

重复工作:服务拆分之后,由于信息的不对称导致的重复性工作,如何有效抽象是一个挑战 

性能监控:原本只需要一个监控的部分,现在需要分开监控,如何快速定位问题是一个挑战 

沟通成本的成倍增加:服务拆分后,各个服务由专人来维护,如何高效沟通是一个挑战 

参考资料:《微服务架构实战》—— 张锋 

一  叶  知  秋,奥  妙  玄  心 

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

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

相关文章

世界这么大,极米投影仪RS Pro 3任意门带你“云旅游”

在繁忙的工作之后,许多小伙伴选择出门旅游,但也有不少人想在家“躺平”。其实,对于当代年轻人来说,行走在钢筋混凝土丛林,在家用智能投影观影娱乐好好放松身心也是不错的选择。有一台投影仪来相伴,能够抚平…

Let’s xrOS 一款让你优先体验社区创作者的 visionOS App工具

Let’s xrOS Apple Vision Pro 发布预示着空间计算时代的到来,让科技爱好者和开发者开始思考如何在新的交互、系统和硬件上打造独特的三维应用。 自 WWDC 2023 的发布会后,社交媒体上涌现了许多精美的 visionOS App 的效果图和演示视频,然而…

Mac安装配置typescript及在VSCode上运行ts

一、Mac上安装typescript sudo npm install -g typescript 测试一下:出现Version则证明安装成功 tsc -v 二、在VSCode上运行 新建一个xxx.ts文件,测试能否运行 console.log("helloworld") 运行报错:ts-node: command not…

【无标题】学习HTML

由于工作需求,学习了一些html的相关知识,最终应用到打印功能上使用。 HTML是指超文本标记语言(HyperText Markup Language)。它是一种用于创建和呈现互联网上页面的标准标记语言。HTML是Web开发的基础,是构建网页和应…

关于SseEmitter(SSE)在本地可以响应,部署到服务器后无法响应的问题

关于SseEmitter(SSE)在本地可以响应,部署到服务器后无法响应的问题 GetMapping(value "/v3/detail", produces MediaType.TEXT_EVENT_STREAM_VALUE) ResponseBody public SseEmitter v3Detail(String id) {SseEmitter emitter new SseEmitter((long) …

探究Kafka原理-2.Kafka基本命令实操

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

【开源】基于JAVA的高校实验室管理系统

项目编号: S 015 ,文末获取源码。 \color{red}{项目编号:S015,文末获取源码。} 项目编号:S015,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

2023年第十六届中国系统架构师大会(SACC2023)-核心PPT资料下载

一、峰会简介 本届大会以“数字转型 架构演进”为主题, 涵盖多个热门领域,如多云多活、海量分布式存储、容器、云成本、AIGC大数据等,同时还关注系统架构在各个行业中的应用,如金融、制造业、互联网、教育等。 与往届相比&#…

StarRocks 算子落盘:让大查询又快又稳

内存是对数据库非常重要的数据存储介质,它承载了所有查询计算的请求,在提升性能、实时分析等场景都有着重要的作用。正是由于内存如此重要,经常会遇到内存不够的情况,从而导致查询被强制终止,甚至对线上其他查询性能产…

UML建模图文详解教程04——对象图

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著 对象图 对象图(object diagram)显示了某一时刻的一组…

OSG动画与声音-动画(3)

动画 动画是一种常见的动画形式(Frame ByFrame),其原理是在连续的关键帧中分解动画动作,从另一个方面来说,也就是在时间轴的每帧上逐顿绘制不同的内容,使其连续播放而形成动画。 因为帧动画的帧序列内容不一样,不但给制…

通过 OGNL 注入执行 Confluence 预身份验证远程代码 (CVE-2022-26134)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 02 年 2022 月 <> 日&#xff0c;Atlassian 发布了针对其 Confluence Server 和 Data Center 应用程序的安全公告&#xff0c;强调了一个严重严重的未经身份验证的远程代码执行漏洞。…

java项目之网络在线考试系统(ssm)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络在线考试系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; &#xff08;1&#xff09;登录…

python如何快速查找到想要的文档

字多不看版&#xff0c;直接体验 待补充 演示代码 # -*- coding:UTF-8 -*-# region 导入必要的依赖包 import os import subprocess from enum import Enum模块名 pyperclip try:import pyperclip # 需要安装 pyperclip 模块&#xff0c;以支持粘贴板操作 except ImportEr…

Java零基础——SpringMVC篇

1.SpringMVC介绍 SpringMVC是Spring框架中的一个组件&#xff0c;是一个轻量级的web的MVC框架&#xff0c;充当controller,其本质就是一个Servlet。 1.1 传统Servlet的不足 每个请求&#xff0c;都需要定义一个Servlet。虽然可以在service方法中&#xff0c;根据业务标识进行…

「Verilog学习笔记」 输入序列不连续的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 题目要求检测a的序列&#xff0c;a为单bit输入&#xff0c;每个时刻可能具有不同的值&#xff0c;且并不是每一个数据都是有效的&#xff0c;需要根据data_valid信号进行判…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger脚手架

swagger-boostrap-ui从1.x版本到如今2.x&#xff0c;同时也更改名字Knife4j 在此记录下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;无需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已经包含。 官方版本说明…

软件系统测试有哪些测试流程?系统测试报告编写注意事项

在软件开发的过程中&#xff0c;系统测试是至关重要的一环&#xff0c;它的目的是验证和评估软件产品是否符合预期的质量标准&#xff0c;以确保系统的稳定性、可靠性和安全性。 一、软件系统测试的测试流程 1、需求分析与测试计划制定&#xff1a;根据需求分析确定测试目标、…

C++ 问题 怎么在C++11标准语法中调用C++20的类

一. 问题 在工作中,因为一个算法功能需要跟别的部门对接,他们提供了该算法的头文件.h,静态库.lib,动态库.dll。但是头文件中使用了C++20才有的新特性,如#include等,而本地使用的vs2015开发环境,只支持C++11标准语法,这种情况下,该怎么把该算法集成到本地项目中呢? …

前端已死?看看我的秋招上岸历程

背景 求职方向&#xff1a;web前端 技术栈&#xff1a;vue2、springboot&#xff08;学校开过课&#xff0c;简单的学习过&#xff09; 实习经历&#xff1a;两段&#xff0c;但都是实训类的&#xff0c;说白了就是类似培训&#xff0c;每次面试官问起时我也会坦诚交代&…