从框架到平台

当我将近十年前作为Java开发人员开始我的职业生涯时,该行业正在经历革命性的变化。 Spring框架(于2003年发布)Swift发展起来,并成为庞大的J2EE平台的严重挑战者。 经过过渡时间后,我很快发现自己赞成使用Spring框架而不是J2EE平台,即使是早期版本的Spring,声明bean也非常乏味。

接下来发生的是对J2EE标准的改进,该标准后来被重命名为JEE。 尽管如此,在这个时代占主导地位的仍然是在Sun提出的平台上使用开源框架。 这种做法使开发人员可以完全控制他们使用的技术,但会扩大部署规模。 慢慢地,当云应用程序成为现代应用程序的规范时,我观察到了将基础架构服务再次从框架迁移到平台的趋势。 但是,这次,它不是受Cloud应用程序的驱动。

框架与平台

我从未听说过或不得不在学校使用任何框架。 但是,在加入该行业后,如果没有任何框架的帮助,就很难构建可扩展和可配置的软件。

据我了解,任何应用程序都包含实现业务逻辑的代码以及一些其他帮助程序,实用程序或用于设置基础结构的代码。 在许多项目中重复使用的与业务逻辑无关的代码可以被概括并提取出来以供重用。 此提取过程的输出是框架。

简而言之,框架是与业务逻辑无关但有助于解决应用程序中常见问题并适合重用的任何代码。

如果遵循此定义,则MVC,依赖注入,缓存,JDBC模板,ORM都是考虑的框架。

平台与框架相似,因为它也有助于解决应用程序中的常见问题,但是与框架相反,该服务是在应用程序外部提供的。 因此,公共服务端点可以同时为多个应用程序提供服务。 JEE应用程序服务器或Amazon Web Services提供的服务是平台的示例。

比较这两种方法,平台比框架更具可扩展性,更易于使用,但它提供的控制更少。 由于这些优势,平台似乎是构建Cloud Application时更好的使用方法。

我们什么时候应该在框架之上使用平台

转向平台并不能保证开发人员会摆脱框架。 相反,平台仅是构建应用程序时对框架的补充。 但是,在某些特殊情况下,我们可以选择使用平台或框架来实现最终目标。 我个人认为,在满足以下条件时,平台比框架更好:

  • 框架使用和维护都很繁琐
  • 该服务具有一些在实例之间共享的公共信息。
  • 可以利用其他硬件来提高性能。

在办公室中,我们仍在应用程序中使用Spring框架,Play框架或RoR,并且这不会很快改变。 但是,为了进入云时代,我们将一些现有产品从内部托管迁移到了Amazon EC2服务器。 为了充分利用Amazon基础架构并提高软件质量,我们对当前的软件架构进行了一些重大重构。

以下是一些我们要将产品集成到的平台:

Amazon Simple Storage Service(Amazon S3)和Amazon Cloud Front

我们发现,Amazon Cloud Front对于提高应用程序的平均响应时间非常有用。 以前,我们在英国和美国的内部服务器场中托管大多数应用程序。 这导致其他大洲客户的响应时间显着增加。 幸运的是,亚马逊拥有更强大的基础架构,其服务器场遍布全球。 无论客户身在何处,这都有助于确保包裹的交货时间恒定。

当前,由于手动为应用程序设置新实例,我们认为Amazon Cloud Front的最佳用途是使用静态内容,该内容与Amazon S3中的应用程序分开托管。 这种做法使CDN提供了更一致的交付时间,同时在浏览器中为静态内容提供了单独的连接计数,从而为我们带来了性能上的双重好处。

亚马逊弹性缓存

在集群环境中进行缓存从未如此简单。 “群集”一词意味着您的对象将不会被存储或从系统内存中检索。 相反,它是通过网络发送和检索的。 过去,此任务非常棘手,因为开发人员需要将记录从一个节点同步到另一个节点。 不幸的是,并非所有的缓存框架都自动支持此功能。 最佳的分布式缓存框架是Terracotta 。

现在,我们转向Amazon Elastic Cache,因为它便宜,可靠,并且为我们节省了设置和维护分布式缓存的巨大精力。 值得强调的是,分布式缓存决不是要取代本地缓存。 性能上的差异表明,仅当用户需要访问实时临时数据时,才应在本地缓存上使用分布式缓存。

数据分析的事件记录

过去,我们使用Google Analytics(分析)来分析用户行为,但后来决定建立内部数据仓库。 动机之一是能够跟踪来自浏览器和服务器的事件。 事件跟踪系统使用MongoDB作为数据库,因为它允许我们快速存储大量事件。

为了简化事件的创建和检索,我们选择JSON作为事件的格式。 由于浏览器无法防止跨域攻击,因此我们不能简单地将此事件直接发送到事件跟踪服务器。 因此,Google Analytic将事件以对静态资源的GET请求的形式发送到服务器。 由于我们完全控制应用程序的构建方式,因此我们选择让事件先发送回应用程序服务器,然后再路由到事件跟踪服务器。 这种方法更加方便和强大。

知识门户

过去,应用程序从数据库或内部文件存储库访问数据。 但是,为了能够更好地扩展,我们收集了所有知识以构建知识门户。 我们还构建了查询语言来从该门户检索知识。 这种方法为知识检索过程增加了一层,但对我们来说幸运的是,我们的系统不需要提供实时数据。 因此,我们可以利用缓存来提高性能。

结论

以上是我们在迁移到云时转换软件架构的一些经验。 请与我们分享您的经验和意见。

翻译自: https://www.javacodegeeks.com/2014/07/from-framework-to-platform.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于setTimeout和setInterval的函数参数问题

今天在写验证码倒计时小demo时,用了如下代码: window.setTimeout(count(num),1000);这样直接使用将使count函数立即执行,并将返回值传递给setTimeout函数作为参数,其结果并不是真正需要的,所以会出现问题。 方法一 …

课堂作业2

1、动手动脑 阅读示例: EnumTest.java,运行它,分析运行结果?你能得到什么结论?你掌握了枚举类型的基本用法了吗? public class EnumTest {public static void main(String[] args) {Size sSize.SMALL;Size tSize.LARGE…

(转)详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页)...

1、怎么使得程序窗口左上角和任务栏有图标,如下图所示: 其实这个问题不应该放到程序打包这部分讲,只不过对于一些初学者而言,在这提下也许会有很大的帮助(想到自己刚学.net那会了,呵呵)。方法之…

复合双重错误

总览 在上一篇文章中,我概述了为什么BigDecimal大部分时间都不是答案。 虽然可以构造double会产生错误的情况,但在BigDecimal遇到错误的情况下构造情况也一样容易。 BigDecimal更容易正确,但更容易出错。 轶事证据表明,初级开发人…

vue入门学习示例

鄙人一直是用angular框架的&#xff0c;所以顺便比较了一下。 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>vue实践</title>6 <script src"http://cdn.bootcss.…

项目实战报异常Exception及决绝方案

1、报LifecycleException&#xff0c;再配置一下jdk即可&#xff0c;然后再手动添加maven 解决方法&#xff1a; 然后,手动添加jar包 2、maven 项目,右键maven build启动项目的时候&#xff0c;报下面错误&#xff0c;没有在pom配置tomcat7插件 3、报找不到beans插件:更新一下项…

世界主要遥感卫星

世界主要遥感卫星QuickbirdSpot-4Spot-4法国“太阳神”1A神舟飞船神舟飞船“哈勃”望远镜RADASAT神舟飞船国际空间站国际空间站 SPOT2Shutsacn IKONOS CBERS-1JersSpot-4 “哈勃”望远镜 CBERS-1 Landsat 5美国“KH-11”侦察卫星 Spot-5 ERS Landsat 7OrbView-3 美国间谍卫星…

VMware配置linux网络步骤

1.我们要用桥接网络模式 2.设置桥接网络&#xff0c;VMnet1或者VMnet0就是桥接网络&#xff0c;我们用的就是桥接 VMnet8是NAT 在上面的图配置好ip和dns&#xff0c;要与windowss是同一个网段&#xff0c;网关一般不设置 3.设置linux网络里面设置这4项&#xff0c;记住dns可以不…

使用IntelliJ书签

这是有关IntelliJ的精美书签功能的快速帖子。 IntelliJ使您可以为单行代码添加书签。 将某行添加为书签后&#xff0c;您可以使用多种方法直接跳回到该行。 因此&#xff0c;最好在您经常使用的代码位置添加书签。 要创建一个新书签&#xff0c;只需在代码编辑器中按F11键。 …

用js写水仙花数

...js//输入一个三位数&#xff0c;水仙花数就是个位的三次方 十为的三次方 百位的三次方之和等于本身console.log(请输入一个三位数&#xff1a;);let a readline.question();if (a > 100 && a < 999) {if (parseInt(a / 100) ** 3 parseInt(a % 100 / 10) ** …

keras 打印模型图

keras中可以使用 from keras.utils import plot_model plot_model(model,to_filemodel_auth.png,show_shapesTrue) #show_shapesTrue可以把输入输出的shape一起打印 注意&#xff0c;最好是给每个层命名&#xff0c;命名好之后打印出来的才会带名字。程序运行的时候也有一定的指…

C# -- 多线程向同一文件写入

1. 多线程向同一文件写入Log. public delegate void AsyncLog(string str1, string str2);private void Test() {Console.WriteLine("Test Start...");for (int i 0; i < 100; i){AsyncLog asyLog1 new AsyncLog(WriteLog);asyLog1.BeginInvoke("EventActi…

Java中的命名参数

创建具有许多参数的方法是一个主要的缺点。 每当需要创建这样的方法时&#xff0c;就在空气中闻一闻&#xff1a;这是代码的味道。 强化单元测试&#xff0c;然后进行重构。 没有借口&#xff0c;没有屁股。 重构&#xff01; 使用构建器模式&#xff0c;甚至更好地使用Fluent …

CSS学习笔记3:选择器及优先级

CSS选择器的类型&#xff1a;标签选择器类选择器ID选择器全局选择器群组选择器后代选择器 1.标签选择器&#xff1a;以HTML的标签作为选择器&#xff0c;凡是选择了一个标签&#xff0c;那么所有这个标签的内容都是用了css样式用法很简单&#xff0c;直接在style中 标签{}即可声…

Eclipse开发,编译,打包常见问题总结------持续更新

在使用Eclipse开发&#xff0c;编译&#xff0c;打包常见问题如下&#xff1a; 1、 保证本地开发的客户端与服务端使用的jdk版本一致 2、 保证本地开发的客户端与服务端使用的依赖jar包版本一致&#xff08;比如本地thrift 客户端使用的libthrift版本和服务端使用的libthrift…

ECMA-335 (CLI) 标准 读书笔记——总结CLI类型系统(上)

看到类型系统的概述时&#xff0c;就忍不住按图索骥&#xff0c;想搞清楚CLI如何定义的整个类型系统。于是翻遍了整个标准&#xff0c;将类型系统中最核心的、与运行平台密切相关的类型定义与说明整理了出来&#xff0c;以供理清思路。 标准的第四部指出&#xff0c;CLI的核心是…

流口水可执行模型

可执行模型是对引擎处理的Drools最低级别模型的重新设计。 在当前的系列&#xff08;最多6.x&#xff09;中&#xff0c;可执行模型在过去的8年中有机地增长了&#xff0c;从未真正成为最终用户的目标。 建议那些希望以编程方式编写规则的人通过代码生成和目标drl来完成&#x…

centos7安装openjdk8

首先&#xff0c;打开openjdk安装官网 http://openjdk.java.net/install/ 输入安装命令&#xff1a; su -c "yum install java-1.8.0-openjdk" 装完之后会有提示版本跟安装的路径&#xff1b;在/usr/lib/jvm下可以查看到对应的名字&#xff0c;ls-l 配置环境变量&…

CSB文件上传漏洞 -->Day4(图片挂马)

22二号&#xff0c;冬至啦&#xff0c;深圳这边只有5&#xff08;尊嘟好冷啊&#xff09;&#xff0c;写这篇文章的时候都已经是凌晨一点了&#xff0c;相信大部分的人都在温暖的被窝里面了吧&#xff01;&#xff01;&#xff08;可怜的我&#xff0c;还得写writeup&#xff0…

微信小程序禁止刷新之后苹果端还可以下拉的问题

一、问题描述 最近在做一个小程序项目&#xff0c;需要禁止下拉刷新&#xff0c;于是在page.json里面添加了这段话 "enablePullDownRefresh":false 全局关闭下拉刷新&#xff0c;这段话确实禁止了下拉刷新&#xff0c;无论是安卓手机端还是苹果端&#xff0c;但是在…