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

目录

前言:

架构风格: 

单体架构:

分布式架构:

微服务:

总结:


前言:

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

 

架构风格: 

单体架构:

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

【苍穹外卖】_我是一盘牛肉的博客-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.mzph.cn/news/612034.shtml

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

相关文章

未完成销量任务的智己汽车突发大规模车机故障,竞争压力不小

2024年刚开年,智己汽车便上演了一出“开门黑”。 近日,不少车主在社交平台发帖,反映智己LS6出现大规模车机故障,包括但不限于主驾驶屏幕不显示车速、档位、行驶里程,左右转盲区显示失效,无转向灯、雷达提醒…

ThreadLocal如何使用详解

ThreadLocal概述: ThreadLocal是Java中的一个线程局部变量工具类,它提供了一种在多线程环境下,每个线程都可以独立访问自己的变量副本的机制。ThreadLocal中存储的数据对于每个线程来说都是独立的,互不干扰。 使用场景&#xff1a…

Linux最常用的几个系统管理命令

文章目录 Linux最常用的几个系统管理命令查看网络信息的原初 ifconfig默认无参数使用-s显示短列表配置IP地址修改MTU启动关闭网卡 显示进程状态 ps语法几个实例默认情况显示所有进程查找特定进程信息 任务管理器的 top常规使用显示完整命令设置信息更新次数设置信息更新时间显示…

树莓派非常实用的程序-2 vcgencmd

vcgencmd 工具用于从Raspberry Pi上的VideoCore GPU输出信息。您可以在 https://github.com/raspberrypi/userland/tree/master/host_applications/linux/apps/gencmd[Github].上找到 vcgencmd 实用程序的源代码。要获取支持的所有 vcgencmd 命令的列表,请使用 vcge…

vbs读取数据库值前端FlexGrid前导0出不来的原因

vbs读取数据库值前端FlexGrid前导0出不来的原因 原因 系统设置问题 解决 修改系统默认数值显示: 1)控制面板找到“区域”,点击“更改日期、时间和数字模式”,在弹出窗口点击“其他设置” 2)在数字一栏中的“显示前…

AirBrush - AI 照片编辑器

​【应用名称】:AirBrush - AI 照片编辑器 ​【适用平台】:#Android ​【软件标签】:#AirBrush ​【应用版本】:6.0.1 ​【应用大小】:270MB ​【软件说明】:谁说我们的照片不能完美?我们相信…

Hello 2024

Hello 2024 A. Wallet Exchange 题意:Alice和Bob各有a和b枚硬币,每次他们可以选择交换硬币或者保留,然后扣除当前一枚手中的硬币,当一方没得扣另一方就赢了。 思路:Alice先手,所以当硬币和为奇数时Alice…

Centos7升级openssl到openssl1.1.1

Centos7升级openssl到openssl1.1.1 1、先查看openssl版本:openssl version 2、Centos7升级openssl到openssl1.1.1 升级步骤 #1、更新所有现有的软件包列表并安装最新的软件包: $sudo yum update #2、接下来,我们需要从源代码编译和构建OpenS…

java基本类型与包装类型之间的关系

JAVA基本类型和包装类型 前言 Java语言中的数据类型分为基本数据类型和引用类型,而我们进行Java开发的时候都听说过基本数据类型和包装类型,今天我们就来详细聊一聊Java中的基本数据类型和包装类型之间的区别。 基本数据类型 Java中的基本数据类型一共有…

网工内推 | 上市公司网工,NP认证优先,最高15薪+项目奖金

01 广东轩辕网络科技股份有限公司 招聘岗位:网络工程师 职责描述: 1、主要负责教育行业园区网的有线及无线网络项目的实施、维护、巡检等工作; 2、协助windows/linux平台服务器OS的安装、部署、配置与维护; 3、协助服务器、存储、…

Fluids —— Minimal fluid setups

目录 Waterline FLIP Boundary Boundary flow 创建流体设置的三个基本方法; Waterline 由FLIP Container SOP与FLIP Solver SOP组成的基本network,可不需要任何外部源; FLIP Container SOP,能使用不同的容器形状;F…

真心建议,幼师姐妹刷到一定要存下啊

幼师姐妹还不知道?但凡早点发现这个好东西,我也不至于天天加班写各种报告了啊,真的写什么都行,什么总结,教案,评语,日报等等 都能写啊!!!

使用FFmpeg+EasyDarwin搭建音视频推拉流测试环境

1. 前言 在上一篇文章《使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)》中,我们讲解了如何搭建FFmpeg源码编译和调试环境。 调试FFmpeg,还需要搭建流媒体服务器。流媒体服务器的作用是通过网络对外提供音视频服务…

export default 和exprot

1.默认导入和默认导出 语法: export default {需要输出的内容} 接收: import 成员变量的名字 from 文件夹的路径 案例: a.mjs文件夹下默认导出 export default{a:10,b:20,show(){console.log(123);} } 在b.mjs文件中用成员变量进行接收 import AA from &q…

Vue 自定义仿word表单录入之单选按钮组件

因项目需要&#xff0c;要实现仿word方式录入数据&#xff0c;要实现鼠标经过时才显示编辑组件&#xff0c;预览及离开后则显示具体的文字。 鼠标经过时显示 正常显示及离开时显示 组件代码 <template ><div class"pager-input flex border-box full-width fl…

Arthas CPU 火焰图技术 简谈

1.基础命令 help 作用 查看命令帮助信息&#xff0c;可以查看当前 arthas 版本支持的指令&#xff0c;或者查看具体指令的使用说明。cat 作用 打印文件内容&#xff0c;和linux里的cat命令类似&#xff0c;如果没有写路径&#xff0c;则展示当前目录下的文件 使用参考 cat /t…

Linux离线安装MySQL(rpm)

目录 下载安装包安装MySQL检测安装结果服务启停MySQL用户设置 下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 下载全量包如&#xff1a;(mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar) 解压&#xff1a;tar -xzvf mysql-8.1.0-1.el7.x86_64.…

web前端案例之抽奖

使用HTMLJavascript完成抽奖案例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}</style></head><body><div id"container" onclic…

xinput1_4.dll缺失了怎么办?快速修复xinput1_4.dll文件的方法指南

在快速发展的数字时代&#xff0c;电子设备尤其是电脑成为了我们生活工作中必不可少的工具。然而&#xff0c;在使用过程中&#xff0c;我们可能会遇到各式各样的技术问题&#xff0c;其中一个常见问题是系统提示缺少 xinput1_4.dll文件。这个错误通常会在你尝试运行一个游戏或…

爬虫网易易盾滑块及轨迹算法案例:某乎

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址&#xff0c;浏览器打开网站&#xff0…