Springboot/Springclound微服务架构

1.   什么是微服务?

  微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务之间是松耦合的,同时微服务之间,通常是采用轻量级的基于 HTTP 的 RESTful API通信机制互相沟通,互相配合。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境。

2.   微服务有什么特点?

(1).复杂度可控

在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。

(2).独立部署

独立部署由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。

(3).技术选型灵活

微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,所以需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。

(4).容错

当某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

(5).扩展

单块架构应用也可以实现横向扩展,当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

3. Spring Boot / Cloud 都做了那些事情?

(1).什么是 Spring Boot

Spring Boot使用了特定的方式来进行配置,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,从而使开发人员不再需要定义样板化的配置.  Spring Boot 不是什么新的框架,它默认配置了很多框架的使用方式,Spring Boot 简化了基于 Spring 的应用开发,通常我们想要集成的常用框架,它都有对应的组件支持,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用.

Spring Boot的核心功能 :

(1)  起步依赖

SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了,然后对于我们需要的某种功能添加起步依赖,起步依赖会进行依赖的传递,这些依赖组合在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

Spring  Boot配置文件的加载:

传递依赖时会依次从resources目录下加载application.yml和application.properties配置文件。

(2).自动配置

Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定 Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

SpringBoot可以简化开发的一个主要原因就是采用了默认配置,所谓约定大于配置就是这个意思。在没有自己指定配置的时候使用默认配置的原理,如若需要更改配置,则需要在application.properies或者application.yml配置中添加对应属性。

Spring Boot自动配置运行原理:

(1). SpringBoot项目运行类启动,就是添@SpringBootApplication注解的类。

先看@SpringBootApplication

  • @SpringBootConfiguration:标记当前类为主配置类
  • @EnableAutoConfiguration:开启自动配置
  • @ComponentScan:扫描主类所在的同级包以及下级包里的被注解的Bean

(2).自动配置的核心功能是由@EnableAutoConfiguration这个注解提供的。

@Import(AutoConfigurationImportSelector.class)导入的配置功能,

AutoConfigurationImportSelector里有一个selectImports方法,这个方法里有一个configurations,返回的configurations对象中包含待配置的class的类名集合。

在方法里调用了getCandidateConfigurations方法, 而这个方法里又调用了SpringFactoriesLoader下的loadFactoryNames方法, loadFactoryNames方法会扫描META-INF/spring.factories文件, 这文件列出了哪些需要自动配置。

但是自动配置类是否会被自动配置,还需要满足类上边注明的条件判断注解

这里使用非常常用的DataSourceAutoConfiguration类来做例子讲解一下自动配置的流程。首先进入这个类,可以上面的几个注解。简单介绍一下这几个注解的作用。

@Configuration注解:声明此类为配置类。

@ConditionalOnClass注解:判断classpath下是否存在后面指定的类,因为我这里没有引入对应的类,所以会报红,所以这个自动配置也并没有生效。

@EnableConfigurationProperties注解:启用ConfigurationProperties功能,这个注解后面指定的类就是需要映射属性到配置文件的属性类。这里的配置文件是指application.properties文件.(如若要修改默认配置,可在此配置文件添加自定义属性和值得键值对)

@Import注解:数据库配置相关的类,有的自动配置类时没这个注解的,比如RedisAutoConfiguration类,所以这个看具体情况,但是前面三个注解是必须的。

附:常见org.springframework.boot.autoconfigure.condition包下的条件注解意思

@ConditionalOnBean:当容器里有指定的bean的条件下。

@ConditionalOnMissingBean:当容器里不存在指定bean的条件下。

@ConditionalOnClass:当类路径下有指定类的条件下。

@ConditionalOnMissingClass:当类路径下不存在指定类的条件下。

@ConditionalOnProperty:指定的属性是否有指定的值,比如@ConditionalOnProperties(prefix=”xxx.xxx”, value=”enable”, matchIfMissing=true),代表当xxx.xxx为enable时条件的布尔值为true,如果没有设置的情况下也为true。

Spring Boot的使用:

(1). 创建一个maven工程,该工程为普通的java工程即可。

(2). SpringBoot要求项目要继承SpringBoot的起步依赖spring-boot-starter-parent

(3). 提供SpringBoot引导类。

(4). 在引导类同级包或者子级包中创Controller类。

(2).什么是Spring Clound?

Spring Cloud 是一系列框架的有序集合,它是基于Spring Boot实现的微服务架构开发工具,并且为微服务中设计的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策精选、分布式会话和集群状态管理等操作提供了一套简单的开发方式,这些操作都可以用 Spring Boot 的开发风格做到一键启动和部署。

Spring Cloud 原理详解及核心组件使用:

推荐博文:https://blog.csdn.net/qq_41701956/article/details/83829539

4.微服务、SpringbootSpringcloud他们三者之间又有什么关系?

(1).微服务是一种架构的理念,提出了微服务的设计原则,从理论为具体的技术落地提供了指导思想。

(2).Spring Boot 是一套快速配置脚手架,可以基于 Spring Boot 快速开发单个微服务。

(3).Spring Cloud基于 Spring Boot 实现服务治理工具包;Spring Boot 专注于快速、方便集成的单个微服务个体;Spring Cloud 关注全局的服务治理框架。Spring Boot / Cloud 是微服务实践的最佳落地方案。

Spring Cloud 和Dubbo分布式架构的对比.

(1).从两个公司的背景来谈

Dubbo是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;Spring Cloud 是大名鼎鼎的 Spring 家族的产品。阿里巴巴是一个商业公司,虽然也开源了很多的顶级的项目,但从整体战略上来讲,仍然是服务于自身的业务为主。Spring 专注于企业级开源框架的研发,不论是在中国还是在世界上使用都非常广泛,开发出通用、开源、稳健的开源框架是他们的主业。

(2).从社区活跃度这个角度来对比

Dubbo 虽然也是一个非常优秀的服务治理框架,并且在服务治理、灰度发布、流量分发这方面做的比 Spring Cloud 还好,除过当当网在此基础上增加了 rest 支持外,已有两年多的时间几乎没有任何更新了。在使用过程中出现问题,开发者提交到 GitHub 的 Issue 也少有回复。相反 Spring Cloud 自从发展到现在,仍然在不断的高速发展。从 GitHub 上提交代码的频度和发布版本的时间间隔就可以看出,现在 Spring Cloud 即将发布 2.0 版本,到了后期会更加完善和稳定。

(3).从整个大的平台架构来讲

Dubbo 框架只是专注于服务之间的治理,如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中增加了使用 Dubbo 的难度。Spring Cloud 几乎考虑了服务治理的方方面面,更有 Spring Boot 的支持,开发起来非常的便利和简单。

(4).从技术发展的角度来讲

Dubbo 刚出来的那会技术理念还是非常先进,解决了各大互联网公司服务治理的问题,中国的各中小公司也从中受益不少。经过了这么多年的发展,互联网行业也是涌现了更多先进的技术和理念,Dubbo 一直停滞不前,自然有些掉队,有时候我个人也会感到有点可惜,如果 Dubbo 一直沿着当初的那个路线发展,并且延伸到周边,今天可能又是另一番景象了。

(5).两者使用特点

首先springcloud对比dubbo,最大的特点之一就是使用Restful的模式进行交互,dubbo是基于RPC进行通信的,而Restful是基于Http协议进行的,从协议的角度上来说Http和RPC都是基于TCP进行研发的协议,Http是最广泛的,不仅支持浏览器还支持各种APP通信,这么来说吧Http就是大家都在用的协议,而RPC是针对某一个平台某一个环节针对性开发的自定义协议,Http由于大众化,所以本身协议会有点笨重,解析起来自然也比RPC要慢,这也是RPC的优势之一,但是Http具有良好的跨平台性质

微服务 vs 传统开发

1.分工不同,以前我们可能是一个一个模块,现在可能是一人一个系统。

2.架构不同,服务的拆分是一个技术含量很高的问题,拆分是否合理对以后发展影响巨大。

3.部署方式不同,如果还像以前一样部署估计累死了,自动化运维不可不上。

4.容灾不同,好的微服务可以隔离故障避免服务整体 down 掉,坏的微服务设计仍然可以因为一个子服务出现问题导致连锁反应。

5.给数据库带来的挑战

每个微服务都有自己独立的数据库,那么后台管理的联合查询怎么处理?这是大家普遍遇到的一个问题。

有如下三种处理方案:

(1).严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时,调用各微服务的接口来获取对应的数据,再进行数据处理后展示出来,这是标准的用法,也是最麻烦的用法。

(2).将业务相关的表放到一个库中,将业务无关的表严格按照微服务模式来拆分,这样既可以使用微服务,也避免了数据库各种切换导致后台统计难以实现,是一个折中的方案。

(3).数据库严格按照微服务的要求来切分,以满足业务高并发,实时或者准实时将各微服务数据库数据同步到 NoSQL 数据库中,在同步的过程中进行数据清洗,用来满足后台业务系统的使用,推荐使用 Mongodb、Hbase 等。

第一种方案适合业务较为简单的小公司;第二种方案,适合想在原有系统之上,慢慢演化为微服务架构的公司;第三种适合大型高并发的互联网公司。

原文地址:https://www.cnblogs.com/loewe007/p/10307626.html

时间: 2024-11-05 23:32:39

Springboot/Springclound微服务架构的相关文章

基于SpringBoot的微服务架构应用案例

1工具的安装和使用10分钟2RESTfull API简单项目的快速搭建29分钟3配置文件详解:Properties和YAML18分钟4配置文件-多环境配置18分钟5日志配置-logback和log4j214分钟6web应用开发-模板引擎FreeMarker23分钟7web应用开发-模板引擎Thymeleaf6分钟8web应用开发-模板引擎jsp17分钟9web应用开发-错误处理14分钟10web应用开发-Servlets, Filters, listeners17分钟11web应用开发-CORS

spring-boot+spring-cloud+maven-module 一个 maven多模块的微服务架构模版

spring-boot-cloud-module spring-boot+spring-cloud+maven-module 一个 maven多模块的微服务架构模版. 新手上路的绝佳模版,只有必要的配置文件和核心jar包,没有多余的其他增量配置,所有的配置和注解都有做解释的注解描述,方便新手一眼就懂,下载后基本上可以直接基于demo开发自己的项目 1,按照业务划分多maven模块: 2,spring-boot脚手架快速生成项目加上个jar包的作用描述: 3,spring-boot+spring-

构建SpringBoot,SpringCloud微服务架构分布式电商项目实战

Spring Cloud 微服务总体架构图 上面图中技术名词理解: 1.Sleuth-链路跟踪 为服务之间调用提供链路追踪.通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长.从而让我们可以很方便的理清各微服务间的调用关系. 2.断路器(Hystrix) 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务通常会集群

微服务架构【SpringBoot+SpringCloud+VUE】二 || 项目架构简介

目录 1.概述 2.开发环境 3.部署环境 4.项目管理 5.后端主要技术栈 6.前端主要技术栈 7.项目开发环境服务规划 8.学习交流QQ群[883210148] 1.概述 本项目是一个基于SpringBoot2.x+vue2.X的分布式微服务架构项目,项目会不断进行迭代更新.该项目后端利用SpringCloudAlibaba微服务架构解决方案进行重构.项目前端利用vue框架开发,页面展示主要为pc端和手机端(微信公众号). 2.开发环境 开发工具:IntellijIDEA.VSCode Ja

Spring Cloud微服务架构在互联网中应用_SpringCloud视频教程

Spring Cloud微服务架构在互联网中应用 课程学习地址:http://www.xuetuwuyou.com/course/177 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程涉及的软件及版本: springcloud版本Dalston.SR1 springboot版本1.5.2 jdk1.8 spring4.3.7 二.适合人群: ①想学分布式微服务架构 ②想学springcloud,spring data flow ③想构建稳定的分布式微服务架构 三

pring Cloud构建微服务架构

SpringCloud-Learning 本项目内容为Spring Cloud教程的程序样例. 作者博客:http://blog.didispace.com Spring Cloud系列博文:http://blog.didispace.com/categories/Spring-Cloud/ Spring Cloud中文社区:http://bbs.springcloud.com.cn/ GitHub:https://github.com/dyc87112/SpringCloud-Learning

微服务架构实践 - 你只懂docker与spring boot就够了吗?

微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并不是单独存在的,为了更好地实现微服务架构,需要整合许多组件混搭使用,方能打通任督二脉,天下无敌.网上很多大拿讲了微服务治理的内容,也有人单方面讲微服务的,比如spring boot与docker,本文着重于组件选型的较量,也积累了我们团队多次PK的精华:这些组件包括spring boot.sprin

微服务架构成功之路

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/07/success-of-microservices 近年来,在软件开发领域关于微服务的讨论呈现出火爆的局面,有人倾向于在系统设计与开发中采用微服务方式实现软件系统的松耦合.跨部门开发:同时,反对之声也很强烈,持反对观点的人表示微服务增加了系统维护.部署的难度,导致一些功能模块或代码无法复用,同时微服务允许使用不同的语言和框架来开发各个系统模块,这又会增加系统集成与测试的难

【微服务架构】SpringCloud组件和概念介绍(一)

一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯.它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩. 微服务架构需要的功能或使用场景 1:我们把整个系统根据业务拆分成几个子系统. 2:每个子系统可以部署多个应用,多个应用之间使用负载均衡. 3:需要一个服务注册中心,所有的服务都在注册中心注册