Spring 核心技术与产品理念剖析【下】

发布时间:2020-07-21 21:39:46 作者:IT老兵哥
来源:网络 阅读:523

Spring 框架的升级演进都是围绕分层架构进行的,从简单到复杂,再回到简单的过程。如果我们没有经历过 Spring 最开始繁琐的配置,然后一步步精简,就根本体会不到为什么会有 Spring Boot。俗话说,乱世造英雄。在新旧时代交替阶段,原来统治世界的旧秩序正在慢慢失效,而新秩序尚未成型,那些建立或者依赖旧秩序的巨头会被惯性推着往前走,他们习惯性地用旧思维或眼光看待世界,所以他们无法正确地理解新时代,这也就是诞生新巨头的机会。随着手机等各种智能终端的普及,原本最大的开发领域从企业应用变成了互联网应用,而这也引发了计算、存储等需求的暴涨,云计算随即呼之而出。基础架构从传统演进到了云计算,与传统基础架构匹配的应用架构是单体式分层架构,而与云计算匹配的应用架构是什么样的呢?大时代需要远见,否则容易懵圈。

Spring 核心技术与产品理念剖析【下】

记得2013~2016这几年时间里,应用开发技术栈出现过一阵混乱,老兵哥所在公司原本有套统一的内部开发框架,就是对 Spring 进行封装、定制和扩展,适配公司内部的基础平台和通用组件,满足内部各种企业应用的开发需求。企业应用都是服务于内部办公无纸化、自动化的,用户规模和并发访问量都是可以预估的,单体式分层架构就足够了。但随着互联网的发展,越来越多的业务开始上线,包括营销、客服等,互联网用户量不断增长,并发访问量波峰波谷的差值也越来越大,单体式分层架构显然无法满足业务发展要求了。

当时在互联网领域走得比较靠前的企业,开始在业务驱动下摸着石头过河了,那时候就出现了面向服务架构 SOA 和Web Service,Spring 最最擅长的领域就是企业应用开发,但对如何满足互联网应用的需求也有些摸不准方向,业界也开始出现许多新物种,其中最火爆的就是阿里的 Dubbo,曾经有种说法是 Dubbo 要代替 Spring。Web Service 就像当年的 EJB,过于复杂臃肿,但在没有更好选择的情况下,许多企业都采用了 Web Service。直到 RESTful 等新架构技术出现,以及 Netflix 探索出了微服务架构,业界才找到了应对互联网化的法宝。

Pivotal,Spring 的东家,在 Netflix 探索微服务架构时期,它正好在为 Netflix 提供咨询服务。当微服务架构被验证可行之后,Spring 就顺势将 Netflix 微服务全家桶 Netflix OSS 纳入到 Spring Cloud 当中,组件包括:Eureka、Zuul、Ribbon、Hystrix、Archaius 等。凭借这套解决方案在技术上的先进性和成熟度,以及原先遍布全球的无数粉丝用户,Spring 在云计算时代重新回到了 Java 应用开发框架的头把交椅上。Spring Boot 降低了单个应用的开发难度,Spring Cloud 降低了分布式系统的开发难度,强强联合,所向披靡。

随着 Spring Cloud 的地位越来越稳固,它的生态也开始发生了些变化,首先 Netflix 宣布 Eureka 闭源,后来 Netflix 宣布 Hystrix 停止新功能开发。同时,Spring Cloud 也从依赖生态伙伴提供关键组件,演变到自研适配关键组件,例如:Spring Cloud Gateway、Spring Cloud Config、Spring Cloud LoadBalance 等。

J2EE 在应用开发当中所扮演的角色也在不断演进,最初 J2EE、Spring 相关的应用会被部署至应用服务器,而现如今在 Spring Boot 的支持下,应用程序可以采用 DevOps、云原生的开发模式,Servlet 容器被内嵌在发布物当中。在 Spring 5.x 之后,采用 WebFlux 的应用可以不依赖任何 Servlet API,也可以部署在非 Servlet 容器的服务器当中,例如:Netty 等。Spring 还在不断创新和演进,除了 Spring Framework 之外,它还包含许多子工程:Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。至此,Spring Cloud 成功蝶变了。

Spring 的发展状态不是一蹴而就的,先从点到线,再从线到面。最初仅实现了 IoC、AOP 等核心特性,支持单体式分层架构,再到 Spring Cloud 标准化不同系统之间的交互方式,同时不断构筑起丰富强大的生态圈。Spring 的成功不光是技术层面的,更主要是产品设计理念层面的,技术上的领先很容易被模仿抄袭,而理念差距却很难跨越。

乐高(LEGO),来自童话王国丹麦的玩具品牌,历经80多年的发展成为世界玩具市场的领导品牌,并以强大的实力跻身世界500强(第96位)。它旗下的产品以其独特的组合结构而风靡全球,得到了不计其数的孩子们甚至成年人的热爱与收藏。这家公司现在的产品是几种基本形状的塑料颗粒,最初它从制造木质玩具开始的,后来转而生产塑料玩具,但玩具市场跟服装市场类似,每年都有不同的流行款式,乐高也做不到每年都准确预测玩具流行趋势,生意不愠不火。

后来企业传到了创始人的儿子手上,一个偶然的机会有个玩具经销商建议他生产可拼装玩具,这样玩家就可以拼装各式各样的玩具,乐高也就永远不会过时了,大部分颗粒的模具都可以重复使用。从此,乐高开始一发不可收拾,产品热销全球,而且玩家自发地组成各种社区交流经验,为乐高的发展贡献了无数智慧。但随着电子玩具和游戏的兴起,乐高这种搭建体验式的玩具受到了冲击,直到有玩家利用单片机、电动马达、传感器和积木搭建出了可编程、可运动和可遥控的机器人等作品,乐高又重新回到市场领导者地位。

之所以讲述乐高的发展史,是因为它跟 Spring 的成功有着类似的原因,首先提供简单、轻量和易用的基础组件,再提供可编程的装配能力,对乐高来说就是用于衔接积木的标准凹凸卡扣,以及可编程的单片机,对于 Spring 来说就是通过 XML、Annotation 或 Java 类等配置控制装配过程的 IOC,以及标准化装配辅助功能 AOP。等有了丰富的基础组件和可编程的装配能力之后,玩家或用户就拥有了灵活性,可以天马行空发挥聪明才智创造出各类作品了。

相对于全球玩家或用户的群体智慧来说,单个公司所能雇佣的人才就非常有限了,Spring 的产品设计理念是面向群体智慧开放的,它的灵活性激发了用户的创造力,同时它通过开源汇聚了全球群体智慧,构建起强大的生态圈,这就是它能够成功且长久不衰的秘密,总结起来就是:简单(基础组件)、灵活(可编程)、生态(开放开源),这套理论其实还可以在苹果 iPhone 等产品的颠覆性成功上得到验证。

典型的完整 Spring Web 应用:

Spring 核心技术与产品理念剖析【下】

利用第三方 Web 框架的 Spring 中间层应用:

Spring 核心技术与产品理念剖析【下】 

远程服务使用场景:

Spring 核心技术与产品理念剖析【下】

这是 Spring 官方文档上阐释的设计哲学,当你学习一个开发框架时,除了知道它能做什么之外,最重要的是要了解它都遵循哪些原则,下面这些就是 Spring 这套开发框架所遵循的指导原则:

 

在单体式应用时代,老兵哥所在公司也有内部开发框架,以 Spring 为基础做了封装隔离,相当于在 Spring 外面包了一层,之所以采用这种方式主要有两个原因:其一,通过封装来适配公司内部技术平台和扩展定制特定功能;其二,Spring 是开源产品,它的发展存在许多变数,为了避免它的变化对应用产生不好的影响,我们需要隔离防护层。

但现在到了云计算时代,我们不再采用这种方式了,Spring 已经发展了近十五年,开源机制允许全球开发者参与其中,这些年已经证明它是足够开放的,而且它已经成了行业事实标准。我们的框架除了供内部用户使用之外,后续还要作为云产品面向外部用户,所以必须要跟 Spring Cloud 保持兼容,这样才能借助 Spring 已有的势,否则就成了竞争对手,就像阿里近来推出了 Spring Cloud for Alibaba。 

 

本文主要是对 Spring 的核心技术和产品理念做了梳理,可以作为学习 Spring 的索引参考,最好的学习资料就是官方的帮助文档。这些知识点对于深入掌握 Spring 是非常有必要的,平时工作中老兵哥经常要帮同事分析定位技术问题,在它们的帮助下分析定位问题会更加游刃有余。同时,产品设计理念和运营策略对于老兵哥推广微服务框架也非常有借鉴意义,如何从零开始去推广一套应用开发框架,读者朋友们也可以考虑将这些策略运用在其他产品上。考虑到我们每个人的工作学习情况不同,平时遇到的问题也不同,本文内容无法覆盖所有人遇到的问题,欢迎大家留言提问,也欢迎关注「 IT老兵哥 」交流互动,谢谢!

本系列其他文章索引如下:Spring 核心技术与产品理念剖析(上)


推荐阅读:
  1. Spring 核心技术与产品理念剖析【上】
  2. 图解 Spring:HTTP 请求的处理流程与机制【5】

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring spring cloud ioc

上一篇:yum error: cannot open Packages database in /var/lib/rpm

下一篇:21.C#--for循环嵌套使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》