QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

SpringOne 专访:Chris Richardson 谈云时代的 Spring 发展

  • 2012-12-11
  • 本文字数:3169 字

    阅读完需:约 10 分钟

SpringOne 大会今年首次落户中国,大会结合了 Spring 和 Cloud Foundry 大热门技术,将会针对于 Spring 的最新发展、Spring 在移动、大数据领域的应用等做主题分享。InfoQ 就 POJO 以及诸如 Spring 和 Hibernate 等框架构建企业级 Java 应用程序等话题采访到了《POJOs in Action》作者 Chris Richardson 。

InfoQ: 这些年来,企业级 Java 应用开发领域发生了很多变化,你觉得有哪些是比较重大的变化?

Chris: 过去的几年中,涌现出了一大批影响企业开发者的技术。首先,大数据的崛起和 Apache Hadoop 的日益流行。企业在生产并存储大量完全不同的数据,他们使用 Apache Hadoop 这样的技术来分析数据,以此驱动业务决策。

其次,这几年里出现了一批 NoSQL 数据库,它们是传统关系型数据库之外的选择。对于一些应用程序而言,NoSQL 数据库提供了更好的可扩展性和性能,还有更丰富、更灵活的数据模型。还有一种不断增长的趋势是混合持久化存储,即应用程序充分利用多种 SQL 和 NoSQL 数据库的优势。在 SpringOne 北京大会上,会有好几个 NoSQL 的主题,我会做一个与混合持久化存储有关的演讲。

再次,云计算在过去的几年里风光无限。云计算不仅提供了更加敏捷的方式来部署应用程序,还改变了我们架构应用程序的方式。

  • 云计算鼓励开发模块化、多语言的应用程序,这些应用程序由一组多种语言技术构建出来的服务组成。每个服务都能独立开发、部署并扩展。实际上,这是我在 SpringOne 北京上要分享的一个主题。
  • 应用程序很可能是基于云的 Web 服务 API 生态环境的一部分。应用程序使用第三方提供的 Web 服务 API,也暴露出一些 API 给其他人使用。
  • 云也意味着一些企业应用程序要从定制化单租户架构向基于云的、SaaS 风格的多租户架构演化。
  • 最后,复杂的基于 SOAP/XML 的 Web 服务也在向更简单的 RESTful/JSON API 迁移。

最后,过去的几年中移动应用程序的开发领域也有快速发展,因为越来越多的人在使用智能手机和平板。其结果就是应用程序除了要支持桌面浏览器,还要支持移动设备浏览器和本地应用程序,这一点变得越来越重要了。

我很高兴,通过 Spring Data 和 Spring Mobile 这样的子项目,Spring 在这些领域都发挥了关键作用。

此外,过去几年中企业级开发领域发生的另一个主要变化是引入了敏捷方法论。像 Cloud Foundry 这样的云平台极好地匹配了敏捷开发的实践。Cloud Foundry 实现了很多在构建高可扩展、高可用应用程序时要用到的东西,包括负载均衡和健康检测这些你可能要自己实现的东西。这让开发者能更专注于创造业务价值而非构建基础设施。同时,Cloud Foundry 能很方便地运行一个应用程序实例进行测试,这也是敏捷开发的重要部分。

InfoQ: 使用 RDBMS 时,Hibernate 是 Spring 的好搭档,现在 NoSQL 越来越多地被运用到实际项目中,Spring 是如何应对这一变化的?Spring Data 在其中发挥怎样的作用?

Chirs:Spring Data 是一组项目的集合,让人们在使用 Spring 构建应用程序时能更方便地使用新的数据访问技术,比如 NoSQL 数据库、map-reduce 框架和基于云的数据服务,还提供了改进过的关系型数据库支持。特别是 Spring Data 为 NoSQL 数据库领域提供了很多 Spring 的好处和相似点,比如简单性和强大的能力。

InfoQ: 在需求变化越来越快的今天,应用程序如何在保持高可扩展、高可用的前提下响应需求变化?云计算平台是如何帮助应用程序做到这一步的?

Chirs:Cloud Foundry 这样的云计算平台通过多种途径来应对这个问题。第一,云计算平台实现了很多在构建高可扩展、高可用应用程序时要用到的东西,包括负载均衡和健康检测这些你可能要自己实现的东西。这让开发者能更专注于创造业务价值而非构建基础设施。

第二,PaaS 让应用程序的测试更方便了。有了 Cloud Foundry,部署应用程序实例及其需要的服务就易如反掌了。一旦创建了描述应用程序及其所需服务的说明文件,就能通过一条命令来部署应用程序了。只需几秒就能拥有一个应用程序的副本用来进行测试。

第三,PaaS 让你能在生产环境中轻松可靠地部署新版本的应用程序。在传统的、非云环境中,你有一组固定的服务集合需要更新。PaaS 给你了更多的灵活性。例如,你可以在运行应用程序老版本的同时运行新版本,负载均衡会在两者间进行调度的。如果没有发现问题,那么就能关闭旧版本,如果有问题,则能让流量只导向旧版本。

最后,云计算平台鼓励进行模块化、多语言应用程序的开发。这些应用程序包含了一组服务或微应用。每个微应用都能独立进行开发、部署及扩展。每个微应用都很简单,因此便于理解,可以很快改正确。这种架构能让开发者快速引用新的改进过的技术。

InfoQ: 应用程序运行在云端与自己的服务器上有何区别?我们的开发框架和平台,比如 Spring 和 Cloud Foundry 都做了哪些优化,让应用程序在云端运行的更加流畅?

Chris: 自己管理的服务器环境由一组固定的物理机或虚拟机构成。一方面,自己管理的环境面临了很多挑战。首先,你要对所管理的技术栈中每个组件负责,从 OS 开始。这项工作工程浩大,而且和应用程序没有直接的关系。其次,你需要精心计划以便确保开发、测试和生产环境都能拥有足够的资源。其中也存在重大灾难的风险:不期而至的高峰冲垮你的服务器。

另一方面,开发运行在这种静态环境中的应用程序,无需考虑让它能够向上或向下伸缩。而且,应用程序的配置管理也更加简单,因为服务的主机名与端口都是固定的,比方说数据库。

对比之下 ,像 Cloud Foundry 这样的云计算平台是一个动态的环境,把你和虚拟机及物理机隔离开来。你不需要负责安装、配置和管理服务器、应用服务器或者是数据库这样的基础服务。取而代之的基本单元是应用程序:Cloud Foundry 会负责管理你的应用程序和它所要求的服务。Cloud Foundry 是有弹性的:你可以轻松地根据流量向上或者向下进行伸缩。而且,为测试部署应用程序的副本也是相当容易的。Cloud Foundry 让你能专注于应用程序本身,不再被无谓的事情打扰!

开发这类环境中的应用程序也面临了一些挑战。你的应用程序理所应当地要架构为能进行向上和向下伸缩的系统。它需要能在云环境的限制下运行,通常这样的环境不支持组播这样的特性。此外,应用程序配置更具挑战性,因为应用程序服务和数据库服务器这样的平台服务都是动态划拨的。IP 地址及端口号无法合并到应用程序里。

Spring 框架最让人惊喜的是它能和 Cloud Foundry 紧密搭配在一起。运用 Cloud Foundry 服务的机制是 Spring 的依赖注入机制的天然扩展。实际上,Cloud Foundry 运行时能动态地重新配置一个未经修改的 Spring 应用程序,让它能运行在 Cloud Foundry 环境里。此外,Spring 3.1 提供了 Profile 机制,很容易就能写出在云和非云环境(比如开发者的桌面)中迁移的应用程序。

InfoQ: 多租户是大家共同面临的问题,Spring 做了哪些努力帮助开发者更优雅地处理这个问题?

Chirs: 多租户是个有趣的话题。对于一个全新的应用程序来说,挑战可能会小一些。例如,我开发了一个应用程序,其领域模型包含了用户和组织(或者账户)的概念,使用 Spring Security 来处理领域对象授权问题。

更大的挑战是将定制化的单租户应用程序迁移到多租户 SaaS 解决方案上。一种做法是试探性地利用 Cloud Foundry 这样的云计算平台的能力,运行应用程序的多个实例,每个实例对应一个租户。随后可以增量地将应用程序重构为多租户、模块化、多语言的架构,比如我在 SpringOne 演讲里描述的架构。

我很愿意与你和读者朋友讨论多租户所面临的挑战,探索 Spring 如何为大家提供帮助。

InfoQ: 在你看来,未来的框架应该具备哪些特性才能满足云端快速开发的需求?

Chirs: 我们认为有了像 Spring 框架、与 Spring 有关的子项目以及 Cloud Foundry,开发者就拥有了很棒的工具集,能快速开发出健壮的、可扩展的云应用程序。我们也很愿意与你和读者朋友一同讨论 Spring 该如何解决云应用程序开发所面临的挑战。

2012-12-11 22:481999
用户头像

发布了 135 篇内容, 共 62.3 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

第一周作业

andy

公司出了一款新产品,要不要招代理商?

石云升

用户增长 价值网依赖 产品定位 新产品

使用 Docker Desktop 中的 Kubernetes

FeiLong

Docker Kubernetes

第一周总结

andy

第一周总结

scala callback hell

HackMSF

编程 最佳实践

ARTS-week-2

youngitachi

ARTS 打卡计划

ARTS-02

NIMO

ARTS 打卡计划 ARTS活动

图解Java垃圾回收算法及详细过程!

攀岩飞鱼

Java JVM 虚拟机 垃圾回收机制

面试了 6 轮 Google中国 之后,还是挂了

程序猿石头

面试 谷歌Google 经验分享 面经

史上最诡异问题,iOS 单例初始化两次,你遇到过吗?

liu_liu

ios 初始化 单例 两次

第一周学习总结

A Matt

极客大学架构师训练营

mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比,于是写了个插件。

why技术

Java 源码 mybatis

程序员的晚餐 | 6 月 7 日 豆腐年糕

清远

美食

SpringBoot整合Quartz实现任务定时

北漂码农有话说

SpringBoot 2

极客时间 - 架构师训练营 - week1 - 作业2

jjn0703

极客大学架构师训练营

年龄性别的问题,好像也不是太大问题……

zhoo299

生活 随笔

第一周UML作业

吴建中

作业1-食堂就餐卡系统设计

A Matt

ARTS-WEEK1

Allen

带你学够浪:Go语言基础系列 - 8分钟学复合类型

程序员柠檬

后端 Go 语言

架构师训练营-学习笔记-第一周

心在飞

极客大学架构师训练营

架构师训练营练习:食堂就餐卡系统设计

Shawn

食堂就餐卡系统设计

大雄

[安利] WSL Linux 子系统,真香!附完整实操

猴哥一一 cium

Docker Linux 推荐 WSL2 Windows 10

MySQL 笔记(二)日志系统

奈何花开

Java MySQL

软件建模与设计文档

大雄

UML

ARTS打卡Week 03

teoking

ios LeetCode

ARTS 打卡 WEEK3

编程之心

ARTS 打卡计划

HBase 常用 Shell 命令手册

Rayjun

Java HBase

ngrok穿越本地服务器,极客大学架构师训练营 第一课总结,John 易筋 ARTS打卡Week 03

John(易筋)

极客时间 极客大学 ngrok

架构文档-作业01

ashuai1106

UML

SpringOne专访:Chris Richardson谈云时代的Spring发展_Java_丁雪丰_InfoQ精选文章