SpringCloud 教程(一)| 微服务及五大神兽组件 --- 微服务架构
一、前言。
随着微服务技术的兴起,越来越多的项目都在使用 微服务架构,学习的趋势已经刻不容缓,这几天特意学习了一下,在此记录。
特别感谢 方志朋 老师的博客。https://blog.csdn.net/forezp/article/details/70148833
二、什么是微服务?
讲到微服务,只管概念 轻量化、零配置、开箱即用,对微服务了解的并不多,所以要深入一下。
微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”。
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的 RESTful API)。每个服务都围绕着具体业务 进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
简而言之,微服务架构是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并与轻量级机制(通常是HTTP资源的API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署。这些服务的集中化管理已经是最少的,它们可以用不同的编程语言编写,并使用不同的数据存储技术。
三、微服务架构优势?
- 复杂度可控:在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
- 独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。
- 技术选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。
- 容错:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。
- 扩展:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
四、SpringCloud和SpringBoot的关系?
SpringBoot:专注于快速方便的开发单个个体微服务(关注微观);
SpringCloud:关注全局的微服务协调治理框架,将SpringBoot开发的一个个单体微服务组合并管理起来(关注宏观);总结:
SpringCloud 和 Dubbo 很是类似,经常拿来比较。参考:https://blog.csdn.net/u010664947/article/details/80007767
SpringBoot可以离开SpringCloud独立使用,但是SpringCloud不可以离开SpringBoot,属于依赖关系
五、SpringCloud 分布式开发五大神兽。
- 服务发现——Netflix Eureka
- 客服端负载均衡——Netflix Ribbon
- 断路器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
具体讲解见:https://www.cnblogs.com/ilinuxer/p/6580998.html
六、个人理解。
Eureka 是分为 server 和 service , server 通常只有一个(多个可以提高高可用性及容错),service 有一般多个。service 通常都是单个 springboot 程序,启动时向 server 注册自己,这样,在 RestTemplate 或者 feign 调用时,不需要根据 ip 及 端口 去查找,只需要知道你这个 springboot 程序的 applic.name 即可(当ip地址多的时候,每启动一下就配置一次会很麻烦)。
Ribbon 一般结合 RestTemplate 去使用,RestTemplate 默认实现了 负载均衡,轮询机制,及多个相同 application.name 的程序,不同ip或端口,Ribbon 不需要知道你的ip和端口,只需要知道你在 Eureka server 注册的名字,便会 不断对具有相同名字的 程序进行轮询。
Hystrix 断路器,一般 Ribbon 去访问某个 程序应用时,这个程序挂掉了,此时如果没任何措施,可能引起连锁反应,最后导致不可想象的后果,而 断路器 的作用就是,当这个程序不可用时,及时切断之间联系,当程序恢复时,在保持关联。
Zuul 网关,他的作用类似 nginx 的反向代理,除此之外,还可以配置权限验证等。当后台有多个应用时,app或者前端程序想访问后端接口时,统一格式,否则程序一多便会出现混乱。
Spring Cloud Config 分布式配置,他的作用见名知意,通过 连接 git 或 mvn 等,实现统一的 文件配置,结合 spring cloud bus 可以实现动态的属性配置。
Spring Cloud 架构:
https://www.cnblogs.com/aspirant/p/8821636.html
史上最简单的 SpringCloud 教程 | 终章:
https://blog.csdn.net/qq_41497111/article/details/91047068
SpringCloud 教程(一)| 微服务及五大神兽组件 --- 微服务架构相关推荐
- SpringCloud五大神兽之Eureka服务注册(三)——Eureka的自我保护
一.ACID与CAP 传统ACID: A:atomicity 原子性 C:consistency 一致性 I:isolation 独立性 D:durability 持久性 目前流 ...
- SpringCloud五大神兽之Eureka服务注册(一)
一.什么是Eureka? 官方翻译:Eureka是一个基于Rest的服务,用于定位服务,以实现云端中间层服务发现和故障转移.即--Eureka主管服务的注册与发现. 在微服务架构中,只需要使用服务的标 ...
- 4A服务按库拆分|组件、服务|合并打包、独立打包(进行中)
文章目录 1.说明: 2.总结(收获和感受) 3.实现 4A-server-api:定义接口,注入时通过该api实现注入:共用的常量.异常.工具类 4A-element-server服务(也可以作为组 ...
- SpringCloud微服务:基于Nacos组件,整合Dubbo框架
源码地址:GitHub·点这里 || GitEE·点这里 一.基础组件简介 1.Dubbo框架 Dubbo服务化治理的核心框架,之前几年在国内被广泛使用,后续由于微服务的架构的崛起,更多的公司转向微服 ...
- SpringCloud学习笔记3:Spring Cloud Netflix 组件(五大神兽)
一.Spring Cloud Netflix有哪些组件? eureka (提供服务注册与发现功能) ribbon(提供负载均衡功能) Feign(整合了ribbon和Hystrix,具有负载均衡和熔断 ...
- springcloud五大神兽之Eureka介绍
一.springcloud简介 1.0 什么是微服务? ① 业务角度 从业务角度分析,就是将整体项目(传统的一站式应用)按照业务拆分,将每个业务拆分为一个个独立的服务,彻底解除业务模块之间的耦合,每个 ...
- 业余草 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xmt1139057136/article/details/81411887 一.spring clo ...
- 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
最新Finchley版本请访问: https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 或者 http://blog.csd ...
- 最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
一.spring cloud简介 鉴于<史上最简单的Spring Cloud教程>很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEAS ...
最新文章
- XLNet:公平PK,BERT你已经被超过!
- (28)SpringBoot启动时的Banner设置【从零开始学Spring Boot】
- hive 集成oracle,hive集成kerberos问题1
- springcloud阿里巴巴五大组件_如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构
- [Robot Framework] 怎么做数学运算?
- qt5中服务器文件传输,POST在Qt5中发送JSON文件的请求
- python安装pip_解决Python安装下载及Python环境的配置(pip,flake8,yapf)
- 联合索引会创建几个索引_联合索引在B+树上的存储结构及数据查找方式
- 蓝桥杯2020年第十一届C/C++省赛B组第二题-既约分数
- 2019PMP项目管理考试报名时间取证流程-真题模拟题
- 南航理论计算机科学答案,专业认证理念下的计算机专业本科生培养管理模式研究——以南航计算机科学与技术专业为例...
- 精选150道iOS面试题
- iOS集成 Paypal 贝宝支付
- 四叶草python_标签:python - 四叶草
- 网络编程 3 tcp通信
- 中国十大电子商务网站排名揭晓
- Django - 应用及分布式路由
- m4a怎么转换成mp3格式?
- 最实用的网页设计素材打包下载[15G]
- mysql 表改名_MySQL库改名、表改名