springcloud微服务系列教程(一) 什么是微服务?为什么要用springcloud?

2023-11-18

前言  

  这两年,“微服务”一词被传得很火,关于微服务的文章在各大技术论坛和博客不断的兴起,不断被转发和评论,技术人员之间的交流也越来越多的青睐微服务这一话题,仿佛不懂微服务就不是一个合格的技术开发者,就连有些公司招聘的要求上都要求应聘者必须掌握至少一门开发“微服务”技术,所以,借着这股东风,笔者前阵子专门学习了一段时间的springcloud,也就是如今最火的微服务框架 (这么说也好像不全对),并在这里开设了一个系列课程来介绍springcloud,希望各位读者多多指教~

 

什么是微服务

既然springcloud是专门用于开发“微服务”的,那么首先我们来了解一下,什么是“微服务”?

微服务(microservice) 一词最早由Martin Fowler与James Lewis于2014年共同提出来的,它是一种新的软件架构风格,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是送耦合的,通过RPC或者是Rest协议来进行通信,可以按照业务领域来划分成独立的单元,比如一个电商系统可以分割成会员、订单、商品等不同的小型服务,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。

 

什么是springcloud?

springcloud是由著名的spring团队基于Java语言设计的用于开发微服务应用的一系列组件集合(额。。。以笔者的知识水平,只能这么定义了),它依赖于springboot,拥有非常多的组件,涉及到了微服务的方方面面。springcloud诞生的时间并不长,正式推出第一版的时间是2015年,距今也就三年多一点的时间,但springcloud已经足够强大,知名度也越来越高,随着Netflix等社区的大力推动下越来越完善,将来很大可能会成为微服务的开发标准。

 

为什么要用springcloud来开发微服务项目?

如果要用一句话来说明为什么springcloud在微服务领域那么广受欢迎的原因,那就是springcloud的组件几乎涵盖了微服务开发中的方方面面,也就是说微服务所需的技术支持springcloud的组件都能提供。

按照Martin Fowler 给出的定义:微服务中的“服务”是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP 这种轻量级的通信机制进行通信。基于这样的说法,微服务应该具有以下的特点:    

  • 体积较大,代码较多的大型应用划分成多个服务组件,单个服务代码量小,易于维护;
  • 每个服务能独立部署,也就意味着服务有自己的基础组件,比如数据库,缓存等;
  • 服务之间松耦合,用http或者rpc协议等通信方式进行通信,且具有容错能力;
  • 单个服务能够集群部署;
  • 整个微服务系统有链路追踪的能力,万一其中一个服务挂了影响其他服务可以通过链路查找;
  • 整个微服务系统有一整套安全机制,包括安全校验等;

从这几点可以看出,微服务系统的技术要求是很高的,可以这么说,在springcloud推出之前,市面上是没有一套完整的技术框架能满足微服务开发的要求的 (强如阿里官方推出的dubbo,也存在着很多技术实现上的缺陷),那么springcloud为什么这么受大家青睐呢?原因是因为springcloud提供了一系列组件,这些组件几乎可以满足微服务开发需求中的所有技术要求,只需要技术人员按照自己的业务需要来搭建即可。

下面为大家介绍一个springcloud的常用组件,以及它们的功能。

服务注册和发现组件:Eureka。利用Eureka组件可以很轻松实现服务的注册和消费,一般是搭建一个eureka的注册中心,可以让其他服务在上面注册,并以此作为通信中介来管理微服务之间的联系。

服务的负载均衡:Ribbon。通过和Eureka、Zuul等组件进行搭配,很容易对服务做负载均衡,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡算法,选择一个服务提供者的实例,向该实例消费。

服务的熔断器:Hystrix。在微服务实际项目中,服务之间的调用错综复杂,可能一个服务因为某种原因不可用,然后第二个调用它的服务就处于阻塞状态,然后调用第二个服务的其他服务也不可用,以此类推,会给项目运行带来很严重的后果,基于此种情况,Hystrix继承了分布式系统的熔断器机制,作用就是当用户请求一个服务的失败次数超过一定的阈值后,熔断器会自动启动,停止所有的服务,同时,Hystrix还提供了服务降级功能以及熔断器的健康监测。

路由网关组件:Zuul。内部的API的接口通过Zuul暴露给外界使用,内部的服务调用不直接提供API接口,这样做的好处是可以隐藏内部服务,直接通过网关层来做控制调用哪个服务实例。同时,网关层也可以做一些安全验证,防止非法的请求操作API接口,安全而且容易维护。

服务配置中心:Spring Cloud Config。多个微服务有各自的配置文件,随着服务的增加,配置文件的数量也在不断增多,这时候需要有一个配置中心来统一管理,启动服务实例后直接访问配置中心即可。Spring Cloud Config 包括Server端和Client 端, Server 端读取本地仓库或者远程仓库的配置文件,所有的Client 向Server 读取配置信息,从而达到配置文件统一管理的目的。

链路追踪:Spring Cloud Sleuth。微服务系统中各个服务的调用关系错综复杂,所以微服务系统必须有追踪链路的功能,通过Sleuth可以实时跟进用户的请求有哪些服务参与,出了问题能够马上定位。

安全模块组件:Spring Cloud Security。是对Spring Security 的封装,通常配合0Auth2使用来保护微服务系统的安全。

通过搭配使用上面的组件,一个简单但功能完整的微服务系统就诞生了,架构图如下图所示:

               

   springcloud还有很多功能强大的组件,几乎可以说解决了人们对微服务系统的所有需求,所以,springcloud的火爆也就不难理解了 ,因为篇幅的问题,本文只是讲解了微服务系统和springcloud的一些基础简介,在接下来的系列课程中,笔者会一一给大家展示springcloud的组件使用,期待读者们能跟我一起学习~~

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springcloud微服务系列教程(一) 什么是微服务?为什么要用springcloud? 的相关文章

随机推荐

  • Keras实现LeNet网络参考

    模型论文地址 Yann LeCun 1998 的论文 Gradient Based Learning Applied to Document Recognition 用于MNIST数据集 模型结构说明 输入为32X32的灰度图像 第一层为6
  • 构造函数必须是public吗_谈谈 constructor 的private和public

    class TestClass http Http constructor http Http this http http 公有 私有于受保护的修饰符 默认为 public 在上面的例子里 我们可以自由访问程序里定义的成员 在TypeSc
  • mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)

    很多小伙伴在自己的服务器上面安装了mysql 然后发现自己把服务器中的mysql服务打开 然后防火墙也关掉了 但是就是连接不上 然后使用用户登录 密码也输入正确但是就是连不上 并且提示这个错误 这时候发现是因为host只设定了本地连接 需要
  • selenium4降级为selenium3

    find element by commands are deprecated Please use find element instead 针对selenium4弃用find element by 改用find element 用的实在
  • python环境搭建

    作者介绍 作者 小刘在C站 每天分享课堂笔记 一起努力 共赴美好人生 夕阳下 是最美的绽放 目录 一 python环境搭建 二 安装步骤 路径 步骤1 步骤2 步骤3 步骤4 编辑 三 是否成功安装python 四 注意事项 五 如何查看电
  • navicate的安装使用

    1 navicat概述 Navicat for MySQL 是管理和开发 MySQL 或 MariaDB 的理想解决方案 这套全面的前端工具为数据库管理 开发和维护提供了一款直观而强大的图形界面 官网 http www navicat co
  • C++入门AcWing讲义:字符串

    字符串是计算机与人类沟通的重要手段 闫学灿 字符与整数的联系 ASCII码 每个常用字符都对应一个 128 127的数字 二者之间可以相互转化 include
  • logback日志级别简介说明

    转自 logback日志级别简介说明 下文笔者将讲述logback的日志级别 如下所示 logback日志级别简介说明 logback有5种级别 其优先级依次如下所示 TRACE lt DEBUG lt INFO lt WARN lt ER
  • python使用字典暴力解析wifi密码

    前言 最近无wifi可用 搜到了很多高质量但是没有密码的WiFi 我在想应该可以用python调用常见的wifi字典包来暴力破解一下这些WiFi 也许可以成功 原理 使用pip install pywifi命令安装pywifi 在代码中设置
  • 基于Python3的接口自动化总结(一)——文件上传接口

    文件上传接口 api POST http host api import 接口入参 file 文件内容 import os import urllib3 import ast def import by rest self file pat
  • 原码,补码,反码的应用

    原码 补码 反码的应用 计算机专业的同学应该知道 课本中对原码反码补码的介绍大致是这样的几句话 正数 正数的原码是他的本身 正数的反码还是等于原码 正数的补码等于他的原码 负数 负数的原码等于该数值的二进制 最高位表示符号位 正数取0 负数
  • 微众银行马智涛:解放数据生产力,以金融科技助力数字经济发展|数字思考者50人...

    钛媒体2022特别专题策划 数字思考者50人 探访中国50位独具代表的数字化思考者 我们理解的 TechThinker 涵盖了中国数字化浪潮中的技术践行者 政策制定者与投资决策者 在这场长达10年的乘风破浪中 我们每个人都在分享技术进步的果
  • docker原理详解

    一 docker简介 docker是一个虚拟环境容器 可以将你的开发环境 代码 配置文件等一并打包到这个容器中 并发布和应用到任意平台中 docker容器和虚拟机都有虚拟隔离的特性 所以一般都会拿虚拟机和docker容器作比较 二 dock
  • C++数据结构 矩阵的转置、镜像及旋转

    C 数据结构 矩阵的转置 镜像及旋转 矩阵介绍 C 中的矩阵是一种二维数组 用于存储数值数据 矩阵可以用于存储图像数据 以及科学和工程计算中的数据 常用于以下场景 数学运算 矩阵乘法 行列式计算 特征值分解等 图像处理 图像缩放 旋转 颜色
  • facebook 审请AppID、AppSecret注意问题

    facebook https developers facebook com https developers facebook com apps 1596024967362217 dashboard 账号 密码 步骤 1 填入应用的包名
  • 文件夹上传到云服务器,文件夹怎么上传到云服务器上

    文件夹怎么上传到云服务器上 内容精选 换一换 RedisShake是一款开源的Redis迁移工具 支持Cluster集群的在线迁移与离线迁移 备份文件导入 但是部署在其他云厂商Redis服务上的Cluster集群数据 由于SYNC PSYN
  • MBR、GPT、LVM分区

    GPT分区 支持大于2T的空间分区UEFI系统 支持128个主分区 parted mklabel New disk label type gpt parted mkpart Partition name vdb1 File system t
  • 搭建zookeeper集群的时候报: JAVA_HOME is not set and java could not be found in PATH.错误

    我在搭建zookeeper集群的时候总是报 JAVA HOME is not set and java could not be found in PATH 的错误 但是我的java环境是没问题的 这个问题困扰我两天了 终于解决了 在此记录
  • 知道这20个正则表达式,能让你少写1,000行代码

    正则表达式 一个十分古老而又强大的文本处理工具 仅仅用一段非常简短的表达式语句 便能够快速实现一个非常复杂的业务逻辑 熟练地掌握正则表达式的话 能够使你的开发效率得到极大的提升 正则表达式经常被用于字段或任意字符串的校验 如下面这段校验基本
  • springcloud微服务系列教程(一) 什么是微服务?为什么要用springcloud?

    前言 这两年 微服务 一词被传得很火 关于微服务的文章在各大技术论坛和博客不断的兴起 不断被转发和评论 技术人员之间的交流也越来越多的青睐微服务这一话题 仿佛不懂微服务就不是一个合格的技术开发者 就连有些公司招聘的要求上都要求应聘者必须掌握