写点什么

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:482109
用户头像

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

关注

评论

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

FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

矜辰所致

FreeRTOS 9月月更 任务通知 事件标志组 邮箱和消息队列

给分库分表的 ShardingSphere 提了个PR,这Bug居然改了

Java全栈架构师

MySQL 数据库 程序员 面试 分布分表

开源是什么意思?开源软件优缺点有哪些?

行云管家

开源 软件 开源软件 开源协议

Flink 侧流输出源码解析

JasonLee实时计算

flink 源码

Intel全新加速指令AMX技术介绍&eBPF在低版本内核如何跑起来?今天3点见 | 第45-46期

OpenAnolis小助手

芯片 ebpf intel 龙蜥大讲堂 amx

组装式应用小程序化,小程序容器技术必不可少

Speedoooo

小程序 小程序容器 组装式应用 组装式创新

Java基础知识(一些需要注意的点)

自然

9月日更 Java core 9月月更

计算机网络——数据通信基础知识

StackOverflow

编程 计算机网络 9月月更

阿里双十一是怎么做全链路压测的?

程序员小毕

数据库 程序员 架构 面试 系统设计

web技术分享| 虚拟列表实现

anyRTC开发者

Vue 前端 Web 音视频 虚拟列表

敏捷发版:让灰度发布像commit一样简单

Speedoooo

小程序 灰度发布 小程序容器 A/B 测试

聊聊如何利用p6spy进行sql监控

Java-fenn

Java

组装式App小程序化,加速企业效率式研发

Speedoooo

小程序 APP开发 组装式应用

小程序生态能否助力国产系统

Geek_99967b

小程序 小程序容器

TDengine 3.0 的 Update 有何区别?

TDengine

tdengine 时序数据库 企业号九月金秋榜

如何设计一个面向未来的云原生数据库?

Zilliz

深度学习 数据库 云原生 信息检索 向量数据库

用typescript类型来实现快排

Java-fenn

Java

MobPush iOS推送功能最佳实现推荐

MobTech袤博科技

ios 消息推送

一文了解 Java 中的构造器

华为云开发者联盟

Java 开发 企业号九月金秋榜

不是吧,还有人不知道三目运算符的BUG

自然

Java core 9月月更

2022年云堡垒机采购就选行云管家五大理由

行云管家

云计算 网络安全 数据安全 云堡垒机

CSS 有了:has伪类可以做些什么?

Java-fenn

Java

【开发者说】XstoryMaker快速书写剧本场景动画

HarmonyOS开发者

HarmonyOS

Java基础之Java枚举

自然

9月日更 Java core

前端食堂技术周刊第 52 期:Babel 7.19.0、Fresh 1.1、React Native 0.70、新的 Web 性能指标 INP

童欧巴

供应链金融能否成为汽车行业发展的驱动力?

旺链科技

区块链 产业区块链 汽车 供应链金融 企业号九月金秋榜

性能之巅-优化你的程序

Java-fenn

Java

Kubernetes 集群中日志采集的几种玩法

观测云

华为云为网站安全搭建一道智能高效屏障

科技怪咖

一个不用写代码的案例,来看看Flowable到底给我们提供了哪些功能?

江南一点雨

Java springboot flowable

三个Spring的问题把我问懵逼了

知识浅谈

spring 9月月更

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