InfoQ中国站发表了一篇卫滨张兄的文章“Java应用服务器前途堪忧”,链接为http://www.infoq.com/cn/news/2014/05/application-servers-are-dead。仔细看进去,Eberhard Wolff的演示稿写的很好,有针对性的分析了目前应用服务器当前的状态和存在的一些问题,提出微服务和持久交付会对应用服务器市场产生冲击,这个技术趋势我非常赞同,但是演示稿的确有标题党和片面下结论之嫌。接下来我就从应用服务器的历史发展,需求由来和互联网浪潮对其促进变化谈谈个人的观点,在一些地方辅以技术说明。
早期一些计算机教科书里写软件可以分为两大类,科学计算和业务管理,我认为是很有道理的,这种分类很好的匹配了现代计算机体系的两大主要部件:CPU和内存,一个负责计算,另一个负责存放状态数据。向后推导,进一步产生面向函数和面向对象的编程语言;软件体系架构选择聚焦在海量数据并发访问,还是选择企业应用系统事务为先。在设计一个软件之前,仔细想想这个软件是给什么人用,同时有多少人用,它的需求或者说要完成什么功能,对事务的要求高么,中间环境需要人为干预么,要积累多少业务数据,用户怎么使用最方便。这些问题一旦有了答案,软件的架构基本上就呼之欲出了。
软件的发展离不开和同期硬件能力的匹配,原先CPU是单个,需要分时分配给不同任务使用,内存更是宝贵的资源。在这种环境限制下,再加上专心做一件事的天性使然,程序员在编写程序时,会非常自然的按照时序来书写程序,所以在当代程序员的开发基因中,本能的排斥各种加锁,各种干扰程序正常流程的操作。就和我们去银行办业务,你会抱怨别的顾客插队打岔,柜员中途离开,或者你被要求到外面先填单子等一样。我们的软件框架及容器为了让开发者更快捷的编程,从各种非业务技术难点中解脱出来,会充分利用语言能力和编译/部署手段。
上世纪90年代互联网开始普及,分布式计算技术开始迅速发展,过去针对单机编写的应用程序需要移植部署在互联网上。但无论是科学计算还是业务管理应用软件,适应互联网都是一个“缓慢”的过程。在经典的企业软件设计书籍里,比如 Martin Flowler 的“企业应用架构模式”里建议慎重使用分布对象,Rod Johnson的经典“J2EE development without EJB”更是通篇对早期远程EJB进行鞭挞,而如今互联网应用中完全贯彻SOA思想,几乎全部的接口都是无状态的分布式设计方案,目前Spring社区也在主推 MicroServices 分布协作。是不是感到困惑?是大师们偏颇还是当前的架构出了问题?其实站在各自目标应用立场上,放在当时的技术背景下,都是对的。绝大多数的企业应用都不需要分布,或者说在单一领域根操作时应避免分布;而互联网网站面向海量用户,需要成千上万的机器来保障服务,天生需要分布。
那么对JavaEE中的代表EJB规范,究竟该怎么评点呢?不能以单纯好坏论之,我的观点是EJB承担了太多的责任。1.线程安全的对象。前面说过容器试图解脱程序员,开发EJB对象,是不需要考虑并发的,反而要限制你不能创建线程(3.1之前)。同时非共享成员变量也带来状态的安全,这个重要知识点并没有在程序员中深入人心;2.AOP模式的实现,可以做到让开发者聚焦业务逻辑,事务,安全等上下文信息通过容器隐式传递;3.分布式对象实现。远程EJB设计没有太大问题,关键缺憾是基于Corba相关协议和技术过时。另外对异步式支持不足,无论是异步接口还是MDB的定义,规范定义都不到位。4.还有Timer,StatefulSessionBean等内容,早期甚至还有EntityBean。
剖析EJB,其实就是在分析应用服务器,它们都面临同样的问题:太过于庞大,开发者在经验不足时很难全面把握,从而产生厌恶感。我们知道所谓规范是多个软件大厂商妥协的产物,有太多的非实用主义掺杂在里面。但还是由市场驱动的,是知识经验的凝聚。过去这几年中,除了其他语言方案,就是Java自己内部,各种技术框架就层出不穷。但我们看到无论是Spring还是OSGi,目前都不得不适应JavaEE很多子规范,比如Servlet, JPA等等。因为这些规范更好更全面的揭示了软件开发的内在原则。
Servlet是Java适配HTTP协议而设计的规范,简单好用,关键之处在于,其中的基础接口揭示了面向网络编程最重要的内容:包含消息内容的Request/Response,传递上下文的Context,状态传递的Session,拦截逻辑的Filter,各种Listener接收事件,当然还有软件执行点Servlet,和谐而稳定的构造出一个框架。同样的,JPA是Java适配关系数据库和SQL查询而设计的规范,它试图把持久介质上的关系图谱映射到内存中,使得开发人员即便面对很复杂的关系数据表格和业务逻辑,也能找到线索来理清纷繁头绪。大多数优良的JavaEE规范都是按照这个逻辑思路设计的,所以我建议涉足企业应用开发的程序员,都应该全面系统的学习JavaEE知识,相信会收益非浅。
技术和工具,只有最合适自己的才是最好的,而应用服务器在过去就承载了太多的技术期望。传统的软件采购中,中间件是其中金额很小的一块,但不光要承担应用容器载体职责,还有软件开发,架构设计,部署,监控,升级,安全之种种。面对这么多技术内容,非IT基础架构的企业是不可能,也没有能力能够全部玩转的。他们希望有一个方案,软件供应商可以通过培训让他们的技术员工能掌握部署,管理运维和部分开发定制,系统的整体一致和组件标准化是他们考量的一个重要因素。软件是由程序员开发的,其中的价值和知识凝聚在代码,文档,图示中,甚至更多在程序员的头脑里。最好的软件精华部分,就和一本好书,一支好曲子,一座百年大桥的主要设计方案一样,是由一个人或者少数人组成的团队掌控者。但软件是需要传播的,使用软件的企业也希望用的东西透明公开,可以不去了解细节,但不愿意毫无知情权。这个也是开源运动成功的关键所在。就和我们去吃庆丰包子,透明的玻璃窗后能看到包子的整个制作流程,其实客户并不关心这个包子如何做,只是这种公开透明让人产生信任,从而愿意花钱买包子而节省自己的时间。应用服务器就是帮助企业用户来节省时间,屏蔽复杂度,减少技术理解鸿沟的产品。
现在是互联网时代,别的不说,人人看得见一种鲜明对比:互联网的如日中天和企业软件厂商的不景气。互联网公司有软件平台和自己的盈利模式,它们需要构建自己的技术平台来满足自己的业务需求,开发人力是最宝贵的资源。它们可以投入大量的人力物力来打磨每一个技术细节,不为别的,就为了更好的满足自己需求。但问题是,对于非技术企业来说,它们的方案适合么?有同样的技术能力保障么?能获得后续的商业支持么?为什么说开源好,有标准好,就是因为绝大多数软件项目,即使做的再好,围绕其工作的人都是有限的,那么开放的标准的技术会有更多的人书写博客,制作文档,贡献代码,测试功能性能,不断打磨使之成熟。越来越多的互联网企业也看到这一点,尤其一些国外的互联网巨头,对开源做出了巨大的贡献。对一般企业来说,建议选择开源技术,并且选择软件产商来获得专业服务支持。
还有一个变革是Linux作为基础服务器和云计算的普及。Linux是开源而成熟的操作系统,如今已成为整个互联网的基础之一,越来越多工程师掌握了Linux知识和可以对其进行定制裁剪。软件应用最终要找一个载体,在原来Windows如日中天的微软时代,Java虚拟机作为一个可以跨越操作系统的平台,是最好的选择。如今Linux也可以做到以进程为单位,操作系统为容器,加上资源隔离,微服务等技术方式,一个和应用服务器竞争的方案产生了。我个人非常看好这个趋势,尤其认为改良后的PAAS是应用服务器的发展方向,因为可以更和谐的满足开发和部署业务程序的需要。但这有一个过程,还有面对一开始就提出的问题,是什么业务场景,客户IT应用水平等因素都需要考量。在国内,多数企业还是以windows平台为主,那么微服务这个技术推行还需以时日,即便在互联网等企业中,同样也有企业应用如财务系统,HR系统等需求,这些应用还是由JavaEE的子规范技术开发占主导地位。
所以软件应用架构没有银弹,必须根据业务的特点和自身的技术实力来选择最好的技术方案。
相关推荐
为了深入探讨这个话题,一场汇集了业内顶尖人士的论坛举行,围绕计算机未来发展的各个层面进行了广泛的讨论。 首先,在计算机发展的未来趋势方面,专家们普遍认为移动化、云计算化和智能化将是未来发展的三大关键词...
本文将深入探讨云计算的基本概念、优势、现状以及未来发展趋势,并分析其在实际应用中可能面临的挑战。 ### 一、云计算的基本概念 云计算是一种基于互联网的计算方式,它通过大规模的数据中心提供共享的计算资源和...
未来,它们可能会进一步集成第五层至第七层的交换功能,实现更高级别的应用感知和智能管理。同时,随着SDN(软件定义网络)和NFV(网络功能虚拟化)技术的崛起,第四层交换机的灵活性和可编程性将进一步增强,以适应...
智能化是计算机未来发展的重要方向之一。通过模拟人类的感觉和思维方式,计算机能够执行更复杂的任务,如模式识别、自然语言处理、智能决策等。人工智能的发展正逐步改变人们的生活方式和工作模式。 **3. 网络化** ...
### 浅谈云计算——未来网络趋势技术 #### 引言 随着互联网技术的快速发展,新的概念和技术不断涌现,改变了我们获取、处理和分享信息的方式。其中,“云计算”作为一项前沿技术,正在引领着信息技术的新潮流。它...
随着互联网技术的快速发展,新的概念和技术不断涌现,其中“云计算”(Cloud Computing)作为一项重要的网络技术,正逐渐成为改变未来网络格局的关键力量。云计算不仅能够提高网络的稳定性,还能有效降低成本。本文...
云计算是一种以互联网为基础的计算...未来,随着相关技术的不断进步与完善,云计算在教育领域的应用将会更加广泛,将推动教育信息化进程,促进教育公平,实现教育资源的优化配置,为未来教育技术的发展注入新的活力。
【服务机器人的定义与分类】 服务机器人是一种设计用于在非结构化环境中协助人类完成各种任务的机器人。...了解和研究服务机器人的应用现状和发展前景,有助于我们更好地把握这一新兴领域的机遇与挑战。
同时,边缘计算的发展将把计算和存储能力推向网络的边缘,减少对中心服务器的依赖,提高响应速度和隐私保护。 总的来说,计算机网络技术的发展将持续推动社会进步,改变生活方式,促进全球化交流,并且在教育、医疗...
云计算在网络体系构建中的应用分析 云计算作为一种先进的计算方式,近年来在互联网行业得到了广泛...相关技术人员应当紧跟云计算技术的发展潮流,合理解决应用中的问题,以促进云计算在未来网络体系构建中的更好发展。
未来,我们可以预见以下几个发展趋势: 1. **云计算与边缘计算的融合**:Linux集群可能会与云计算平台结合,实现更灵活的资源调度和更大规模的计算能力扩展。 2. **大数据分析的强化**:随着石油行业对大数据处理...
### 双核Intel处理器在IBM System x服务器中的运算优势 #### 概述 随着处理器技术的不断进步,从单核到多核...未来,随着技术的进一步发展,我们可以期待更加高效能、低功耗的多核处理器在服务器领域发挥更大的作用。
(1)知晓云:提供数据存储、实时同步、云函数等后端服务,简化小程序的服务器开发。 (2)Taro:一个多端开发框架,支持微信、支付宝、百度等多平台的小程序开发。 (3)Wepy:基于Vue.js的微信小程序开发框架,让...
未来,计算机网络技术将持续发展,例如,5G网络的普及将带来更快的数据传输速度和更低的延迟,边缘计算将提高数据处理的效率,物联网技术将连接更多的智能设备,区块链技术有望改进网络安全和数据隐私,而量子通信则...
随着技术的进步和社区的不断努力,Linux在易用性方面的不足正在逐步改善,未来有望在更多领域得到广泛应用。对于IT专业人士而言,深入理解和掌握Linux网络服务,无疑将对职业生涯有极大的助益。
本文将从多个角度对电子信息技术的应用及未来发展方向进行分析。 首先,电子信息技术的强适应性表现在其能够在人们的生活中站稳脚跟。电子信息技术快速发展的同时,也带来了一些问题和挑战,但它展现出了巨大的发展...
从部分内容中,我们可以看到IPMI规范在服务器监控中的具体应用,它不仅包括了网络状态的监控,还涵盖了被管理服务器的静态信息和动态信息。静态信息包括CPU、内存、硬盘等硬件的基本信息,而动态信息则包括硬件的...
【标题】:“浅谈虚拟化集群技术在消防业务中的应用” 【描述】:本文探讨了虚拟化集群技术如何在消防业务中发挥关键作用,解决...随着技术的不断发展和完善,未来虚拟化集群技术在消防领域的应用将更加广泛和深入。
【标题】:基于虚拟服务器的农业气象现代化平台的实现 【描述】:本文探讨了如何利用虚拟服务器...未来,随着科技的进步,这种平台将继续发挥关键作用,推动农业气象服务的智能化和精细化,助力我国农业的可持续发展。