数据中心操作人员:艰难地在针对VM构建的基础设施上运行容器

由于提供了超级集成系统容器平台,专用容器技术公司Diamanti被Gartner称为“最酷供应商”。容器依然是开发人员“恰好所需的东西(be the ‘it’ thing)”。在这种情况下,InfoQ发现,存储、网络和系统供应商越来越多地尝试让数据中心为这种分布式工作负载的新构成要素做好准备。如今的企业数据中心仍然是为虚拟机世界而设计的,因此,随着越来越多的应用程序是为容器和云原生而构建的,生态圈必然会发生重大的变化。

Diamanti是一家创业公司,其团队由Cisco、VMware和Veritas的前高管组成。他们的目标是构建下一代面向容器的存储和网络基础设施。

Mark Balch是该公司的产品和市场营销副总裁。他在接受InfoQ的采访时谈了目前容器在开发人员和数据中心操作人员之间造成的冲突。

InfoQ:给我们介绍下开发人员普遍如何使用容器。他们通常首先在个人笔记本上做什么?

Balch:Docker让开发人员很容易把一个开发环境下载到他们的笔记本上,并开始使用容器构建他们的应用。许多开发人员基本上会一直这样做下去,并在最后交付到生产环境之前把应用程序打包到VM中。

虽然你不再需要在开发时部署应用程序,但挑战在于,当将应用程序从开发环境应用到生产环境时,你面对的是一个不一样的环境,可能会面临性能挑战或问题。

我最近和一名开发人员聊过。他在美国一家很大的连锁酒店工作,他就遇到了这个问题。他的团队使用Docker开发他们的网站,然后为每个容器构建单独的VM镜像。确实,这最初可以让他们比较容易地投入生产环境,因为运营团队不必学习任何容器特有的东西。但是现在,这样做了一年多之后,他们遇到了严重的VM蔓生问题——一个极其低效的栈,每个容器都占用一整个VM。

Docker让我们很容易在笔记本电脑上上手,但那距离生产环境有很大的差距。

InfoQ:他们通常在什么时候将容器推送到生产环境?

Balch:当开发人员在笔记本上使用Docker时,他们通常不用担心整个生产环境的性能问题或网络连接,甚至都不用担心如何获得持久性存储——因为什么东西都是在本地笔记本上。他们可能也不那么担心安全,因为什么都在本地,他们可能只是用小数据集来做功能测试。但是,所有这些在生产环境中就不一样了。在生产环境中,应用程序扩展会是个大问题,运营团队必须将容器连接到数据中心网络,数据存储和安全对企业而言至关重要。

你遇到的第一个问题是运营团队可以使用什么格式。如今,在大多数情况下都是虚拟机。所以马上,面对这些虚拟机,开发人员就必须指出如何获得、分发及打包这个友好高效的容器镜像。

第二个问题是可扩展性——如何确保应用程序会通过横向扩展提供客户期望的响应性。这里就涉及到网络和存储问题了,就需要虚拟机开销。说实话,并不是所有开发人员都将安全设计作为基本需求。然而,运营团队需要负责所有这些要素。

InfoQ:如果把容器的名声和开发人员面对的现实做下对比——您认为它们哪里名副其实,哪里又言过其实?

Balch:在谈到轻松构建容器镜像以及能够快速扩展和收缩时,容器无疑是名副其实的。但是,要将应用程序投入生产还有更多的工作要做,这方面市场还没能迎头赶上。就是我们正在谈论的所有这些问题,不仅可以确保容器在笔记本上工作得很好,还可以确保它们在生产环境中也工作得很好。如今还有大量的定制化和运营挑战。

InfoQ:请您评价下运营人员所面临的新世界,他们要尽力为开发人员所做的与容器相关的工作提供支持吗?他们面临的挑战是什么?

Balch:如今,运营人员受限于两个选项——要么他们继续把重心放在传统的虚拟机上,并承担那种方法所有的低效和成本,要么他们就得面对流行的容器原生这项他们并不熟悉的技术,找到一个新的运营模型。

大多数行业观察者都认为,随着时间推移,容器将成为主要的应用程序平台。运营的问题不是是否而是何时弄清楚如何高效的容器化应用程序。

但是,在开发人员和运营人员之间有一种天生的紧张关系。虽然两个团队都希望成功地交付应用,但开发人员本身喜欢可以提高开发速度和效率的技术。相比之下,运营更保守,他们关心的是可靠性和运营需求。因此,开发人员可能希望快速采用像容器这样的新技术,而在对容器没有一个彻底的了解之前,运营团队会担心他们无法兑现自己的业务承诺。

InfoQ:利益驱动点在哪里?开发人员的收益如何才能超过运营人员面临的挑战?

Balch:总而言之,企业会逐利,而应用程序开发人员是收入的促成者。任何可以提高生产效率的技术都会流行。这就是为什么容器发展的如此之快,因为它为企业和开发人员带来了好处。我们在电子商务、金融服务、媒体公司等垂直市场中看到了这种情况——在这些市场中,企业竞争白热化,敏捷性备受重视。确实,软件正在吞噬世界,而容器是一个大的推动者。

为此,运营团队越早弄清楚如何在生产环境中运营容器应用程序,在履行他们的业务职责时就会越成功。有许多行业观察者认为,容器应用发展如此之快,如果运营不在接下来的12到18个月里弄清楚如何运营容器环境,那么他们将会开始看到他们的开发人员去了别的地方。关键是,当收入受到威胁,企业不会容忍任何障碍。

查看英文原文:Datacenter Operators: Bumpy Ride Running Containers on Infrastructure Built for VMs

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/diamanti-named-cool-vendor?utm_source=news_about_java&utm_medium=link&utm_campaign=java

AWS再迎大师加盟:Java之父James Gosling决定效力

AWS再迎大师加盟:Java之父James Gosling决定效力

Java语言缔造者James Gosling在计算机前工作。拍摄于2013年。

Amazon Web Services公司在其员工阵营当中再迎一位重量级计算机科学巨头。被业界广泛视为“Java之父”的James Gosling于本周一发布Facebook消息,宣布他即将以杰出工程师身份加入AWS这家云服务供应商。

James Gosling:是时候做出改变了。我将离开充满回忆的Boeing Defense(原Liquid Robotics)。从今天开始,我将在Amazon Web Services开始自己的新旅程。

早年于Sun Microsystems公司效力时,Gosling曾提出Java语言的原始设计方案,并率先实现了第一款编译器与虚拟机。而在Sun公司被甲骨文收购之后,他于2010年离开Sun,而后曾短时间加盟谷歌公司。在本次宣布“转会”之前,Gosling于Liquid Robotics公司负责设计一款水下机器人软件。

Amazon方面亦证实了Gosling即将加盟该公司的消息,但并未对Gosling这位大师未来的工作方向作出任何具体评论。Gosling将在AWS与其他多位重量级技术大牛成为同事,其中包括Adrian Cockroft、Swami Sivasubramanian以及Werner Vogels。

尽管目前尚不清楚Gosling同志下一步的工作内容,不过根据猜测,他似乎非常适合参与AWS物联网工具开发团队。很明显,他非常熟悉物联网系统的部署流程,亦善于应对将公有云与物联网配合使用时面临的各项挑战。

在2016年的IP Expo欧洲大会上,Gosling在谈及物联网系统时指出,“在我看来,并没有任何适用于Liquid Robotics实际需求的云服务供应商,因此我们最终决定自行打造一切,但这确实相当困难。我想要强调的是,对我个人而言众多云服务供应商的存在确实极大简化了日常工作流程,但想要说服任意国家中的任意一家组织机构充分信任Amazon则非常、非常困难。”

查看原文链接:  https://venturebeat.com/2017/05/22/aws-signs-java-father-james-gosling/

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/AWS-James-Gosling?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Kotlin成为正式的Android编程语言

在Google I/O 2017大会上,Google正式宣布Android Studio 3.0完全支持Kotlin,Kotlin也将从JetBrain移交给独立的非盈利组织来进行后续的开发。

Google正式将Kotlin加入到Android的开发语言行列,其他为数不多的语言还包括Java和C++。关于为什么选择Kotlin,Google说“Kotlin简洁、表现力强,而且具有类型安全和空值安全(null-safe)的特点,很多Android开发者发现Kotlin可以让开发变得更快也更有趣”。另一个很重要的原因是Kotlin可以与Java进行完整的互操作,并且也是运行在JVM上。Kotlin还能调用C++和Android代码,因为它可以通过external标识符来支持JNI。Kotlin的源代码可以被编译成JVM的字节码,也可以生成JavaScript代码。

在过去,开发人员需要通过Android Studio的插件来使用Kotlin,而现在,他们可以在Android Stuido 3.0里直接使用Kotlin,包括重构、自动完成、lint、调试和其他操作。Android Studio 3.0也是在Google I/O 2017大会上发布的,不过现在只有处于canary阶段的预览版本,可能还需要几个月的时间才能发布正式版。

Kotlin与Java之间的互操作性是它被广泛采用的特性之一。Android的Java代码可以被Kotlin调用,Kotlin的代码也可以被Java调用,一个Android项目里可以包含Java文件和Kotlin文件,Java文件还可以被转成Kotlin文件。开发人员不一定要全面地学习Kotlin,他们可以继续使用Java开发,然后试试水,看看会不会喜欢上Kotlin。对于喜欢Kotlin简洁性的开发者来说,他们或许会更多地使用Kotlin。

Kotlin兼容JDK 6及以上版本,它可以运行在大多数Android版本上,包括一些比较旧的版本。Android同时也支持Kotlin的coroutine,不过因为这是一个实验性质的特性,所以Google并没有针对这个特性做出任何承若,它完全取决于这门语言自身的发展。

Google透露,他们正在与JetBrain展开合作,将Kotlin移交给第三方的非盈利组织进行后续的开发。虽然说Kotlin是开源的,不过交给这样的一个组织来看管,可以在一定程度上保证语言的未来不会落入某一家的公司手里。这一举动也意味着Google将会介入Kotlin的推广工作,这对于Kotlin来说是一个利好消息。

查看英文原文: Kotlin Is Now a Supported Android Language

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/android-kotlin?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Spring Vault GA 1.0发布

Pivotal已经公布了Spring Vault 1.0的通用版本。这是一个Java类库,它提供了Hashicorp Vault(一款安全管理工具)的客户端抽象。依照Spring的惯例,它会使Vault更易于集成到Spring或Java应用中。一些熟悉的模式包括模版、属性来源等等。

Hashicorp Vault是一个工具,它为开发人员提供了以安全的方式进行安全的存取,比如API 令牌、SSL 证书和口令。它还处理用户的访问控制,具有撤销令牌的能力。除此之外,它还有审计功能,可以用它来跟踪用户。

想要采用Vault 的Java开发人员通常会面对CLI或API的选择。因此,当从JVM调用Vault时,很可能开发人员会选择API并实现它们自己的客户端类库。Spring Vault让开发人员不必再自己做这件事了,它为此提供了一个开源项目。它还以商业企业Pivotal作为后盾。

尽管它本身不依赖于Spring,但高层设计原则和抽象是类似的,目的是减少为开发人员提供的样板代码。这意味着该框架不仅可被普通Java开发人员采用,更特别适用于Spring开发人员。

为了与Vault交互, Spring Vault利用了中心类VaultTemplate。为了与Vault CLI和 API保持语义一致,它提供了"write”、”read”、”delete" 和 "revoke"等常见操作。

Secret toWrite = new Secret("foo");
vaultTemplate.write("mysecret/myapp", toWrite);

VaultResponseSupport toRead = vaultTemplate.read("mysecret/myapp", Secret.class);
vaultTemplate.delete("mysecret/myapp");

通过使用@VaultPropertySource 注解,可以使Spring Vault 隐含映射到Java对象,这是一种给定的宣言机制。

@VaultPropertySource(value = "foo/creds", propertyNamePrefix = "foo")
public class SomeConfig {
  // ...
}

public class MyProperties {
  @Value("${foo.username}")
  private String awsAccessKey;

  @Value("${foo.password}")
  private String awsSecretKey;

  // ...
}

该类库还支持多个认证机制:AppIdAppRoleAWS EC2TLS CertificatesCubbyhole。通过实现ClientAuthentication类即可指定它们,这表示为Java开发人员提供了一个更易于设置初始登录的脚手架。

还可以通过SessionManager类交给框架来进行会话管理。这意味着令牌更新、吊销等任务都是自动化处理的,不需要特别由应用代码来完成,这又一次消减了一些额外的开发成本。

在官方文档中可找到其他详细内容,该类库可以在 Maven Central中下载,源码可以在GitHub中下载。

查看英文原文Spring Vault GA 1.0 Released

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/spring-vault-ga?utm_source=news_about_java&utm_medium=link&utm_campaign=java

JCP EC投票反对Java平台模块系统

近日,JCP执行委员会有关JSR-376(Java平台模块化系统,通常称为Jigsaw)的投票结果在Java社区进程页面上发布,有10票赞成提案,13票反对公开评审。

InfoQ之前曾经报道过,这伴随着为期一周的激烈的公开辩论和评审,以及Reinhold最近针对JCP EC的抗辩

当你考虑如何投票时,我劝你就事论事地评判这份规范,另外,你要考虑到,自己的投票会成为什么性质的先例。

执行委员会似乎把这话记在了心里,并在回复评论时指出,提案以其目前的形式尚未准备就绪。其中部分担忧来自于自动化模块命名,即如果没有在Jar文件的module-info.class中指定,则模块名将从文件名生成。由于文件名是不确定的,任何从文件名到显式声明的名称的切换都无法以向前兼容的方式实现,所以这个问题可能会严重地伤害Java社区。Stephen Colebourne是Joda Time及Java 8时间包的作者。他早些时候写道

自动化模块允许模块依赖于非模块。但这是通过在文件名上指定requires子句而不是模块名来实现的。如果模块是基于文件名发布的,那么这后续会让我们吃苦头。一条新的MANIFEST.MF记录允许任何开源项目选择一个模块名,并立即发布其选择。当JPMS看到MANIFEST.MF记录时,它会将该值用作自动化模块的名称。

社区成员必须不惜一切代价避免发布基于文件名的模块化Jar文件。但是,从现在开始,社区成员可以发布包含新MANIFEST.MF记录的Jar文件(虽然从技术上讲MANIFEST.MF记录尚未最终确定,但它应该很快就会定下来)。

有关自动化模块名的反馈已经在专家组邮件列表上报道过,而公开评审草案则被希望按照原样发布。然而,在过去这些天里,Reinhold认识到自动化模块名的问题,使得邮件列表形成了一份修正提案。 不过,这并不包含在提交给JCP EC的公开评审草案中,成员们注意到了评论,他们不能投票支持这份使用了先前写法的提案,因为它没有包含邮件列表上讨论的最终提案

LJC对这份规范投了反对票,因为它是在投票开始阶段提交的。在14天的投票时间里,对于部分非常困难的问题,如#AutomaticModuleNames,规范负责人和专家组在达成一致方面取得了重大的进展。

不过,我们[SAP SE]尤其关心的是,专家组内缺少直接沟通。假如这份JSR未能以三分之二的多数票获得批准,我们希望专家组和规范负责人可以使用另外30天的时间经常见面,从而理清存在的问题,提出新的、更合理、更高瞻远瞩的提案。尽管我们知道不可能改正所有问题,但我们认为,过去的几天已经清楚地表明,良好的折中还是可能的(例如“自动化模块问题”),我们相信,多出来的时间可以用于提交一份更好的规范,供重新投票。

反馈普遍是积极的,并且认可到目前为止为实现JPMS所做的大量工作。由于未能获得三分之二的多数票,为了提交一份更新过的提案,公开评审阶段现在另外延长了30天。接下来,后续的投票可以基于根据邮件列表上的讨论修正后的提案进行,如重新讨论自动化模块命名方案。不过,它还是建议,讨论应该在邮件列表上进行,而不是博文讨论区:

最后,请所有成员和规范负责人回到谈判桌上来,彼此间直接交流,而不是在博文和公开信中互相指责!

虽说有人可能会将反对票视为反对JPMS,但事实是,目前为止,与该JSR相关的工作还在进行当中,还有一些不完善的地方,在最终投票之前可以忽略。公开评审将在30天内再进行一次,如果公开评审发现了新问题,则可以重新评审。不过,一旦JSR通过了公开评审,就会进入最终评审投票阶段,不允许再重复,这是最后一次。虽然它不会影响OpenJDK中的实现(代码已经落地),但它会影响其他Java供应商为了保持和Java兼容所需要做的工作。Oracle可以选择否决或解散JCP,从而让一份尚未完成的规范快速通过评审。Martijn Verburg在Java伦敦社区的博客上发文解释了LJC投反对票的原因

这是JCP所支持的(不,不只是因为政治)

临时观察员及部分科技媒体可能会得出结论,所有这些不过是大公司政治。近期的公共博客和公开信助长了这种情绪,但是我们极力主张,人们要读一下伴随“反对票”的评论。

虽然Oracle是Java的管理者,但JCP执行委员会(EC)的宗旨是引导整个Java生态系统的发展,我们强烈的感到,它在这种情况下理应如此。

Ben Evans是EC中另一位来自LJC的代表,他告诉InfoQ:

自Jigsaw项目启动以来,LJC一直是它的支持者。我们清楚地知道,这种根本的变化所包含的复杂性对Java应用程序打包和部署方式的影响。不过,更重要的是,我们第一次有了模块系统。

在过去的几个周里,尤其是从JPMS JSR被提交评审以后,专家组已经在解决未决问题方面取得了重大进展。然而,主要问题依然存在,需要在正式发布以前修复。最重要的是修复自动化模块的建议,因为社区已经表明,他们最感兴趣的是模块的迁移路径(尤其是,例如,基于Maven的应用程序)。

一旦EG就如何将其应用到现有代码提供了一些指引,如果获得了进一步喘息的空间,就可以举办一些骇客日活动,看看社区对新特性提案的反应。

JPMS仍然具有很大的潜力——但在可以广泛使用之前还有更多的工作要做。

IBM的Tim Ellison在有关投票的评论下发表了一篇博文,表达了希望未决问题得到解决的愿望:

专家组和规范负责人会继续密切合作,富有成效地完善规范草案,我们对此持乐观态度。我们坚信,修订可以让JSR 376规范的几个遗留技术问题的状况得以改善,并作为“建议的最终草案(Proposed Final Draft)”,而且不会对Java 9项目计划产生重大干扰。

Twitter也发表声明,解释了他们投反对票的原因,并表达了希望规范负责人和专家组协力解决未决问题的愿望:

对于JPMS,我们主要关注的是,它可能给Java开发人员带来破坏性变化,却没有达到人们对于这样一个系统的预期,提供立竿见影的效果。我们担心,这会延误这项重要技术的广泛应用。我们希望,如果JPMS更全面地实现原来的一些目标,它就可以解决Java开发人员现如今面临的真正痛点。特别是,非导出程序包名称冲突可以说不符合该JSR“互不干扰(non-interference)”和“强封装”的目标。但是,如果模块更彻底地隔离,那么可以通过将它们作为非导出程序包隐藏在模块中,使构建系统支持同一程序包的多个副本。这种切实的、立竿见影的效果可以抵消开发人员模块化自己的源代码所需要完成的所有困难工作,可以促进JPMS更快的应用。

出于上述原因,Twitter对JSR 376投了反对票。我们希望,规范负责人和专家组在接下来的几个周里协力消除我们的担忧,并解决其他投反对票的JCP执行委员会成员提出的其他问题。我们期待着在JSR 376再审投票时可以投赞成票。

InfoQ已经和Mark Reinhold取得联系,请他对此事发表评论。在收到回复后,我们会在这里发布。

查看英文原文JCP EC Votes Against the Java Platform Module System

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/jpms-rejected?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Azul Systems推出Falcon,一个基于LLVM的新的Java即时编译器

近日,Azul Systems发布了Zing 17.03。该版本完全支持Azul基于LLVM的新的Java即时(JIT)编译器Falcon。该编译器设计用来取代Zing先前版本以及Oracle HotSpot和OpenJDK使用的C2编译器。Falcon是1997年JavaOne大会推出C2以来Java SE的第一个新的生产用JIT编译器。

LLVM是一个现代化的开源编译器框架,也是Swift、Rust等许多新语言首选的后端“引擎”。它获得了学术界的大力支持,并且拥有包括AMD、Apple、Cray、IBM、Intel、 Microsoft、Sony和SAP在内的众多商业支持者。广泛的支持可以帮助它充分利用新的服务器硬件和新的指令集,它经常利用新的处理器技术,如Intel的Broadwell和Skylake处理器提供的矢量化和加密优化,早在其他语言之前提供这种支持。

Azul首席执行官Gil Tene告诉InfoQ:

使用LLVM为我们提供了巨大的优势,数以百计的人对它进行优化,让它与最新的处理器能力保持同步,这些成果可以立即应用到Java代码上。

关于这一点,一个简单具体的例子是,Falcon已经使用Intel最新的CPU(例如,当前Broadwell Intel E5-v4服务器上的AVX2指令集)所提供的最新/最棒的矢量指令功能来优化常规的Java循环。由于AVX2增加了谓词矢量运算能力,所以Falcon能够在循环(例如,“将数组中的偶数相加”)中矢量化在之前的硬件上无法矢量化的谓词操作,因此,同样的Java类在较新的服务器上执行速度更快。[目前]HotSpot甚至都没有试一下……

但最重要的是,我们获得了这种好处,不是通过一群Azul工程师花时间进行矢量化优化以及选择恰当的方法匹配每一种处理器。举例来说,我们是从Intel过去两年的投入以及他们将这些优化贡献给LLVM获益的。他们的贡献已经应用到了C/C++/Clang/Rust,就像(现在)应用到Java一样。

Falcon让我们可以做一些很酷的、JVM相关的优化,而使用C2则无法应用这些优化。GC屏障相关的优化就是其中的一个例子。此外还有更高层次的语言优化。关于更高层次的优化,一个具体的例子是,我们用较少的投入就在Falcon中引入了针对“真正final”字段的优化,在C2中引入的话,投入要多得多。[实例final字段的挑战在于,它们可能不是“真正final”的,因为反射和Unsafe可以重写它们,而且经常这样做]。Falcon能够优化Java中使用实例final字段的操作,它所采用的方式是以前的JIT不曾做过的(例如,将数组范围检查提取到循环之外)。过去的几年里,在HotSpot和Zing中,这一特性一直处于原型模型开发阶段(在OpenJDK的部分邮件列表中可以找到相关讨论),但之前从没有在哪个JVM中实现产品化,其中有一部分原因是让JIT编辑器处理得很好复杂度很高。

有鉴于此,Falcon在新硬件上性能超过C2就不奇怪了。例如,Tene告诉InfoQ,在特定的加密负载基准测试中,它比Oracle HotSpot快3.5倍,比Oracle HotSpot使用基于Skylake的服务器(Intel Xeon E5-xxxx)进行Cassandra基准测试快大约10%。另外,在低延迟环境中,它也比Zing以前的版本快许多。按照Tene的说法,一个运行交易基础设施的Azul Zing客户观察到了大约18~24%的速度提升。

Azul是第一个在生产级托管运行时中使用LLVM的组织。为了完成这项工作,LLVM借助Azul提供的其他功能进行了增强,包括安全点和GC屏障方面的优化,提供JIT代码替换和逆优化的能力,包括隐式null检查、预测去虚拟化及保护内联在内的预测运行时优化。

如你所料,Falcon还支持Azul在2014年推出的ReadyNow技术。按照设计,ReadyNow是为了避免Java虚拟机“预热”,鉴于JVM有足够的时间学习哪些代码要编译成机器级,应用程序所有者试图通过这种方法充分利用JIT编译器优化。

现有用户可以从Zing支持门户上直接下载Zing 17.03。Azul网站上也提供了Zing新版本的30天试用。Zing单许可的全年订阅价为每台服务器3500美元,大量许可长期订阅价格会低许多。

5月4日,太平洋时间上午11点,Azul首席技术官Gil Tene举办了一场题为“走进Falcon编译器”的网络研讨会。研讨会加Q&A持续了约一小时。

查看英文原文Azul Systems Launches Falcon, a New Just-in-Time Compiler for Java, Based on LLVM

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/azul-falcon?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Reinhold就Jigsaw投票一事向JCP提交公开信

Oracle Java Platform Group 的首席架构师 Mark Reinhold 向 JCP 执行委员会提交了一封公开信。在公开信中,他表示对 IBM 投了 JSR 376 反对票一事感到震惊,并争辩说,Red Hat 之所以也投反对票,是出于“保护他们自家的非标准模块化系统,而这个系统在 JBoss/Wildfly 之外的生态系统并没有多少用武之地”。他进一步辩解说:

在你们考虑如何投出你们手中宝贵的一票之前,我建议你们先对这一规范的价值做一个考量,并仔细考虑你们的投票将会对未来带来的深远影响。

因为专家组缺少统一的意见就投反对票,这无异于在反对 JCP 本身。JCP 的存在并不是为了强制达成统一意见,它需要正当充分的理由。它赋予规范制定者充分的决策权,防止专家组成员因为自己的个人兴趣而妨碍到整个进程。如果你们放弃了你们的权利,那么未来的 JSR 就变成了“专家团”的自我表演。

很多失败的技术都是这么来的。

我不希望Java的未来会是这个样子。

作为回应,来自 Red Hat 的 David Lloyd 提出了一些比较突出的问题,简单概括如下。

  • 在运行时允许模块间存在环。
  • 模块原始补丁(虽然很小)会被重新计算(在必要情况下进行分阶段)。
  • 在模块路径间提供了包命名隔离。

Lloyd 补充说:

我们担心针对反射所做的变更对于社区来说太过剧烈,而且还有可能对执行委员会和专家组造成很大影响。我认为,在专家组达成一致意见之前,我们还是保持现状。

在模块路径命名方面,Reinhold 提交了一个更新提案 #AutomaticModuleNames,为了更好地与 Maven 兼容,如果 JAR 包里包含了 pom.properties,可以将 Maven 的 group identifier 包含进来,这样模块命名就不太可能发生冲突。

#AutomaticModuleNames 允许开发者将他们的代码拆分成多个模块,而无需等待他们所使用的类库或框架支持 Jigsaw。

这一提案的关键之处在于, JAR 包里的一个 manifest 属性 Automatic-Module-Name。当 JAR 被放进模块路径时,这个属性的值会被用作模块的名字。如果模块路径里的 JAR 包没有提供这个属性,那么模块的名字就需要通过基于文件名的算法来计算得出。Reinhold 建议说:

通过这种机制,类库的维护者就可以很方便地维护一个稳定的模块。例如,在 Maven 里,通过 “pom.xml”里的几行代码就可以添加 manifest 属性。类库维护者在一开始就声明一个稳定的模块名,不需要等待它的依赖库实现模块化,而依赖该类库的软件包和应用可以立即实现模块化。

Oracle 已经在 Java 模块系统提案上进行了大量的工作,从 JSR 277 开始,至今已经有 12 年的时间。最初计划在 Java 7 里发布,后来延期到 Java 8,现在是 Java 9。这一提案从一开始就饱受争议。不过,到目前为止,社区方面已经对 Jigsaw 方案达成广泛的共识,Jigsaw 为分解 JDK 提供了必要的方案。问题在于,如果在 Java 9 里加入 Jigsaw,那么很多 Java 工具就无法工作。

查看英文原文: Reinhold Publishes Open Letter to JCP Pleading That JPMS (Jigsaw) Is Approved

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/jigsaw-open-letter?utm_source=news_about_java&utm_medium=link&utm_campaign=java

2017新兴技术企业大会:第二日回顾

4月19日,第十二届年度新兴技术企业大会(Emerging Technologies for the Enterprise Conference,ETE)在宾州费城山喜来登酒店迎来了第二个活动日。ETE大会由来自坐落于宾州福特华盛顿的IT咨询公司Chariot Solutions组织举办。大会第二日包括了一个主题演讲,由来自微软的首席项目经理和播客主播Scott Hanselman主持。第二日活动还包括了如下演讲嘉宾:GitHub工程经理Kyle Daigle、IBM首席工程师Holden Karau、甲骨文公司JVM技术主管Karen Kinnear、 Clojure Applied的联合作者Alex Miller和Symphonia公司联合创始人Mike Roberts

专题演讲

播客主播,同时也是来自微软的Outreach & Community(扶贫与社区)、开源项目工作者Scott Hanselman带来了题为“后端到前端的历史:从大型主机到编译型JavaScript以及未来”的演讲,拉开了第二日的序幕。Hanselman引用了计算机领域早年间(1949-1956)IBM主席Thomas J. Watson曾说过的话:“我想,5台计算机足以满足整个世界市场。”

Hanselman专注于早年间万维网与当今新兴的JavaScript技术。他说:“HTML表格曾经是网页开发中最先进的技术。”从早年间的LiveScript到如今被人熟知的JavaScript,他探索了这些年JavaScript的进化历程。Hanselman引用Secrets of a JavaScript Ninja这本书的时候,他质疑封面的角色是否真的像一个忍者。他开玩笑道:“嗯,JavaScript松散类型的。”

2017新兴技术企业大会:第二日回顾

随着JavaScript变得更受欢迎,Stack OverflowStack Exchange的联合创始人Jeff Atwood基于Berner-Lee的最小力量法则(The Rule of Least Power)提出了一个推论。这个推论即为人们所熟知的Atwood定理:“任何可以使用JavaScript编写的应用终将使用JavaScript来编写。” 在2011年,Hanselmans研究了JavaScript是如何成为网页的汇编语言。他声明:“没人在写JavaScript了,他们转而使用jQuery”。Hanselman还展示了一个可运行在浏览器中的单行JavaScript PC 模拟器。这个模拟器包含了一个控制台窗口。

Hanselman说,由于当今的浏览器有些令人迷惑性的强大,开发者应从网页开发工具中挖掘更多的潜能。他还声明:“浏览器插件已死”。

Hanselman还讨论了当今云服务技术的崛起与这项技术带来的大规模和易伸缩计算能力。他提出,由于“云计算不关心开发语言的选择”,开发者可以为云计算选择自己需要的开发语言。

尽管网页开发在这些年间有了长足的进步,Hanselman坚持认为开发者们依旧在“向冷藏柜中发送原料”。他是这样解释的:“大型主机就像冷藏柜,因此在当今我们还在向理论上处于天空中的冷藏柜 — 也就是云 — 发送原料 。”

重要演讲

Java的未来:模块化及其他。甲骨文JVM运行时主管Karen Kinnear

Kinnear提供了一个关于Java 9的综合性介绍,着重于新的模块系统,并检阅了Java 9相关的JEP(JDK Enhancement Proposals,JDK精进提案)。Java 9有提高开发者生产力、提升Java在云计算的表现的目标。Kinnear声明,新引入的模块系统可以集成到已有系统中。她向大会展示了模块和包之间交互和访问的细节,以及模块路径与类路径的区别。她还讨论了开发者们如何在出现不兼容问题时,维持向下兼容性,解决将已有系统向Java 9移植的问题。

使用Apache Spark做扩展(或者从一次意外后果中得到的教训)IBM Spark科技中心首席软件工程师Holden Karau

Karau讨论了关于处理包含DataFrames和Datasets在内的弹性分布式数据集(Resilient Distributed Datasets, RDD)会遇到的挑战。她着重讨论了数据划分,表达了“键偏斜”(key skew)的重要性,也就是键没有平均分布的问题。针对键偏斜可能会导致的数据划分不平衡问题,Karau分享了一些方法,以避免解决这个问题时可能碰到的陷阱。她强调了把全部有同样键的数据记录聚合到同一记录的groupByKey()函数,在运用到不平衡数据的时候可能会产生灾难性后果。Karau还简要概述了Spark Python API,PySpark

Clojure.spec:不使用类型系统表达数据约束。Cloure Applied联合作者、Clojure语言提交者Alex Miller

Miller介绍了Clojure.spec,这是一个用来表述数据和函数结构的Clojure库。设计上,它为Clojure语言提供了自动化属性,如验证、错误报告、共享语义以及测试数据生成。Clojure.spec不是一个类型系统,它的设计哲学着重于数据本身。Miller提供了大量源码例子,展示了如何使用Clojure.spec与语言核心特性进行配合。

使用Next.js库开发通用React应用Next.js联合作者Guillermo Rauch

Rauch将Next.js描述成“易用简洁通用性React.js”:通用性,指的是它可以同时运行在服务端和客户端;易用,指的是对大多数常用任务只要一条命令;简洁,指的是它定义了明确的边界,行为稳定并且可预测。他说,利用Next.js:“可以使用同一个通用软件模型(React)和语言(JavaScript),渲染简单的网页应用或是动态的实时应用。”Rauch把用Next.js重写的Hacker News网站作为展示。可以在他的网站上找到他的幻灯片

总结

第二日由25个演讲组成,话题包括:Java 9、Haskell、TensorFlow、Swift、Apache Spark, Containers、Convox、C#、F#、Agile和GraphQL。

编者的话

Michael Redlich(原文作者)自2008年开始积极参与ETE大会,并在最近(2013年)以成员的身份加入ETE指导委员会。

查看英文原文Emerging Technologies for the Enterprise Conference 2017: Day Two Recap


感谢薛命灯对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/day-two-philly-ete-2017?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Buoyant发布服务网格Linkerd的1.0版本

云原生软件公司Buoyant发布Linkerd(读作“linker-DEE”)的1.0版本,这是一个面向云原生微服务应用的开源“服务网格(service mesh)”。Buoyant首席技术官Oliver Gould论述了该版本的重大意义:

对于任何开源项目而言,1.0版本都是一个有意义的里程碑。就我们而言,这是承认我们的产品有了一个稳定的功能集合,我们的用户可以基于这些功能处理他们最关键的生产流量。同时,这也表明,我们今后将限制破坏配置的修改。

令人不敢相信的是,我们这样一个小项目竟然积累了一群令人惊叹的运营商和开发商。我不断为来自Linkerd社区的功能和集成所震惊;没有什么比听到Linkerd如何帮助团队完成他们的工作更让人高兴了,而且让他们少一点担心和不确定性。

Buoyant创始人兼首席执行官William Morgan补充道:

随着Linkerd达到1.0版本,我们很自豪地看到,在长长的采用者名单里,有类似Paypal、Credit Karma和Ticketmaster这样的公司。像这样高流量、高可靠性的公司正使用Linkerd服务网格作为更广泛努力的一部分,和类似Docker、Kubernetes这样的基础设施及云原生栈的其他部分一起,为他们的应用程序带来更高层次的可靠性和可扩展性。

Morgan阐述了服务网格的用途以及在云原生栈中有一个服务网格的重要性。GitHub上提供了在DockerKubernetes本机上运行Linkerd的入门示例。

在2017年3月份,Linkerd一周年之际,Morgan曾接受过InfoQ的独家采访。现在,Morgan就这个里程碑版本再次接受了InfoQ的采访。

InfoQ:请您向我们的读者介绍下该服务网格的愿景。在什么情况下,组织需要这样一个新的抽象来管理服务之间的通信?

Morgan:服务网格是一个处理服务间通信的基础设施层。它是栈中一个提升多服务应用可靠性和安全性的点,它为整个应用提供了一个统一的可视化和控制层。

如果你正在运营单体软件,或者有一个跃点数有限的架构,而它们由专用的客户端库(像一个三层应用)提供了很好的服务,那么可能没有这个也没问题。

但是,如果你正在构建“云原生”应用——现如今,这主要是指使用Docker、Kubernetes及微服务——那么,这种跨服务通信是构成应用程序运行时行为的重要部分。你不能忽视它。你必须监控它,你必须能够管控它。你需要一个像Linkerd这样的服务网格。

InfoQ:在服务之间最常见的中断类型中,有什么是特定于相对还比较新的、更现代化的微服务和容器架构吗?

Morgan:嗯,对于任何分布式系统而言,其中一个“有趣的”部分是,一个很小的局部故障可以通过很多方式逐步升级为系统故障,也就是臭名昭著的“级联故障”。例如,当发生某种临时故障时,你希望通过请求重试来处理。当然,重试会增加系统的负载。当大量的负载加到软件上,它就开始变慢,最终开始失败——或者变得非常慢,那和故障很难区分开来。因此,你处理失败的方式实际上可能让事情变得更糟糕。一个很小的部分开始变慢,你很快就增加负载,然后它停止运行,然后所有与它相关的一切都开始停止运行。

Linkerd就是设计用来处理这种情况的。它可以很好地减载,用恰当的方式失败,它能够使用不激化问题的方式重试。它还有其他功能,如安全、优化和探测,但真正让它变得至关紧要的是可靠性。

InfoQ:Linkerd 1.0版本有什么新增特性?其中最酷的新特性和功能是什么?

Morgan:Linkerd 1.0新增的一个重要的东西是服务网格API。服务网格的全部意义不只是到处部署一堆复杂的面向内部的复杂代理,然后说,嘿,我们现在具备了可靠性。服务网格的重点是服务之间的通信,将其移出不可见的隐形基础设施领域,赋予它生态系统一级成员的角色。此外,你希望这个关键的层次是可监控的、托管的、受控的。服务网格API就是你实现那些特性的基础。

在1.0中,我们还继续扩大和强化了我们和周边生态系统的集成——类似Kubernetes、 gRPC、Mesos、Consul、Prometheus和Zipkin这样的东西。服务网格是一个胶水层,许多Linkerd用户正使用它将Kubernetes嵌入到他们已有的基础设施,或者从容地在架构之间迁移服务。

InfoQ:在稳定性和“就绪状态”方面,1.0版本显然是一个巨大的里程碑。展望未来,在其他期望的功能中,您认为哪些功能区域是Linkerd用户最感兴趣的?

Morgan:在我们面前,有一个非常令人兴奋的路线图。目前为止,我们的重点主要是可靠性特性,结果,我们有了两个很棒的构建块——最好的服务度量和以任意方式进行流量路由的能力——两者结合可以实现非常强大的功能,如有原则地在数据中心之间进行故障转移,或者多云/混合云,或者基于延迟自动扩展。此外,我们希望进入的领域还包括策略执行、无服务器、计量和多租户计费等等,不胜枚举。

最后,稳定性、性能和资源消耗总是要重点考虑的。我们做了大量的跟踪工作,只为让Linkerd更快、更小、更轻量级,尤其是类似TLS这样的东西。

InfoQ:Linkerd在云原生基金会下——一般来说,您怎么看待云原生不断地成长为一种企业趋势?是哪些条件促使企业构建云原生应用程序?在接下来的一两年中,我们有望看到这种趋势对开发人员产生了什么影响?

Morgan:云原生的采用疯狂增长,而且节奏每天还在加快。不妨看下Docker或Kubernetes的采用率。我认为,对于企业而言,那是不可避免的,因为它与采用云联系在一起。实际上,云原生只是你针对云编写软件时所采用的模式的名称。一旦软件部署到了云上,你就不得不面对这样的现实,你过去拥有的、专有硬件带给你的所有可靠性保障都不复存在。你无法控制硬件、随机故障及其他租户的资源消耗,任何东西任何时候都可能出错。因此,如果你希望应用程序可靠、可扩展,那么在软件层面,所有这些都快发生了。你构建软件的方式确保了软件的可靠性和可扩展性,但你赖以构建的环境却根本不可靠——那就是云原生所关注的。

查看英文原文Buoyant Releases Version 1.0 of Their Service Mesh, Linkerd

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/buoyant-release-ver-1-of-linkerd?utm_source=news_about_java&utm_medium=link&utm_campaign=java

成为多语言程序员

年轻的IT开发人员在学校的几年中会学习几门编程语言,时间久了不用,甚至会忘记几门(Fortran、汇编等等)。Martin Thompson认为到他们上班的时候,学习的这些编程语言早已抛到脑后。

Zaiste的理念与Martin Thompson的恰好相反。他每年都会尝试学习一门新的语言,并将其用于项目中。他认为这样做非常重要,因此他举办了有关IT多语言主题的会议:PolyConf。PolyConf大会将于7月7日至7月9日在La Géode举行。InfoQ将以新闻、问答和文章的形式报道这次会议。

InfoQ FR采访了Zaiste,询问了他有关用不同语言编程的体验,不时换换编程语言的动机,不同语言模式之间的差别,他热爱的语言,以及今年PolyConf大会的主要内容。

InfoQ Fr能否请你首先介绍一下自己?

Zaiste:嗨,我是Zaiste。我在巴黎经营一家软件公司,我热爱在世界各地举办技术活动,其中PolyConf大会是规模最大的一个。大约12年前,我在银行业开启了编程的职业生涯,那时候我使用Struts 1和Spring工具以及Java编程语言。在这之前,我的工作比较偏学术方面,并且主要使用Python语言。2005年我开始使用Ruby和Rails,两年之后,我召开了有关Ruby和Python的会议,叫RuPy。现在我尤其喜欢用JavaScript语言写代码,特别是它的新版本,我自己也感到非常惊讶。我非常喜欢Clojure,也非常高兴看到OCaml和Reason社区能有时间深入探究。

InfoQ Fr: 你召开了有关多语言编程的PolyConf大会。为什么你认为IT多语言如此重要呢?

Zaiste:多语言编程不是指同时或在一个项目中使用不同的编程语言。而是指一种软件开发艺术的全方位手段。程序员应该更加深入地、综合地了解编程概念,而不仅仅只是精通一门编程语言。他们应该不断寻求如何改进他们的实践,以及最终如何推广和提升。我一直将米开朗基罗和达芬奇视为楷模,他们不仅仅是发明家、建筑师、设计师,还是画家和雕塑家。热衷于软件工艺的人不应该仅仅了解一两门编程语言。

人才市场需要人们提供多年相关经验来证明他们的技术才能。了解Angular通常不适合做React相关工作,但是这两者都是JavaScript解决方案,可以处理相同的问题。公司喜欢争取在某一方面受过良好训练的员工,他们在这一方面的特别技能会受到企业的青睐。然而,我建议企业去挑选知识全面的工程师,即使他们的简历中不会有太多关键词和吹嘘之词,但是公司更应该考虑雇佣更加这样的人才。

InfoQ Fr: 你是如何将多语言编程实践到日常工作中去的?

Zaiste:PolyConf大会对我来说是个理想的学习场所,能够帮助我加深对使用工具的理解,也帮助我从不同角度来看待问题并寻找解决方案。我能看到一些老旧的、不受欢迎的想法是如何重新流行起来的,一些被遗忘的点子又是怎样回到人们的视线中的。《多语言方法》一书让我对编程有了更加全面的看法。通过比较多种技术,我可以快速了解它们的优缺点和应用环境。

InfoQ Fr: 你最期待学习使用的新语言是哪些?

Zaiste:我最近非常喜爱Rust和OCaml,它们都各具特色。Rust是非常快的系统编程语言,而OCaml是多范式语言,在类似ML这样的系统下统一了功能化、命令行化和面向对象编程。

InfoQ Fr: 有许多多语言编程相关的会议。PolyConf大会更侧重于什么?

Zaiste:有好多个有关多语言编程的会议,我也非常期待新的会议的出现。我举办PolyConf大会的目的是促进不同编程语言和社区之间的交流。我们期望成为实现最终目标的助力之一。

InfoQ Fr: 作为PolyConf 2017大会的与会者之一,我将在这次会议上看到什么?

Zaiste:今年会更加偏重于虚拟机内容。Chris Seaton将会介绍Graal:目标实现高性能Java动态编译器和Ruby环境下的解释器的一款Oracle项目。Maxime Chevalier-Boisvert将会介绍她正在搭建的动态语言平台。Jack Moffitt将向我们展示Servo:Rust语言编写的Web浏览器引擎原型,而Etiene Dalcol将和我们探讨Lua和LuaJIT。这只是整个大会的一小部分内容,要想获得更多内容,请持续关注。

查看英文原文Being a Polyglot Programmer


感谢冬雨对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/05/being-polyglot-programmer?utm_source=news_about_java&utm_medium=link&utm_campaign=java