微服务架构基本原理学习笔记(一)

这篇具有很好参考价值的文章主要介绍了微服务架构基本原理学习笔记(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是微服务

  微服务是一种技术架构,通常我们可以把它理解为一组可以相互之间协同工作的应用程序或服务,这些应用程序或服务能够被单独部署到不同的服务器中,并且能够自主运行和维护。

  微服务技术只是一个名称而已,或许我们在日常工作中已经或多或少在使用其中的一种或几种技术和架构,但我们并没有将其称之为微服务。而且,对于微服务的大小和规模,也并没有严格的限制,也许几百行代码或者数个文件,也或者比这个规模更大一点,都没有关系。我们不应该在这一点上过多地纠结,而应该更多地去关心微服务到底解决了什么问题?这才是最主要的。

二、为什么需要微服务

  换句话说,微服务架构到底解决了什么问题?要回答这个问题,我们先对比一下单体架构(Monolith)与微服务架构(Microservice)。

单体架构

  在单体架构中,代码通常都放在一个代码库中,这就意味着所有的开发人员都必须基于同一个源代码库来工作。另外,单体架构的应用程序通常都运行在单一服务器或虚机中,并且数据被持久化到单个数据库。其优点是:

  1. 开发环境比较简单,所使用的技术栈统一。
  2. 所有的代码和资源都在同一个代码库中,容易查找和定位错误。
  3. 应用程序的部署和更新操作比较容易,我们只需要在一台服务器或虚机上替换掉旧的应用程序即可。

  单体架构有其自身的优点,如果你的应用程序符合这一定位并且运行良好,那么其实你完全没有必要使用微服务架构,或者说目前暂时还不需要。但是,当应用程序的规模不断增加时,问题就会逐渐被暴露出来。随着代码库变得越来越大,复杂性也会显著增加,其中积累的技术债也会越来越多,最终会导致代码变得难以维护,而且各个模块间的依赖关系也会非常复杂,往往一个小的功能调整也会涉及到许多代码的改动。

  另外一个问题就是单体应用程序的更新部署往往会导致服务的中断,从而影响到整个产品的用户体验和可用性。

  最后就是单体应用程序的功能扩展往往比较困难。当访问量增加时,我们除了增加服务器的配置和数量外(垂直扩展),无法简单地对程序进行横向扩展和功能扩充。这个时候你会发现,无论你采用何种技术栈,都无法摆脱单体架构本身所带来的这些问题,你所要考虑的是调整整个应用程序的架构,使其更符合敏捷开发模式的思维。

  有一点值得注意的是,我们需要将传统的分布式单体架构与微服务架构区别开来。

微服务架构基本原理学习笔记(一)

  所谓分布式单体架构,是指将组成应用程序的各个不同的模块或服务部署在不同的服务器或虚机中,它们都共享同一个中央数据库,彼此之间相互关联,形成一个紧耦合的结构。任何一个模块或服务的缺失都会导致整个应用程序无法正常工作。同时,这种结构也会给更新和部署带来挑战。

微服务架构

  在微服务架构中,我们将应用程序分解成足够小的部分,每一部分可以有自己独立的源代码库并且由不同的小型开发团队来进行开发和维护。就每一个微服务而言,其开发成本相对较低,随着项目的迭代,在必要的时候也可以丢弃某些微服务或者完全改写部分微服务。

  项目中的每一个微服务都可以自由选择所使用的技术和开发工具。你完全可以在其中一个微服务中使用关系型数据库,而在另一个微服务中使用文档型数据库。也可以在一个微服务中使用函数式编程语言(例如JavaScript或者Python),而在另一个微服务中使用面向对象编程语言(例如C#或Java)。每一个微服务的开发团队都可以自由选择最合适的技术。

  由于微服务之间是松耦合的,每一个微服务可以单独部署和运行,这样我们就可以实现整个应用程序的零宕机更新。而且如果有需要,每一个微服务也可以随时重新发布和更新,而不影响整个应用程序的运行。

  另外,根据需要我们也可以非常方便地对单个微服务进行扩展,从而将成本控制在最低。

  微服务架构的这些特性更加符合敏捷开发的原则,从而使得我们可以更快地适应不断变化的业务和需求。我想这也是为什么近年来微服务架构变得如此流行的原因之一。

  不过,在使用微服务架构之前,你需要首先了解下面这些你将要面对的挑战:

  1. 初始化并运行每个微服务,然后在整个应用程序的上下文中进行测试。由于每个微服务所使用的技术不同,运行的环境也千差万别,所以从下载源代码开始,你可能需要花费比较多的时间才能让这些微服务运行起来。考虑使用容器来自动完成所有这些预备步骤是一个不错的选择。
  2. 由于微服务之间的交互往往非常复杂,如果处理不当,你会很容易地陷入到多个微服务之间大量低效而冗长的通信陷阱中,这会导致整个应用程序性能低下。
  3. 虽然单个微服务的部署较为容易,但是当大量微服务同时工作时,手动部署和更新将变得更加低效和繁琐。因此,自动化部署将变得至关重要。
  4. 最后一点就是监控微服务的运行。我们当然不希望逐个地去检查每个微服务当前的运行状态,而是希望这些微服务能够自动报告它们的运行状况。因此,我们需要一种监控机制,能够让系统管理员在一个集中的地方查看所有微服务的运行日志和数据。

  不过,你不用太担心,有许多开源的软件和工具能够帮忙我们解决上述这些问题。

  Github上一个非常好的例子eShopOnContainers可以用来帮助我们学习和理解微服务架构。下面是这个项目的微服务架构图:

微服务架构基本原理学习笔记(一)

 文章来源地址https://www.toymoban.com/news/detail-457409.html

到了这里,关于微服务架构基本原理学习笔记(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang学习笔记_RabbitMQ的原理架构和使用

    实现了高级消息队列协议(Advanced Message Queuing Protcol)AMQP 消息队列中间件的作用(Redis实现MQ里面有写过,这里简单带过) 解耦 削峰 异步处理 缓存 消息通信 提高扩展性 RabbitMQ 架构理解 binding(绑定):交换机将消息路由给Queue所遵循的规则,可以定义一个路由键,用于交换机

    2024年04月24日
    浏览(32)
  • 《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理

    1.1.1 URI和URL ​ URI ,全称Uniform Resource Identifier,即 统一资源标志符 ; URL ,全称Uniform Resource Locator,即 统一资源定位符 。 ​ 举例来说,https://github.com/favicon.ico既是一个URI,也是一个URL。即有favicon.ico这样一个图标资源,用这样一个URI/URL指定了访问它的唯一方式,其中包括

    2024年02月03日
    浏览(35)
  • 微服务学习笔记-基本概念

    微服务 是一种经过良好架构设计的 分布式架构方案 。根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责 自治:团队独立、技术独立、

    2024年02月13日
    浏览(30)
  • 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件

    本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog 在以前的Databricks中,主要由Workspace和集群、SQL Warehouse组成, 这两年Databricks公司推出了Unity Catalog(UC)之后,整个Databricks架构都有了

    2024年02月20日
    浏览(41)
  • MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(二)栅极驱动参考

    栅极驱动参考 1.PWM直接驱动 2.双极Totem-Pole驱动器 3.MOSFET Totem-Pole驱动器 4.速度增强电路 5.dv/dt保护 1.PWM直接驱动 在电源应用中,驱动主开关晶体管栅极的最简单方法是利用 PWM 控制其直接控制栅极,如 图 8 所示。 直接栅极驱动最艰巨的任务是优化电路布局 。 如 图 8 中所示,

    2024年01月18日
    浏览(37)
  • 【服务治理①】软件架构服务治理的本质,当下最火的微服务到底是什么?利用AIGC学习微服务的第①弹

    治理讲究战术,自顶向下治理的方式、综合统筹的治理、分而治之的思想。服务治理就是治理服务(来自电源《年会不能停》解释名词的方法 😃),属于过程管理,即从服务的启动到服务的进行再到服务的终止期间发生的全生命周期的数据治理、规则管理、数据监控、安全

    2024年04月17日
    浏览(42)
  • 基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

    1.7.1 远程调用的问题 地址信息获取 : 服务消费者 如何获取 服务提供者 的 地址信息 (不能每次都写死): URL:http://localhost:8081/user/\\\"+order.getUserId() 多选一 :如果有多个服务提供者,消费者如何进行选择 监测健康状态 :消费者如何获知提供者的健康状态 1.7.2 eureka原理 地址

    2024年02月13日
    浏览(27)
  • Spark(一): 基本架构及原理

    前言:  目标: 架构及生态: Spark与hadoop:  运行流程及特点: 常用术语: Spark运行模式: RDD运行流程: Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等

    2024年01月21日
    浏览(35)
  • Quartz核心原理之架构及基本元素介绍

    Quartz是一个作业调度框架,它可以与J2EE和J2SE应用相结合,也可以单独使用。它能够创建多个甚至数万个jobs这样复杂的程序,jobs可以做成标准的java组件或EJBS。Quartz很容易上手,创建一个任务仅需实现Job接口,该接口只有一个方法void execute(JobExecutionContext context) throws JobExecu

    2024年02月05日
    浏览(30)
  • 5G网络入门基础--5G网络的架构与基本原理

    5G的网络架构及原理 5G应用的三大场景: eMBB(大带宽),uRLLC(高可靠,低时延迟),mMTC(超大连接),他们分别可以用于高速下载、无人驾驶、物联网等等方面,在不远的将来,这些技术将会彻底改变我们的生活。 一、5G的网络架构 5G的组网架构图如下,5G的组网架构是一种服务化的

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包