Tumblr推出开源微服务框架Colossus

Tumblr面临的最大挑战是如何正确地组织和扩展持续增长的基础设施作为一个平台。微服务架构已经是非常有前途的一个策略。 微服务这些都是将小而专的应用封装设计成一个组件,而不是一个个单独的应用程序,其中包含整个网站的业务逻辑,提供的清洁的职责分离。微服务有助于促进组织良好的基础设施以及更容易解决缺陷和性能瓶颈。

虽然微服务提供充足的优势,他们也还是有自己需要面临的挑战。如 微服务需要易于构建、维护、部署和监控,最重要的是他们需要极高的性能和容错。 单个服务必须以严格的延迟要求和正常运行时间实现每秒数万或数十万请求处理。

Colossus是一个轻量的开发高性能非堵塞的Scala应用框架,Colossus注重低延迟的无态服务,这些无态服务主要是很小,但是比基于数据库和缓存的抽象要大一点点,Colossus在保持接口干净和精确的前提了瞄准了性能最大化。

过去我们很难编写一个同时具备高性能、高稳定性和高可维护性的服务。 构建一个服务是只能局限于少数工程师通过建立必要的领域知识才能有效编写。 Colossus已经完全改变了这种状况,使得更容易开发快速的容错的服务,大大降低了准入门槛。

Colossus应用是构建在一系列单线程事件循环集合之上,这些事件循环能够处理低层次网络交互,但是这些事件循环自己是一种Actor,能够发送和接受消息,这样你能够在事件循环中直接编写低层次的事件处理代码。

特点:
1. 干净的基于事件的编程
直接基于NIO建立,Colossus是一个现代的基于事件的 ,充分利用Scala函数编程和面向对象编程特性。 以最小的代码实现功能强大的应用程序。

2. 与Akka无缝集成
完全是一Akka Actor编写,Colossus很容易用低级事件处理代码连接与外部Actor。 Colossus还提供了一个完全基于actor API。

3. 实时指标
Colossus有一个指标测量聚合和报告系统,以便于实时跟踪事件。 常用内置服务的指标如请求率和延迟都能跳出盒子,容易添加。 一个类似sql的DSL可以对这些指标过滤和聚合,而报告模块 让指标导出到一个外部数据库 OpenTSDB。

4. 不仅仅是服务
Colossus虽然是最初是建立一个微服务,但是它也是一个简单的完全可访问NIO包装, 您可以编写自己的自定义服务器和客户端。 此外, 当你需要在服务器的上下文之外实现I / O时,Colossus任务让你在事件循环编写任意代码 。

使用:
在build.sbt or Build.scala (2.10 or 2.11)加入:
libraryDependencies += "com.tumblr" %% "colossus" % "0.5.0"

看看一个小服务器代码:


import colossus._
import service._
import protocols.http._
import UrlParsing._
import HttpMethod._

object Main extends App {

implicit val io_system = IOSystem()

Service.become[Http]("http-echo", 9000){
case request @ Get on Root => request.ok(
"Hello world!")
case request @ Get on Root /
"echo" / str => request.ok(str)
}
}



这个框架应该比Netty Vertx更接近Node.js