什么是 Thrift
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.
Thrift 用于实现跨语言之间调用的服务框架,它支持 C++, C#, Cocoa, D, Delphi, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, NodeJS, Go, Smalltalk... 非常多热门的语言,可以直接基于写好的接口描述文件 (IDL) 生成目标语言的本地化代码。
我们现在目前的项目至少有 C, Java, Ruby, PHP 期间各种语言有各种不同团队负责不同侧重点的服务。
团队合作的时候,我们用 Thrift 来实现跨语言之间的调用。
所以基于 Thrift 的 Ruby 库实现了一套服务器框架,让我们可以快速构建一个类似 Rails 一样易用、可维护的 Thrift Server,内部非常多的实现都和 Rails 一模一样,你可以完全用 Rails 的使用习惯来开发。
今年的 RubyConf China 2014 上,@ 罗昕 曾经讲过类似的主题《RailsService: Create microservices with(or without) Rails》,当然此 Gem 有受他的启发
Sails 是从我们的实际项目上面抽出来的,断断续续发布了好几个版本,也解决了 N 多 Real world 环境的问题,比如 Capistrano 部署重启载入的问题,Linux 发送 kill -USR2 $pid 重启的问题等等
功能
让你像在用 Rails 一样配置、开发、使用
进程管理,守护进程(Thrift 默认没有这些东西)
I18n 支持;
尽可能兼容 Rails 接口,以便能支持一些 Gem,比如我们已经在我们的项目上面同时用 Sails 和 second_level_cache;
Migration 功能;
同时支持 ThreadPool 和 NonBlocking 模式;
sails console;
Sails.cache, Sails.logger, Sails.root 之类和 Rails 一模一样的东西
熟悉的 Rails log 打印信息
还有待解决的
开发模式自动重新载入新的代码,以及部署模式收到 USR2 信号软重启;
更多的 Rails 细节;
一些例子
打信息:
Processing by UserService#find_user_quota at 2014-12-29 18:36:52 +0800
Parameters: {:req=><:commonrequest user_id:36 session_id: ip:>}
UserQuota Load (9.3ms) SELECT `user_quota`.* FROM `user_quota` WHERE `user_quota`.`user_id` = 36 LIMIT 1
Completed 200 OK in 13.73ms (DB: 9.3ms)
一些命令
$ sails s
$ sails stop
$ sails restart
$ sails s --daemon
$ sails c
irb> Sails.root
=> #
irb> Sails.root.join("log")
=> #
irb> Sails.cache.write("foo", 1)
=> true
irb> Sails.cache.read("foo")
=> 1
irb> reload!
项目地址