【从零开始学习微服务 | 第一篇】什么是微服务

news2025/1/12 23:08:45

目录

前言:

架构风格: 

单体架构:

分布式架构:

微服务:

总结:


前言:

        在当今快速发展的软件开发领域,构建大型应用程序已经成为一项巨大的挑战。传统的单体应用架构往往难以满足快速变化的业务需求和不断增长的用户规模。这就引出了微服务架构:一种以服务为中心的解决方案,旨在解决这些问题并提供更灵活、可扩展的应用程序设计。

 

架构风格: 

单体架构:

        在我们以前开发项目的时候,会把所有的功能都集成在一个项目中开发,比如我们之前写的苍穹外卖,我们直接在整个项目内完成了所有的功能。

【苍穹外卖】_我是一盘牛肉的博客-CSDN博客

虽然单体项目的架构简单,部署成本低。但是在大型项目中,我们把所有的功能都内聚到一个项目的时候,就会造成代码的耦合程度高。而如果我们能够把这一个个功能独立的拆分为一个项目(服务),在我其他项目需要使用的时候,直接调用这个服务不就好了?其实这就是分布式架构的思想。

分布式架构:

        分布式架构将系统的不同部分分散到多个独立的计算机节点上,并通过网络连接这些节点进行通信和协作。在分布式架构中,不同的计算节点可以执行不同的任务,彼此交互以实现共同的目标。

常见的分布式架构包括微服务架构SOA架构RPC架构等。这些架构都是基于分布式系统设计的,可以帮助开发人员更好地管理和维护分布式系统。

 

通过分布式架构的设计,我们降低了各个服务之间的耦合度,那么我们的开发人员就可以专注的负责某一个服务模块的开发。而分布式架构项目的问题也很多,例如服务拆分的粒度,各个服务之间如何联系。

也就是说,虽然分布式架构的思路是好的,但分布式架构的设计却是一个难点,如何设计出好的分布式框架呢?

微服务:

        微服务是一种经过良好架构设计的分布式架构方案。

微服务架构的特点包括:

  1. 单一职责:每个微服务只关注一个特定的业务功能,它们之间相互解耦。

  2. 分布式部署:每个微服务都可以独立部署和升级,这样可以提高系统的灵活性和可伸缩性。

  3. 弹性和容错性:由于微服务是独立运行的,当某个微服务发生故障时,不会影响整个系统的运行。

  4. 独立团队开发:每个微服务可以由一个小团队独立开发和维护,使得团队间的沟通和协作更加简单。

  5. 技术多样性:不同的微服务可以使用不同的技术栈,选择最适合的工具来实现自己的功能。

换句话来说,微服务其实就是一套设计成熟的分布式架构设计方案。 

 而这种架构方案当然需要各种技术框架来落地支持,在国内比较知名的就是Spring Cloud和Dubbo。

特性DubboSpring CloudSpring Cloud Alibaba
开发语言JavaJavaJava
服务注册与发现ZooKeeper、Nacos等Eureka、Consul、ZooKeeper等Nacos、Consul等
服务调用方式RPC(远程过程调用)REST(Representational State Transfer)REST
服务网关Zuul、Spring Cloud GatewaySpring Cloud Gateway
配置中心Spring Cloud ConfigNacos Config
负载均衡客户端负载均衡客户端负载均衡(Ribbon)、服务端负载均衡(Spring Cloud LoadBalancer)Ribbon、Spring Cloud LoadBalancer
断路器Hystrix、Resilience4jSentinel
分布式追踪Spring Cloud Sleuth、ZipkinAlibaba Cloud SLS(日志服务)
消息总线Spring Cloud BusRocketMQ
服务熔断SentinelSentinel

总的来说,Dubbo是一个RPC框架,主要用于服务之间的远程调用。Spring Cloud是基于Spring Boot的微服务框架,提供了更丰富的组件和工具,支持服务注册与发现、负载均衡、断路器、配置中心等功能。Spring Cloud Alibaba是Spring Cloud的扩展,集成了阿里巴巴的一些开源组件,如Nacos、Sentinel、RocketMQ等,用于更好地支持云原生应用开发。 

最后,让我们在介绍一下微服务的核心组件:

  1. 服务注册与发现组件:

    • 服务注册:微服务架构中,每个服务都需要向一个注册中心注册自己的地址和元数据。注册中心充当了服务的目录,用于管理和维护服务实例的注册信息。常见的服务注册组件有Eureka、Consul、ZooKeeper和Nacos。
    • 服务发现:其他服务可以通过查询注册中心来发现并调用需要的服务。服务发现组件提供了查询接口,使得服务能够动态地获取到其他服务的地址和元数据。
  2. 负载均衡组件:

    • 负载均衡:微服务架构中的服务通常会有多个实例运行,负载均衡组件用于将请求均匀地分发到这些实例上,以实现负载均衡和高可用性。常见的负载均衡组件有Ribbon、Spring Cloud LoadBalancer和Nginx。
  3. 网关组件:

    • API网关:网关作为微服务架构对外暴露的入口,负责接收和处理外部请求。它可以处理身份验证、权限控制、流量管理、协议转换等功能,并将请求转发到后端的微服务实例。常见的网关组件有Zuul、Spring Cloud Gateway和Nginx。
  4. 配置中心组件:

    • 集中化配置管理:微服务应用中的配置信息通常是分散在各个服务实例中的,配置中心的作用是集中管理这些配置信息。配置中心组件提供了统一的配置管理接口,能够动态地推送配置变更给各个服务实例。常见的配置中心组件有Spring Cloud Config和Nacos Config。
  5. 消息队列组件:

    • 异步通信与解耦:在微服务架构中,服务之间需要进行异步通信,以实现解耦、削峰填谷等目标。消息队列组件提供了可靠的消息传递机制,服务可以将消息发送到消息队列,其他服务可以监听并消费这些消息。常见的消息队列组件有Kafka、RocketMQ和RabbitMQ。
  6. 分布式追踪组件:

    • 监控和调试:微服务架构中的调用链涉及多个服务实例,因此需要一个分布式追踪系统来监控和调试整个调用链。分布式追踪组件能够跟踪请求的流转路径,收集和展示调用链的性能指标和日志。常见的分布式追踪组件有Zipkin、SkyWalking和Jaeger。

由此我们可以看出,学习微服务实际上就是学习构成微服务的各个组件。

总结:

        当今软件开发领域中,微服务架构已成为最受欢迎的设计风格之一。它将应用程序拆分成独立的、可组合的服务单元,通过轻量级通信协议进行交互,从而实现可扩展性、弹性和灵活性等优势。在本文中,我们探讨了微服务架构的基本概念、原则和实践,并介绍了其核心组件,包括服务注册与发现、负载均衡、网关、配置中心、消息队列和分布式追踪等。这些组件共同协作,使得微服务架构具备高可用性、可扩展性和容错性等特性。总之,微服务架构是一种适用于大规模、复杂应用程序的优秀设计风格,值得开发人员深入学习和应用。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

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

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

相关文章

蓝桥杯练习题(三)

📑前言 本文主要是【算法】——蓝桥杯练习题(三)的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …

【Scala】——面向对象

1 Scala 包 1.1 包风格 Scala 有两种包的管理风格。 第一种 Java 的包管理风格相同,每个源文件一个包(包 名和源文件所在路径不要求必须一致),包名用“.”进行分隔以表示包的层级关系,如 com.atguigu.scala。另一种风…

Laravel 使用rdkafka_laravel详细教程(实操避坑)

一、选择rdkafka 首先要看版本兼容问题,我的是Laravel5.6,PHP是7.3.13,所以需要下载兼容此的rdkafka,去 Packagist 搜索 kafka ,我用的是 Packagist选择里面0.10.5版本, 二、安装rdkafka 在 Laravel 项目…

P4学习(一) 环境搭建

系列文章目录 第一章 P4学习入门之虚拟机环境搭建 文章目录 系列文章目录前言一、P4是什么?二、搭建步骤1.下载虚拟机镜像2.虚拟机管理软件载入镜像2.1 找到你镜像的所在位置2.2 打开VMware Workstation2.3 载入镜像 3.检验环境是否配置成功 P4 的真机环境搭建 前言…

计算机基础面试题 |21.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

OCP NVME SSD规范解读-6.标准日志要求-1

4.8 Log Page Requirements章节在NVMe规范中主要涵盖了设备应支持的日志页面(Log Pages)的要求。日志页面是存储控制器用于报告内部状态、性能统计和其他关键信息的结构化数据区域,它们对系统管理和故障诊断至关重要。 本文,我们…

【LeetCode】组合两个表(mysql)

题目 编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。 以 任意顺序 返回结果表。 结果格式如下所示。 答 select firstName ,lastName,city,state from Person left join Address …

【JaveWeb教程】(17) MySQL数据库开发之 MySQL简介、安装、数据类型、SQL通用语法 详细代码示例讲解

目录 前言1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式(了解) 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 前言 在我们讲解SpringBootWeb基础知识(请求响应案例)的时候,我们讲到在web开发中,为了应用程序职责单一&…

基于深度学习的老照片修复系统

技术栈 深度学习 pytorch tensorflow python 卷积神经 神经网络 照片修复 vue 老照片修复 扫描褪色 残损照片或胶片 调整暗调/高光以改善面效果 修正曝光斑痕 背景: 随着时间的流逝,许多老照片可能会褪色、损坏或曝光不当。这些老照片记录了宝贵的回忆…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-3Phase Portrait相图,相轨迹

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-3Phase Portrait相图,相轨迹 1. 1-D2. 2-D3. General Form4. Summary 1. 1-D 2. 2-D 3. General Form 4. Summary

牛刀小试 - C++ 实现2048(可存档)

参考文档 借助了这位大佬的开发思路, 开发过程中学到了很多 C语言实现《2048游戏》 技术点: system调整控制台大小的问题 unsigned and 符号位 C对齐输出(左对齐和右对齐) C goto语句详解 完整代码 /********************…

报错解决方法——http404(Spring MVC)

一.检查静态资源是否加载成功 成功的标志就是在项目跑起来之后再target文件夹中的classes文件夹中可以找到自己写的配置文件。 1.查看resources文件夹是否被识别为资源文件夹 如图所示,文件夹图标右下角有三条杠代表被识别为资源文件 2.在pox.xml文件中插入如下…

打造VR数字乡村文旅新品牌,VR全景技术助力乡村振兴

新年伊始,各地乡村特色产业都在蓬勃发展,让冬日里的乡村重新焕发了新的活力。并且在这个冬季,各地还依托生态资源优势,打造智慧乡村文旅新品牌,激活乡村消费活力,例如有些乡村利用空心村,打造多…

Apache Doris 入门 10 问

基于 Apache Doris 在读写流程、副本一致性机制、 存储机制、高可用机制等方面的常见疑问点进行梳理,并以问答形式进行解答。在开始之前,我们先对本文相关的名词进行解释: FE:Frontend,即 Doris 的前端节点。主要负责接…

KEAZ128中MSCAN的同步时钟初始化失败已解决

文章目录 运行环境:MSCAN初始化成功代码初始化流程图初始化失败分析初始化异常原因 运行环境: MSCAN初始化代码(采用24MHz总线时钟当时不行,于是直接采用了外部晶振时钟16MHz) MSCAN初始化成功代码 void CAN_Init(uint_8 mode,uint_8 open…

泛域名和多域名https哪个性价比高

Sectigo已经成立了二十几年,随着互联网的快速发展,Sectigo旗下的https证书种类也逐渐增多,例如,代码签名证书、IP证书,但是Sectigo最多的是各种域名https证书——单域名https证书、多域名https证书和泛域名https证书。…

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》

【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第二部分流加密与CPA多重加密 CPA安全加密方案CPA安全实验、预言机访问(oracle access) 操作模式伪随机函数PR…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

题目描述: 解题思路: 创建两个栈,一个用于入数据,一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据,先检查popST中有无数据,如果有数据,就直接出。如果没…

从生活入手学编程(1):Edge浏览器设置自动刷新专业教程

一、前言 我们都知道,Edge浏览器运行时的速度卡的实在是感人…… 于是今天,我就突发奇想,来看一看怎么刷新并且还能保留页面内容。 二、探索 首先,我在此提醒您,在使用这种方法时要非常小心。因为更改网页源代…