第1页
RailsService
Create microservices with/without Rails
第2页
标签 Label
You labeled me. I'll label you. ——《The unforgiven》Metallica
第3页
时髦?
SOA
PAAS
DevOps
Microservices
大数据
云计算
Agile
TDD
第4页
罗昕
折800架构师
RailsService作者
关于我…
第5页
罗昕
折800架构师
RailsService作者
“老罗”
“罗老师”
关于我…
第6页
罗昕
折800架构师
RailsService作者
“老罗”
“罗老师”
与罗永浩无任何关系
关于我…
第7页
RailsService
Create
Microservices
With/Without
Rails
第8页
词与物
第9页
米歇尔·福科在他的《词与物》一书的开头,引用了博尔赫斯小品文中的一段,来引发关于事物之秩序的议论。在博尔赫斯的这篇小品文中,他模拟了一部古代中国的类书中对动物的分类:“动物可以划分为:
⑴属于皇帝所有的,⑵有芬芳的香味,⑶驯顺的,⑷乳猪,⑸鳗源,⑹传说中的,⑺自由走动的狗,⑻包括在目前分类中的,⑼发疯似地烦躁不安的,⑽数不清的,⑾浑身有身份精致的骆驼毛刷的毛,⑿等等,⒀刚刚打破水罐的,⒁远看像苍蝇的”。
博尔赫斯的分类法
第10页
这一特殊的事物分类,与欧洲百科全书的分类法则大相径庭。列维-施特劳斯在谈到原始部落的物种分类时,也注意到了这一差别。在列维-施特劳斯看来,这种种迥然不同的事物分类,可能就意味着世界可能存在多种规则。以近代以来欧洲博物学的分类学观点来看,这一中国式的分类法显然是荒唐可笑的。
这一混乱、庞杂、毫无逻辑可言的,寓言式的动物分类,实际上是在提醒一种特殊的世界秩序观念,揭示出世界的另一重可能的秩序,而这对于欧洲人来说,可能“就是我们自己的思想的限度”。
博尔赫斯的分类法
第11页
Microservices?
第12页
Microservices
The microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms.
——Martin Fowler
第13页
Rails
单一代码库,代码量可能非常巨大
任何改动都需要重新部署整个项目
任何模块的问题可能拖垮整个应用
不同业务模块服务器资源分配不均
第14页
万能青年旅店Rock? Folk? Indie? Pop?
第15页
RailsService简介
第16页
Why RailsService?
背景:公司统一战略,跨部门跨语言互操作协议统一到Apache Thrift.
需要一个Framework,提供类似Rails的开发效率,需要重用之前的业务逻辑和代码。
对普通程序员隐藏协议和实现的细节。
第17页
RailsService设计原则
Knowledge Reuse
Code Reuse
Least Astonishment
KISS
第18页
RailsService特性
Like Rails(目录,命令行,Generator,Migration)
集成Apache Thrift
支持Newrelic,支持日志,支持TDD
Checker & Builder
支持Foreman部署
支持Rails 2/3/4
支持JRuby(Twitter Finagle)
第19页
RailsService HelloWorld
without Rails
第20页
新建RailsService项目
第21页
RailsService目录结构
第22页
生成HelloServer
第23页
Server生成后的文件变化
第24页
修改.thrift idl文件
第25页
HelloServer中实现say方法
第26页
修改测试文件
第27页
运行测试
第28页
启动HelloServer
第29页
生成HelloClient
第30页
生成Client后文件变化
第31页
查看Client的内容
第32页
通过Client调用Server
第33页
Apache Thrift简介
第34页
What's 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.
第35页
Thrift的关键特性
IDL
Code generator
Protocol(Binary, Compact, JSON)
Transport(Framed, Buffered, HTTP)
第36页
Thrift与HTTP API的比较
易学易用性 ×
效率 √
文档(IDL, Schema)√
版本演进 √
一致性 √
第37页
与其他协议比较Avro, Birt, Capnproto, FlatBuffers, Protobuf
Schema free? Schema evolution?
Generate code?
Zero-copy? Random-access reads?
第38页
RailsService命令行
第39页
rails_service -v
第40页
rails_service -h
第41页
rails_service n
第42页
rails_service s
第43页
rails_service g
第44页
rails_service g server
第45页
rails_service g install
第46页
RailsService与Rails集成
with Rails
第47页
在Rails项目下运行install
第48页
实际项目示例
第49页
是否加载Rails环境比较
第50页
RailsService Future
第51页
Incoming, v0.3
Integrate with Zookeeper, like Finagle.
Fault-tolerant, like Storm.
Deploy with docker(experimental).
Service method cache.
Commit patches to Apache-Thrift.
Add more tests.
第52页
Planning
Custom Thrift parser && generator.
Custom Thrift server.
Protocol agnostic, supporting better protocols like FlatBuffers, Capnproto.
Open source.
第53页
尚未结束…
第54页
“把保持沉默看作怯懦,这是不对的。沉默是一种生活方式。”
“我曾经是个沉默的人,这就是说,我不喜欢在各种会议上发言,也不喜欢写稿子。”
“我又猛省到自己也属于古往今来最大的一个弱势群体,就是沉默的大多数。这些人保持沉默的原因多种多样,有些人没能力,或者没有机会说话;还有人有些隐情不便说话;还有一些人,因为种种原因,对于话语的世界有某种厌恶之情。”
王小波《沉默的大多数》
第55页
“我后来到美国留学时,给X教授编软件,文件名总叫caonima,caonima·1,caonima·2,等等。但是他总把第一个音节念成"考",给我打电话说:考你妈一可以了,考你妈二还得往短里改。我就纠正他道:不是考你妈,操你妈。我们一共是四个研究生给他编程序,人人都恨他。这是因为按行算钱,他又不让编长。这种情形就叫作受压迫。毛主席教导我们说,有压迫就有反抗,所以就考你妈”
王小波:“考你妈”
第56页
“思想、语言、文字,是一体的,假如念起来乱糟糟,意思也不会好——这是最简单的真理,但假如没有前辈来告诉我,我怎么会知道啊。有时我也写点不负责任的粗糙文字,以后重读时,惭愧得无地自容,真想自己脱了裤子请道乾先生打我两棍。孟子曾说,无耻之耻,无耻矣。现在我在文学上是个有廉耻的人,都是多亏了这些先生的教诲。对我来说,他们的作品是比鞭子还有力量的鞭策。”
王小波 《我的师承》
第57页
“When you don't create things, you become defined by your tastes rather than ability. Your tastes only narrow & exclude people. So create.”
——whytheluckystiff
《怀念_why先生》
第58页
So create.