基于Spring Boot和Spring Cloud微服务架构的分布式系统开发_使用springboot+springcloud微服务框架来构建分布式的b/s应用-程序员宅基地

技术标签: spring  java  其他  

摘要

随着社会的发展,IT公司开发系统的业务需求呈级数倍增加,如果继续使用传统的SSH,SSM等市场上常用的开发框架,将给系统设计人员,开发人员包括后期维护人员带来前所未有的麻烦。随着Spring4.0的发布,伴随着Spring Boot的诞生,而这一技术的诞生也颠覆了传统JavaEE的开发。由于Spring Boot自带了spring-boot-starter-web,spring-boot-starter-jdbc,spring-boot-starter-actuator等子项目,它使得编码,配置,部署和监控等方面都变得简单,相比传统框架的开发,使用Spring Boot将大大节省开发成本,而且也大大提升了系统的性能。但Spring Boot微框架面对呈级数倍增长的业务需求,也显得力不从心,这就需要对传统的单体系统进行拆分,而Spring Cloud作为一个解决微服务架构实施的综合性分布式解决框架,恰恰可以解决这一难题,它将单体系统根据不同的模块拆分成不同的服务,并将不同的服务部署在不同的进程中,这使得不同服务之间的运行和更新互不影响,如果系统产生了新的需求,也只需要增加新的服务即可。总而言之,在现在的企业系统开发中,采用基于Spring Boot和Spring Cloud微服务架构的分布式系统开发是一个很不错的选择,具有很好的参考意义。

引言

在传统的企业系统架构中,我们针对一个复杂的业务需求通常使用对象或业务类型来构建一个单体项目。但是随着企业的发展,系统为了应对不同的业务需求会不断为该单体项目增加不同的业务模块,不断扩大的需求会使得单体应用变得越来越臃肿。单体应用的问题就逐渐凸显出来,由于单体系统部署在一个进程内,往往我们修改了一个很小的功能,为了部署上线会影响其他功能的运行。而且单体应用中各功能模块的并发量、消耗的资源类型都各不相同,对于资源的利用又互相影响,所以单体系统在初期虽然可以非常方便地进行开发和使用,但是随着系统开发,维护成本会变得越来越大,且难以控制。为了解决单体系统臃肿之后难以维护的问题,微服务架构应用而生。
微服务架构是将系统的不同功能模块拆分成不同的服务,而每个服务都运行在自己的进程内,这样每个服务的更新都不会影响其他服务的运行。而在市场上各种微服务架构中,阿里巴巴的Dubbo,百度的Disconf,Twitter的Zipkin等等只解决了微服务中的某一个问题,而Spring Cloud则是一个解决微服务架构实施的综合性解决框架,这也是我们选择Spring Cloud作为微服务架构的原因。

一、Spring Boot与Spring Cloud概述

1.1 Spring Boot简介
Spring Boot是2013年由Pivotal团队提供的全新项目,其设计目的是用来简化Spring框架的搭建、配置、开发、调试以及部署过程。该框架仅需在特定的文件如Maven、Gradle配置文件添加少量配置信息进行配置,从而使开发人员不再需要像传统的Spring框架,自行编写XML文件,并在Maven、Gradle添加相应的框架依赖Jar包。Spring Boot对目前主流的基础框架几乎都做了集成如日志框架,持久化框架,JMS框架,缓存框架,此外Spring Boot提供运行时的应用监控,极大提高了开发和部署的效率。
1.2 Spring Boot主要功能特性
1.2.1 SpringApplication类
SpringApplication类是启动Spring Boot应用的入口类,提供了一种从main()方法启动Spring应用的便捷方式。通过调用SpringApplication.run这个静态方法启动应用本身。
1.2.2 外化配置
在Spring Boot中,允许不同环境配置不同的参数,这些参数可以写入到properties文件,也可以使用YAML配置文件来记录。配置文件中参数可以系统环境变量、命令行参数等外部环境。
1.2.3 日志
Spring Boot使用Commons Logging作为内部记录日志,你也可以使用Java Util Logging,Log4J,Log4J2和Logback来记录日志。默认情况下,如果你使用了Starter POMs,则会使用Logback来记录日志。默认情况,是输INFO类型的日志,你可以通过设置命令行参数–debug来设置:$java -jar myapp.jar -debug。
1.2.4 Profiles
Spring Boot允许使用@Profile注解标注当前应用的环境,也可以通过@Profile来限制某些配置类的加载。同时可以使用spring.profile.active变量来定义应用激活的profile。
1.3 Spring Cloud简介
Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud包含了多个子项目(针对分布式系统涉及的多个不同开源产品,还可能会新增),如下所述:
• Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新、加密/解密配置内容等。
• Spring Cloud Netflix:核心组件,对多个Netflix OSS开源套件进行整合。
• Feign:基于Ribbon和Hystrix的声明式服务调用组件。
• Eureka:服务治理组件,包括服务注册中心、服务注册与发现机制的实现。
• Zuul:网关组件,提供智能路由、访问过滤等功能。
• Archaius:外部化配置组件。
• Ribbon:客户端负载均衡的服务调用组件。
• Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
• Spring Cloud Sleuth:Spring Cloud应用的分布式跟踪实现,可以完美整合Zipkin。
• Spring Cloud ZooKeeper:基于ZooKeeper的服务发现与配置管理组件。
• Spring Cloud Starters:Spring Cloud的基础组件,它是基于Spring Boot风格项目的基础依赖模块。
• Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如用来动态刷新新配置等。
• Spring Cloud Cluster:针对Zookeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。
• Spring Cloud AWS:用于简化整合Amazon Web Service的组件。
• Spring Cloud Security:安全工具包,提供在Zuul代理中对OAuth2客户端请求的中继器。
• Spring Cloud Cloudfoundry:与Pivotal Cloudfoundry 的整合支持。
• Spring Cloud Consul:服务发现与配置管理工具。
• Spring Cloud Stream:通过Redis、Rabbit或者Kafka实现的消费微服务,可以通过简单的声明式模型来发送和接收消息。
• Spring Cloud CLI:用于在Groovy中快速创建Spring Cloud应用的Spring Boot CLI插件。
• ……

二、SpringCloud微服务架构的分布式系统搭建

2.1微服务架构的九大特性
2.1.1 服务组件化
2.1.2 按业务组织团队
2.1.3 做“产品”的态度
2.1.4 智能端点与哑管道
2.1.5 去中心化治理
2.1.6 去中心化管理数据
2.1.7 基础设施自动化
2.1.8 容错设计
2.1.9 演进式设计
2.2 Spring Boot微服务构建
2.2.1 环境准备
Java版本:1.8.0_101
IDE:Spring Tool Suite 3.9.3.RELEASE
Maven版本:apache-maven-3.3.9
2.2.2 Spring Boot搭建
①STS集成配置maven,配置含有本地仓库、中央仓库和远程仓库的settings.xml
②打开STS->新建Spring Starter Project->填写Project Metadata信息->添加相关的starter集成依赖->在Controller中编写RESTful API接口->编写SpringApplication类启动Spring Boot项目->打开浏览器访问刚才的RESTful API接口->成功访问即可证明测试成功->Spring Boot快速搭建成功
③分层次开发Spring Boot项目
在这里插入图片描述
2.3 Spring Cloud微服务架构构建
2.3.1 Spring Cloud Eureka服务治理
• 搭建服务注册中心
• 注册服务提供者
• 高可用注册中心
• 服务发现与消费
在这里插入图片描述
2.3.2 Spring Cloud Hystrix服务容错保护
• hystrix工作流程
在这里插入图片描述
在这里插入图片描述
• hystrix集成
在这里插入图片描述
2.3.3 Spring Cloud Zuul API网关服务
• 动态路由
• 动态过滤器
在这里插入图片描述
2.3.4 Spring Cloud Ribbon客户端负载均衡
• 客户端负载均衡
在这里插入图片描述
• RestTemplate详解
• doExecute方法
在这里插入图片描述
• RestTemplate内部方法
在这里插入图片描述
2.3.5 Spring Cloud Zipkin分布式链路调用监控系统
• 调用链路
在这里插入图片描述
• 通过web UI查看延迟高的服务
在这里插入图片描述
2.3.6 Spring Cloud Feign声明式服务调用
• application.properties配置
在这里插入图片描述
• Ribbon配置

• Hystrix配置
2.3.7 Spring Cloud Config分布式配置中心
• 服务端详解
在这里插入图片描述
• 客户端详解
2.3.8 Spring Cloud Bus消息总线
• 原理分析
在这里插入图片描述
• RabbitMQ实现消息总线
在这里插入图片描述

2.3.9 Spring Cloud Stream消息驱动的微服务
• 绑定器
• 发布-订阅模式
• 消费组
• 消息分区
2.3.10 Spring Cloud Sleuth分布式服务跟踪
• 跟踪原理
①为了实现请求跟踪,当请求发送到分布式系统的入口端口时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识,同时在分布式系统内部流转的时候,框架始终保持传递该唯一标识,直到返回给请求方为止,这个唯一标识就是前文中提到的Trace ID。通过Trace ID的记录,我们就能将所有请求过程的日志关联起来。
②为了统计各处理单元的时间延迟,当请求到达各个服务组件时,或是处理逻辑到达某个状态时,也通过一个唯一标识来标记它的开始、具体过程以及结束,该标识就是Span ID。对于每个Span来说,它必须有开始和结束两个节点,通过记录开始Span和结束Span的时间戳,就能统计出该Span的时间延迟,除了时间戳记录之外,它还可以包含一些其他元数据,比如事件名称、请求信息等。
• 与Zipkin整合(主要有如下三部分)
• microservice-zipkin-server:负责数据收集以及信息展示功能;
• microservice-zipkin-server具体实现
在这里插入图片描述
• microservice-zipkin-client-backend:负责微服务的生产者;
• microservice-zipkin-client:负责微服务的调用。
• zipkin-client-backend和zipkin-client具体实现
在这里插入图片描述

三、结论

Spring Boot对于Spring平台无疑是巨大的提升,无论在开发阶段还是部署测试阶段,甚至系统在线运行阶段,Spring Boot都在发挥着它的作用,使web系统开发在多方面整体提升。而采用基于Spring Boot的Spring Cloud微服务架构设计的分布式系统,则是目前解决单体系统臃肿和设计微服务架构最好的综合性解决框架。所以基于Spring Boot和Spring Cloud的微服务架构的分布式系统将给架构师一个很好的参考。
谢谢客官打赏,1块2块都是爱~
谢谢客官打赏!您的支持是我前进最大的动力~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34908402/article/details/105273126

智能推荐

LabView与SQL Server的连接 【转】_labview与sqlserver-程序员宅基地

文章浏览阅读1.2k次。 摘要:本文介绍LabView与SQL Server的连接方法。关键字:LabView、SQL Server、连接。 正文:在用LABVIEW进行数据采集分析过程中,一般会用到数据库。在数据量很大的场合,可考虑使用SQL SERVER。下面就介绍LABVIEW与SQL SERVER的连接方法。连接思路:先在SQL SERVER建立自己的数据库,如MyDB。然后在操作系统建立一数据源(ODBC),此数据源的驱动选择SQL S_labview与sqlserver

python从入门到精通 pdf 完整超清版-Python从入门到精通PDF高清完整版免费下载|百度云盘...-程序员宅基地

文章浏览阅读1.9k次。提取码:xahb内容简介《Python从入门到精通》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分22章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表与元组、字典与集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GU..._python网络编程从入门到精通 pdf

易语言连接Mysql_易语言链接mysql-程序员宅基地

文章浏览阅读8.9k次。最近在写游戏的辅助工具研究了下易语言,下面就说下如何连接Mysql。.版本 2.支持库 mysql.支持库 specMysql句柄 = 连接MySql (“127.0.0.1”, “root”, “root123”, “test”, 3306)查询部门语句 = “select * from department”执行SQL语句 (Mysql句柄, 查询部门语句)记录集..._易语言链接mysql

智慧树如何复制粘贴_智慧树怎么复制粘贴-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏11次。智慧树如何复制粘贴_智慧树怎么复制粘贴

2020年jQuery被抛弃了吗_jquery.pack.js被替代了吗-程序员宅基地

文章浏览阅读8.4k次,点赞3次,收藏8次。本文创建于2020年8月,以下是正文:随着新的技术与框架的不断发展与更新,2020年的jQuery似乎给人一种老旧的感觉,公司大部分旧的项目使用着jQuery,但是新的项目都在流行使用vue。那么随着vue、react、Aangle等不断的推出和更新,2020年jQuery会被取代吗?接下来我们带着思考来认识以下jQuery!jQuery是一个快速、简洁的JavaScript框架,是继prototype之后有一个优秀的JavaScript代码库(JavaScript框架)它封装JavaScript常._jquery.pack.js被替代了吗

golang中字符串格式化_go bool 加入格式化字符串-程序员宅基地

文章浏览阅读1.6k次。前面的内容中经常出现T%,d%等符号,关于这些符号的含义格式化指令 含义 %% %字面量 %b 一个二进制整数,将一个整数格式化为二进制表达方式 %c 一个unicode的字符 %d 10进制数值 %o 8进制数值 %x 小写的16进制 %X 大写的16进制 %U 一个unicode表示法表示的整形码值 go语言中每个字符可以使用单引号''来创建,字符串支持切片操作,但是需要注意的是,如果字符串都是有ASCII字符_go bool 加入格式化字符串

随便推点

Visual Studio 2012,运行后窗口闪退解决方法大全_visual2012闪退-程序员宅基地

文章浏览阅读2.2k次。相信各位都有一种想要打人的节奏,每次编写代码,在代码编写好了之后,运行编译代码却出现窗口闪退的结果,下面,我将介绍几种解决Visual Studio 2012运行后窗口闪退方法。希望可以帮助大家解决这个问题。 方法一:运行程序时按 Ctrl +F5 ,然后运行程序。 此方法只是解决一般的闪退,菜鸟级的新手如果出现闪退,不_visual2012闪退

【笔记】行测——常识判断之地理常识总结与归纳(二)_重庆四川行测笔记汇总-程序员宅基地

文章浏览阅读759次。第二章 世界地理一、海陆概况(一)七大洲(二)七大洲大小(三)大洲分界线(四)四大洋(五)海峡和运河二、山川湖泊(一)高原、平原、山脉(二)河流、城市与文明(三)世界之最第三章 中国地理一、中国地理概况1.位置半球维度海陆2.疆域面积四至临海3.邻国二、山形地貌(一)四大高原(二)四大盆地(三)三大平原(四)三大丘陵(五)名山大川1.五岳2.三山(六)宗教名山1.四大佛教名山2.四大道教名山(七)著名地貌1.喀斯特地貌2.丹霞地貌3.雅_重庆四川行测笔记汇总

Unity-URP RenderFeature CommandBuffer.DrawMesh始终是蓝色的?_unity urp偏蓝-程序员宅基地

文章浏览阅读186次。URP CommandBuffer.DrawMesh 渲染不正确的?_unity urp偏蓝

虚幻4中的程序化生成【1】程序化生成河流。_虚幻4河流demo-程序员宅基地

文章浏览阅读7.5k次,点赞7次,收藏34次。给自己立了很多flag,由于时间原因很多系列都还在写,算是循序渐进的总结。在程序化生成系列里,将会有如下记述:【1】程序化生成河流主要内容有@1 shader的自动调整(如河流的深浅,河水的波涛程度) @2 河流形状的调整,我们只需要编辑一条样条线,河流根据这条样条线自适应形状。【2】程序化生成森林主要内容有:@1用随机种子随机生成森林。减少美_虚幻4河流demo

Windows系统目录及常用快捷键_目录后的............快捷键-程序员宅基地

文章浏览阅读6.2k次。1.系统目录用户目录存放用户登录后的配置文件Windows目录为系统安装目录 system32存放系统配置文件 config目录内的SAM文件存放用户的账户和密码,备份后删除该文件登录用户无需密码(需要使用第三方PE才能操作该文件) drives目录下 etc目录内的hosts文件存放用于解析域名的地址 program file(x86):64位操作系统才有的目录。32位应用程序安装于该目录 program file:应用程_目录后的............快捷键

simplexml_load_string-程序员宅基地

文章浏览阅读590次。2019独角兽企业重金招聘Python工程师标准>>> ...

推荐文章

热门文章

相关标签