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

  • 3. Spring Cloud 蝶变重生

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

记得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 成功蝶变了。框架

  • 4. Spring 的产品设计理念

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

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

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

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

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

典型的完整 Spring Web 应用:

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

 

远程服务使用场景:

  • 4.1 Spring 的设计哲学

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

  • 提供不一样层次的选择。Spring 能够帮助你将设计决策尽量地延后,例如:你能够经过修改配置而不是代码来替换持久化存储提供者。这条准则对于许多基础设施的关注点或集成第三方 APIs 一样适用。
  • 容纳多元化的观点。Spring 拥抱灵活性,它并不执拗己见地要求事情应该怎样作,它从不一样维度知足应用开发各类类型、普遍的需求。
  • 保持强大的向后兼容。Spring 的版本升级会尽可能避免破坏性变化,它会精心选择所支持的 JDK 和第三方库的版本,方便依赖于Spring的应用和库的维护。
  • 关注 API 的设计。设计更能反映业务本质且可以在多个版本和许多年里都保持不变的 APIs,Spring 团队在这件事情上投入了不少思考和时间。
  • 为代码质量设置更高的标准。Spring 框架很是注重有意义、及时更新和准确的 Javadoc,它是极少数可以宣称代码结构整洁、包之间没有循环依赖关系的项目之一。

 

  • 5. Spring 的产品推广策略

在单体式应用时代,老兵哥所在公司也有内部开发框架,以 Spring 为基础作了封装隔离,至关于在 Spring 外面包了一层,之因此采用这种方式主要有两个缘由:其一,经过封装来适配公司内部技术平台和扩展定制特定功能;其二,Spring 是开源产品,它的发展存在许多变数,为了不它的变化对应用产生很差的影响,咱们须要隔离防御层。

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

  • 产品积木式标准化,从 3.x 开始 Spring 从原先总体式的产品演化为多个组件。刚开始咱们的第一印象会认为 Spring 是重量级的全家桶式解决方案,但实际上它并非全选或全不选的解决方案,用户能够只选择其中某几个组件来构建应用。
  • 解决方案套餐化,就像肯德基、麦当劳和真功夫等快餐连锁企业同样,随着产品不断标准和丰富,套餐化是更好知足用户需求的必然选择。全套推广难度太大,按需组装,针对不一样的用户场景提供个性化解决方案,下降用户上车难度,先让用户用上,创建链接,方便后续进一步转化。不挑用户,而是想办法解决不一样用户的问题。这样更加符合用户视角,由于用户对大而全的解决方案没有直观感觉,他们只关心产品可否解决目前最急迫的问题。
  • 高频特性带动低频特性,某些产品特性或组件通用性更强,它们被用户使用的频次越高,那么这些特性或组件应该保持较低的利润率,或者免费,借助它们扩大用户群体规模,从而有机会宣传推广那些低频高润的特性或组件。这其实就是互联网思惟,经过免费策略来作大用户量,而后再深耕用户,因此说免费实际上是最贵的价格。
  • 经过标准化、套餐化就可让每一个子产品独立研发和运营,包干到户,激发创造力和动力。兵分多路,多点突破,每套解决方案能够单独推广,彼此共享用户。同时,Spring 规范了定制扩展机制,团结了全部能够团结的力量,构建了一个生态联盟。咱们说架构设计就是设计合做机制,Spring 优良的架构设计很是有助于合做,从而可以突破重围。开放源代码,拥抱开源趋势,消除了客户对被技术锁定的担心。

 

  • 6. 总结

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

微信公众号「 IT老兵哥 」

关注「 IT老兵哥 」,赋能程序人生!

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

相关文章
相关标签/搜索