`

为什么选择Spring Boot作为微服务的入门级微框架

 
阅读更多

 

 

1. Spring Boot是什么,解决哪些问题

     1) Spring Boot使编码变简单

     2) Spring Boot使配置变简单

     3) Spring Boot使部署变简单

     4) Spring Boot使监控变简单

     5) Spring Boot的不足

2. Spring Boot在平台中的定位,相关技术如何融合

     1) SpringBoot与SEDA +MicroService + RESTful

     2) SpringBoot与Mock

3. 采用了SpringBoot之后,技术管理应该如何进行

 

首先,我们来看一下spring boot是什么,它帮助我们解决了哪些问题:

 

 

 

 

SpringBoot是伴随着Spring4.0诞生的;

从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架;

SpringBoot帮助开发者快速启动一个Web容器;

SpringBoot继承了原有Spring框架的优秀基因;

SpringBoot简化了使用Spring的过程。

 

 

 

 

Spring由于其繁琐的配置,一度被人认为“配置地狱”,各种XML、Annotation配置,让人眼花缭乱,而且如果出错了也很难找出原因。

Spring Boot更多的是采用Java Config的方式,对Spring进行配置。

 

 

 

 

 

 

 

 

 

可以看到,采用了spring-boot-start-actuator之后,直接以REST的方式,获取进程的运行期性能参数。

 

当然这些metrics有些是有敏感数据的,spring-boot-start-actuator为此提供了一些Basic Authentication认证的方案,这些方案在实际应用过程中也是不足的。

 

 

 

 

Spring Boot作为一个微框架,离微服务的实现还是有距离的。

没有提供相应的服务发现和注册的配套功能,自身的acturator所提供的监控功能,也需要与现有的监控对接。没有配套的安全管控方案,对于REST的落地,还需要自行结合实际进行URI的规范化工作。

 

下面,我们研究一下Spring Boot在平台中的定位,相关技术如何融合。

 

 

 

 

 

 

 

上图比较复杂,整体是采用SEDA,也就是Stage-EDA。可以看到,整体是以处理顺序进行展示的,响应过程类似。在处理过程中,主要会有前置过滤,核心功能处理,后置过滤几大部分。

 

图中的过滤器都是可插拔式的,并且可以根据实际场景进行扩展开发。每个过滤器都是Stage,比如ClientInstance合法性检查、调用鉴权、解密、限流等等。

 

一个请求Stage与Stage的转换,实现上是切换不同的线程池,并以EDA的方式驱动。

 

对于业务逻辑的开发者而言,只需要关心CORE部分的业务逻辑实现,其他的非功能都由框架进行统一实现。

 

 

 

 

Mock不应当再是测试的专有名词了,当然对于测试这个角色而言,mockito这样的工具,依然可以为他们提升不少效率。

 

SpringBoot为创建REST服务提供了简便的途径,相比之下,采用阿里的dubbo在做多团队、多进程联调时,mock的难度就陡增。

 

Mock是解耦并行开发的利器,在理性的情况下,软件从开发期Mock联调,到开发与开发的真实联调,只需要切换一个依赖的域名即可,比如:

mockURI:http://mock.service.net/v1/function?param1=value1

devURI:http://dev.service.net/v1/function?param1=value1

 

而上述的域名切换,只需要在开发期定义好一个配置项,在做环境切换的时候自动注入即可,省时、省心、省力。

 

 

如上图和docker的集成可以有AB两种方案:

 

? A方案的核心是,把docker作为操作系统环境的交付基线,也就是不同的fat jar 使用相同的操作系统版本、相同的JVM环境。但对于docker image来说都是一样的。

 

? B方案的核心是,不同的fat jar,独立的编译为docker image,在启动时直接启动带有特定版本的image。

 

A相比与B方案的特点是对于docker registry(也就是docker的镜像仓库)的依赖性较低,对于前期编译过程的要求也较低。

 

采用了Spring Boot之后,技术管理应该如何进行?

 

 

正因为Spring Boot是与Spring一脉相承的,所以对于广大的Java开发者而言,对于Spring的学习成本几乎为零。

 

在实践Spring Boot时学习重点,或者说思维方式改变的重点在于:

 

1)对于REST的理解,这一点尤为重要,需要从设计、开发多个角色达成共识,很多时候都是对于HTTP 1.1协议以及REST的精髓不理解,导致REST被“盲用”而产生一些不好的效果。

2)对于YAML的理解和对于JavaConfig的理解,这两点相对较为简单,本质上是简化了xml文件,并提供等价的配置表述能力。

 

1. 丰富的工具链为SpringBoot的推广带来了利好。

2. SpringBoot的工具链主要来自于两个方面:

    1) 原有Spring积累的工具链;

    2) SpringMVC或者其他REST框架使用HTTP协议,使得HTTP丰富的工具成为SpringBoot天然的资源。

 

 

SpringBoot自身对于前面提到的配置文件:“application.yml”提供了多个“Profile”,可以便于开发者描述不同环境的配置,这些配置例如数据库的连接地址、用户名和密码。

 

但是对于企业用户而言,把不同环境的配置,写到同一个配置文件中,是极其不安全的,是一个非常危险的动作。

 

有一个经常被提及的例子是,随着开源的进行,很多互联网公司,都由于把相关的代码提交到github之类的开源代码社区,并且没有对代码进行严格的配置审查,导致一些”password”被公开。有些不良用心的人,就利用搜索工具,专门去挖掘这些关键字,进而导致数据库被“拖库”。

 

所以对于企业用户,更多的应该是采用集中式的配置管理系统,将不同环境的配置严格区分地存放。

 

虽然SpringBoot的actuator自身提供了基于“用户名+口令”的最简单的认证方式,但它保护的是对框架自身运行期的性能指标敏感数据的最基本的保护。这种保护在实际应用过程中,“用户名+口令”的管理是缺乏的,“用户名+口令”的安全配置过程是缺失的。

 

SpringBoot也不提供对于我们自己开发的功能的任何防护功能。

一般来讲,一个安全的信道(信息传输的通道),需要通信双方在进行正式的信息传输之前对对方进行身份认证,服务提供方还需要在此基础之上,对请求方的请求进行权限的校验,以确保业务安全。这些内容也需要基于SpringBoot进行外围的安全扩展,例如采用前面提到的S-EDA进行进程级别的安全管控。这些还需要配套的安全服务提供支持。

 

一般来说,只要企业与互联网对接,那么随便一个面向消费者的“市场活动”,就有可能为企业带来井喷的流量。

 

传统企业内,更多的系统是管理信息类的支撑系统,这类系统在设计时的主要用户是企业内部员工以及有限的外部供应商。这类系统存在于企业内部的时间一直很长,功能耦合也很多,在功能解耦前,是非常不适合的,或者说绝对不可以直接为互联网的用户进行服务的。

 

SpringBoot自身并没有提供这样的流控措施,所以需要结合前面提到的S-EDA进行流量的控制,并结合下层的水平扩展能力(例如,Kubernets)进行流量负载合理的动态扩容。

 

另外,在长业务流程的设计上,也尽可能地采用异步的方式,比如接口调用返回的是一个“受理号”,而不是业务的处理结果,避免井喷业务到来时,同步调用所带来的阻塞导致系统迅速崩溃,这些也都是SpringBoot自身并不解决的问题。

 

下面我们总结一下:

 

 

 

 

https://zhidao.baidu.com/question/1544229055324335827.html

分享到:
评论

相关推荐

    为什么选择SpringBoot作为微服务的入门级微框架

    本文分享希望大家喜欢。1)SpringBoot使编码变简单2)...首先,我们来看一下springboot是什么,它帮助我们解决了哪些问题:SpringBoot是伴随着Spring4.0诞生的;从字面理解,Boot是引导的意思,因此SpringBoot帮助

    springcloud-基于Spring Boot的微服务开发框架

    综上所述,Spring Cloud 作为现代微服务架构的重要基石,不仅为构建云原生应用提供了坚实的技术支撑,而且还大大降低了开发者的入门门槛,使得无论是初学者还是有经验的开发者都能够轻松上手,构建更加健壮、可扩展...

    十分钟上手spring boot

    - **为什么选择Spring Boot?** - 提供了自动配置机制来减少样板代码。 - 内置了一个小巧的嵌入式Web服务器(如Tomcat、Jetty等),使得部署更加简单。 - **Spring Boot的核心特点** - 简化配置:通过约定优于...

    源码-spring cloud 微服务 入门、实战与进阶.zip

    《源码-spring cloud 微服务 入门、实战与进阶》是一个涵盖Spring Cloud微服务框架的深度学习资源包,旨在帮助开发者从基础到高级全面掌握Spring Cloud的相关技术。这个压缩包的核心内容是名为"spring-cloud-master...

    learning spring boot 2.0

    书中除了可能包含基础入门知识外,也很可能涵盖了对于Spring Boot高级特性的讨论,比如微服务架构和响应式编程的实践,这些内容在当下Java开发领域中非常流行且具有实际应用价值。 标签“spring boot”、“java”、...

    《Spring Boot企业级开发教程》配套资料

    综上所述,这份《Spring Boot企业级开发教程》配套资料为学习者提供了一个全方位、深度学习Spring Boot的平台,从理论到实践,从基础知识到复杂应用,帮助他们成长为能够应对企业级开发挑战的Spring Boot开发者。

    《Spring Boot企业级开发教程》配套资源.zip

    《Spring Boot企业级开发教程》配套资源.zip是一个包含多种学习材料的压缩文件,专为学习和研究Spring Boot的企业级开发而设计。这个资源包旨在帮助用户深入理解和掌握Spring Boot框架,以及与其相关的Java和后端...

    spring boot 相关技术

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它提供了预配置的依赖项和自动配置功能,使得开发者可以快速地创建生产级别的基于 Spring 的应用程序。 《Spring ...

    Spring cloud和Spring boot介绍

    - **Spring Boot 作为基础**:Spring Boot 为 Spring Cloud 提供了一个快速开发的基础。Spring Cloud 建立在 Spring Boot 之上,利用其自动化配置的能力。 - **Spring Cloud 扩展功能**:相比于 Spring Boot,Spring...

    Spring Boot入门级H5页面迷宫小游戏带sql.rar

    《Spring Boot入门级H5页面迷宫小游戏带SQL详解》 Spring Boot作为一款微服务框架,因其简洁的配置和快速的开发效率,深受广大开发者喜爱。本项目将带你走进Spring Boot的世界,通过一个简单的H5迷宫小游戏,帮助...

    一个简单的Spring boot入门级实例

    ### Spring Boot 入门级实例详解 #### 一、Spring Boot 概述 Spring Boot 是一个由 Pivotal 团队提供的开源框架,其目的是为了简化 Spring 应用的搭建和开发过程。Spring Boot 通过“约定优于配置”的设计理念,...

    spring boot 入门开发

    ### Spring Boot 入门开发知识点概述 #### 一、Spring Boot 基本介绍 - **微服务架构**:在现代软件开发中,微服务架构是一种流行的设计模式,它将单个应用程序分解为一组小型、独立的服务,每个服务执行特定的...

    Spring Boot

    ### Spring Boot:微服务入门级框架详解 #### 引言 随着云计算和微服务架构的兴起,企业级应用开发越来越倾向于轻量化、模块化和服务化的方向发展。在众多微服务框架中,Spring Boot因其易用性和高效性而备受...

    Spring Boot-实战

    《Spring Boot-实战》这本书是针对Java开发人员的一份实用指南,主要聚焦于Spring Boot框架的应用与实践。Spring Boot是Spring生态系统中的一个关键组件,它旨在简化Spring应用程序的初始搭建以及开发过程,使得...

    Spring Boot实战 ,丁雪丰 (译者) 1

    总之,《Spring Boot实战》是一本全面深入的指南,它不仅教你如何使用Spring Boot,还展示了如何利用这个框架来构建现代化、可扩展的生产级应用。无论是对Spring Boot的初学者还是经验丰富的开发者,都能从中获得...

    Springboot入门到精通完整版.pdf

    Spring Boot 并非意图替代 Spring 框架,而是为开发者提供一个快速构建、部署和管理现代Java应用程序的平台。通过集成大量常用的第三方库并提供开箱即用的功能,Spring Boot 大大减少了开发者编写配置代码的工作量,...

    Springboot入门到精通.pdf

    Spring Boot并不是要取代Spring框架,而是作为其增强工具,为Spring开发者提供更高效、便捷的开发体验。它集成了大量常用的第三方库,如数据访问、安全、缓存、消息等,并且这些库大多数可以实现零配置或极少配置的...

    Spring Boot的入门程序

    **Spring Boot 入门程序详解** Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,它的设计目标是简化 Spring 应用的初始搭建以及开发过程。Spring Boot 通过提供“开箱即用”的特性,使得开发者能够快速创建...

    SpringBlade微服务开发平台 v3.7.1.zip

    SpringBlade是一个全面的、基于Spring Boot和Spring Cloud的微服务开发平台,旨在简化企业级应用的快速开发。v3.7.1是该平台的一个版本更新,它提供了丰富的功能和改进,以满足现代企业的需求。这个压缩包包含了平台...

Global site tag (gtag.js) - Google Analytics