Below you will find pages that utilize the taxonomy term “开源 clojure”
Posts
近段时间做的一些 clojure 轮子
LeanCloud 可能(应该是)国内最大规模的 clojure 应用,无论是存储、推送还是聊天都是构建在 clojure 之上。单纯 API 服务,每天的规模都是亿次规模的动态调用请求。使用一门小众语言的后果是,你需要造很多别的语言里已经有的轮子。好在 clojure 可以直接用 java 类库,很多轮子你只是包装下 java 类库即可。
我们已经造了很多的 clojure 轮子。下面说说我最近造的一些 clojure 轮子。
Hystrix 相关 首先是跟 Netflix/Hystrix 相关的。Hystrix 的设计理念真是相见恨晚,早在淘宝的时候就听过大名,真正开始使用和了解才从今年开始。从他的设计文档来看,我过去很多的土法轮子人家都总结成 Pattern,并且设计了美妙的 API,例如 Request Collapsing 和 Request Caching 都是很朴素的想法,我在 xmemcached 实现里就做了 get 请求和 set 请求合并等技巧来提升性能;对外部调用利用线程池和信号量做隔离,原来在 Notify 的实现上也充分使用了这些技术。但是没有它总结的这么好,并且提供了丰富的配置项。一个侧面反映了我的抽象能力上的欠缺,或者说思考的还不够深入。
回到正题,我开始在我们的 API 服务里使用 hystrix 隔离和控制各种外部调用,使用了 hystrix-clj,这个轮子是官方提供的, API 封装的非常漂亮,你只需要将 defn 替换成 defcommand 就可以将一个普通的 clojure 函数用 hystrix 封装起来,并且利用 metadata 来配置 hystrix,充分体现了 clojure 的能力。不过这个库原来在处理参数重载的函数的时候有 Bug,我提了个 PR 解决了下,已经大量应用在我们的服务上了。
Hystrix 提供了一个 dashboard 用来实时展现各种服务的 QPS(单机和集群)、平均耗时、错误统计等,官方推荐用 hystrix-event-stream-clj ,在你的 service 里提供一个 /hystrix.