服务扩展
本章我们讨论扩展IM服务。编程语言选用Java 1.8+,使用Vert.x框架。
选型考量:
- Vert.x 可以很好的开发出高并发服务器。
- Vert.x 强大的Event Bus机制允许在浏览器中运行的客户端JavaScript在上相互通信
Vert.x简介
Vert.x 是一个用于下一代异步、可伸缩、并发应用的框架,旨在为 JVM 提供一个 Node.js 的替代方案。开发者可以通过它使用 JavaScript、Ruby、Groovy、Java、甚至是混合语言来编写应用。
Vert.x 是一套异步编程框架,是事件驱动的,其处理请求的高性能也是基于其事件机制。Vert.x 结合了异步编程在高并发领域的优势和现代JVM优良的计算性能,在工业级高并发处理领域有卓越优势。Vert.x可以更自然更高效的利用多核CPU资源。
从工程协作角度考虑,我们使用Java做为首选语言,Groovy做一些灵活的功能开发。
Handler和Verticle是Vert.x 的核心概念。Verticle内部的线程安全机制是Vert.x 的设计精髓。Verticle对象往往包含有一个或者多个处理器(Handler)。Vert.x提供基础Service接口和功能组件。开发人员在Handler中,借助这些接口和组件实现具体业务。
线程安全是Vert.x框架核心优势。通过Handler&Verticle双层结构,Vert.x 在不同的作用域保证数据安全操作。
变量作用域 | 数据操作 |
---|---|
Handler内 | atomic/原子操作 |
Verticle内 | thread safe/线程安全 |
Verticle之间 | 数据是immutable/不可改变的 |
Vert.x 架构
Verticle 是执行单元,在同一个Vertx实例中可以同时执行多个Verticle。Verticle在event-loop线程上执行,多个Vert.x instances可以在多个host上执行,各个Verticles 通过event bus通信。
注:
- 本文时间为2018年,下面对各种语言与其执行环境的讨论随时间不同有差异
- 使用JavaScript要注意JVM中是否整合v8引擎,v8引擎的性能优于其他JS引擎
- 现代JVM的性能和GC管理优于其他VM
- Groovy借鉴了Ruby的很多特性
- 国内Ruby技术圈较小众