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

目录

前言:

架构风格: 

单体架构:

分布式架构:

微服务:

总结:


前言:

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

 

架构风格: 

单体架构:

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

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

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

相关文章

2024年能报考的人工智能行业有哪些证书呢?

近期工信部颁发的两个证书现在正在报考中,大家可以参考下: 《计算机视觉处理设计开发工程师》中级 2024年1月24日至28日-北京 《自然语言与语音处理设计开发工程师》中级 2024年2月29日-3月4日-上海 证书益处: 1.含金量高:…

JSP内置对象(9大内置对象和4种作用域)

JSP(JavaServer Pages)是一种用于开发动态Web应用程序的Java技术,它提供了一组内置对象和作用域,用于在JSP页面中访问和处理数据。 JSP的9大内置对象 request(请求对象):代表客户端的HTTP请求&…

统信UOS命令行设置未签名软件安装权限

原文链接:统信UOS命令行设置未签名软件安装权限 hello,大家好啊!今天我要给大家介绍的是在统信UOS操作系统上通过命令行设置安全中心应用安装权限的方法。在某些情况下,用户可能需要安装未经官方签名的软件包。虽然这可以提供更多…

第1章 引言

目录 1. 鸢尾花分类1.1 初识数据1.2 衡量模型是否成功:训练数据与测试数据1.3 要事第一:观察数据1.4 构建第一个模型:k近邻算法(KNeighborsClassifier)1.5 做出预测(predict)1.6 评估模型 1. 鸢…

Anaconda定制Python编程并打包

本文主要介绍如何使用Anaconda定制一个Python编程环境并打包,方便编程环境迁移。 文章参考 谢作如 邱奕盛两位老师的《为信息科技教学定制一个Python编程环境》 * 开发不同的项目需要不同的库(甚至不同版本),把所有的库安装到一…

【Python】使用tkinter设计开发Windows桌面程序记事本(1)

下一篇: 记事本介绍 电脑记事本是一种简单的文本编辑器,用于在电脑上创建、编辑和存储文本文件。它通常被用作轻量级的文本编辑工具,适用于简单的文本编辑任务,如写日记、做笔记、编写代码等。以下是对电脑记事本的详细介绍&…

mysql生成到当前时间的时间序列,报表按时间补0

生成本月每日的时间序列 SELECT DATE_FORMAT(date_add( CONCAT(YEAR(Date(curdate())),‘-0’,MONTH(Date(curdate())),‘-’,‘01’), INTERVAL ( cast( help_topic_id AS signed) ) DAY ) ,‘%Y-%m-%d’ ) FROM mysql.help_topic WHERE help_topic_id < DAY ( curdate( ) …

理解接雨水算法

一、IDEA注释显示图片 在做题时&#xff0c;需要对照这图片&#xff0c;才能更好的梳理思路。 首先&#xff0c;注释里添加<img/>标签 之后&#xff0c;将鼠标光标放置在需要以阅读模式预览注释的地方&#xff0c;然后按快捷键CtrlAltQ即可 二、接雨水算法 先看接雨水…

Zustand 状态管理

Zustand 状态管理 安装创建 Store给 Store 添加TS类型约束在页面使用 Store返回 Store 中所有状态在 Store 中使用 async 异步方法使用 Immer Middleware (中间件) 更新深层嵌套的 State使用 get 方法&#xff0c;在 set 方法外访问 State 中的数据使用 selector什么是 selecto…

Python猜数游戏

文章目录 1 Game Rule2 Code3 Result 1 Game Rule 猜数字游戏目的是猜测出程序想出的数字&#xff0c;基本逻辑&#xff1a; 程序随机选择1到100之间的一个数字或任何其他数字组合&#xff1b; 然后它会要求玩家输入它的建议&#xff1b; 然后它会检查这个数字是否与计算机随…

全网独家:基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机极简版数据库容器

本文尝试基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机版极简版数据库容器。 一、软件包源 1、openEuler-20.03-LTS容器底包 openEuler-20.03-LTS-SP4 下载链接 sha256:24d8f51c1f3a79eb975c4e498cadd9055bfd708d66c15935ec46664d0f975a7b openEuler-dock…

计算机网络—— 概述

概述 1.1 因特网概述 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网&#xff08;或互连网&#xff09;。因特网&#xff08;Internet&#xff09;是世…