使用VERT.X构建分布式企业级应用
谈到企业应用,就得谈分布式、低耦合、模块化、面向服务、可扩展性等等。早些时候的技术有CORBA和EJB,后面兴起的有WebService和MDB。但是这些技术不是学习、开发门槛高就是不那么轻量化。我现在已经想不起10年前去面试时,别人问我的任何关于EJB (EJB2)的问题,可见它对于初学者来说有多少让人困惑。至于CORBA,就更不用说了,直到后来写研究生论文我才查了查关于它的资料,到现在已经全都记不起来了。随着Web技术的进步和移动应用的大量需求的出现,人们更倾向于轻量化、易部署的基于HTTP的RESTful服务,这种服务不是传统意义的WebService,而是单传的HTTP请求和相应,相应的形式主要是结构化的文档,如XML和JSON,后者尤甚。这种HTTP服务脱离了特定的技术框架,具有良好的兼容性,无论是BS结构还是CS结构,无论是PC上还是在移动客户端上,都可以享受这种技术带来的便利性。
恰逢其时,Node.js的出现将这种技术潮流推到了顶峰,人们一方面可以在google的光环下进行一种全新技术手段、架构的尝试,因为node.js采用的是google的javascript v8引擎,google在浏览器短的所向披靡和良好口碑给了那些技术选型人或者架构这最好的信心或借口,而不用劳神费力去说服上司或大小别人的顾虑;另一方面,JavaScript技术在BS体系中大行其道为其在服务端的应用提供了良好的土壤,人们不必像写传统的Java服务端程序一样需要规规矩矩的定义接口和类,创建对象,而是更多地享受这种语言的随意性带来的好处。当然,我在这里并不是说在JavaScript里我们并不需要良好的设计,相反,充分利用JavaScript语言的各种特性进行良好的分离、封装更能体现这门语言的强大,这在各种客户端JavaScript框架中已经得到了验证。另外不得不提的是,JavaScript在服务端的发展与MongoDB这类伴随互联网兴起的NoSQL数据库是分不开的,毕竟它省去了不少人对使用JavaScript进行持久化的烦恼。
这边厢人们争相恐后地向JavaScript靠拢,抛弃各种应用服务器,纷纷采用node.js,更有LinkedIn的成功案例在前。Java社区的焦虑和迫切可想而知,前途和方向的不确定性在开发者中蔓延开来。要知道Java社区从来不是一个自甘寂寞的群体,凭借着其强大的基础以及各个领域的深耕细作,提供一种类似甚至超越node.js的解决方案近在咫尺。就在大家彷徨和疑惑之际,VERT.X横空出世了,一举夺得Jax 2014最佳Java创新大奖。VERT.X以Netty NIO为基础,实现了在JVM中的事件回调机制。对于传统的Java程序员来讲,这虽然意味着编程方式的变化,但是为他们面向事件编程,基于线程的多任务并行处理提供了很好的编程模型,避免陷入多线程的数据同步的陷阱。同时,得益于VERT.X的模块化、集群部署和HA,分离已有系统和新构建的HTTP服务模块,它充分发挥了Java构建服务端的优势,比如采用spring框架传统的业务层和持久层。要知道,Java资源的丰富是JavaScript所远远不能比拟的。而且,VERT.X通过Rihon JavaScript (VERT.X 2.x)等引擎,已经允许人们根据业务场景选择适用的语言编写程序。一言以蔽之,VERT.X一举打通了HTTP服务提供层通向浩瀚的Java资源海洋的道路。但就JavaScript来讲,JDK8对它的实现足以给我们一种信心,那就是Oracle官方的支持,足以让VERT.X与node.js在使用JavaScript构建服务上相抗衡。不可否认,node.js已经具有相当的规模,但VERT.X凭借其与Java的天然优势足以弥补JavaScript类库不足的短板。要知道,今天很多系统都是基于Java创建的,断然抛弃现有的Java系统,采用JavaScript在node.js上重新开发对企业来讲实在不算一笔额算的买卖。
总而言之,采用VERT.X既能保证对既有资源的合理利用,又能实现满足不同客户端需求的HTTP服务的快速开发,对企业来讲,不可谓不是一种两全其美的方法。在后面我将会阐述我对使用VERT.X构建企业应用的架构和设计。
使用VERT.X构建分布式企业级应用的更多相关文章
- 利用Vert.x构建简单的API 服务、分布式服务
目前已经使用Vertx已经一年多了,虽然没有太多的造诣,但也已在项目中推广了下:从最初的vertx搭建web服务,到项目上线运营,还算比较稳定.再到后来尝试搭建基于vertx的分布式服务,一路下来也积 ...
- 使用Vert.x构建Web服务器和消息系统
如果你对Node.js感兴趣,Vert.x可能是你的下一个大事件:一个建立在JVM上一个类似的架构企业制度. 这一部分介绍Vert.x是通过两个动手的例子(基于Vert.x 2.0). 当Node.j ...
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...
- Netty构建分布式消息队列实现原理浅析
在本人的上一篇博客文章:Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇 中,重点向大家介绍了AvatarMQ主要构成模块以及目前存在的优缺点.最后以一个生产者.消费者传递消息的例子, ...
- 基于Dubbo框架构建分布式服务(一)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- 基于Dubbo框架构建分布式服务
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- Redis构建分布式锁
1.前言 为什么要构建锁呢?因为构建合适的锁可以在高并发下能够保持数据的一致性,即客户端在执行连贯的命令时上锁的数据不会被别的客户端的更改而发生错误.同时还能够保证命令执行的成功率. 看到这里你不禁要 ...
- selenium结合docker构建分布式测试环境
selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...
- [转载] 基于Dubbo框架构建分布式服务
转载自http://shiyanjun.cn/archives/1075.html Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务 ...
随机推荐
- leetcode@ [36/37] Valid Sudoku / Sudoku Solver
https://leetcode.com/problems/valid-sudoku/ Determine if a Sudoku is valid, according to: Sudoku Puz ...
- pcb原理图注意问题大汇总
1. 元器件之间连线用Wire(■)命令而不是用Line( /)命令,虽然从表面上看,两者都是直线,只是颜色稍有些不同,但用Wire(■)命令放置的导线是具有电气特性的,而用Line(/)命令放置的直 ...
- JBOss 端口没占用!
打开exlipse ,启动服务器 后,报如下错误:
- Resharp非常实用的快捷键
Alt+Home 定位到父类.父接口 Alt + End 定位到子类 Ctrl+T 快速在整个解决方案下搜索 类型.方法.文件夹 Alt+Ctrl+Spance 给出提示框 Shift+F ...
- Dom深入浅出
Dom1级提供了一个Node接口,该接口将由Dom中所有节点类型(包括元素节点.文本节点.属性节点等12种)实现,而js是作为Node类型来实现的,js中的所有节点类型的继承自Node类型, 所以它们 ...
- Winform- 界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用
布局控件"WeifenLuo.WinFormsUI.Docking"是一个非常棒的开源控件,用过的人都深有体会,该控件之强大.美观.不亚于商业控件.而且控件使用也是比较简单的. 实 ...
- 对PostgreSQL cmin和cmax的理解
看例子: 开两个终端来对比: 在终端A: [pgsql@localhost bin]$ ./psql psql () Type "help" for help. pgsql=# b ...
- Codeforces Round #324 (Div. 2) B. Kolya and Tanya 快速幂
B. Kolya and Tanya Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/584/pro ...
- 学习笔记之SQL
--------参考网站-------- http://en.wikipedia.org/wiki/SQL SQL@Wiki http://en.wikipedia.org/wiki/Delete_% ...
- ADO.Net的小知识(连接数据库)二
上次提到数据库连接有两种形式断开式连接和打开式连接,断开式连接我已经讲解了,下面我来给大家讲解一下打开式连接 (1)引入命名空间:using System.Data.SqlClient; 该语句用于导 ...