Clojure

CloudRepo

2018 年 4 月 27 日

CloudRepo

您使用 Clojure 或 ClojureScript 構建什麼產品或服務?

CloudRepo 是一個完全受控的雲端儲存庫管理員。我們儲存軟體開發團隊的軟體成品,這些團隊使用 Leiningen、Boot 和 Maven 等工具進行相依性管理。

您最喜歡使用哪個 Clojure 函式庫?

有很多函式庫非常紮實,有助於我們的開發流程。我們使用 Faraday 進行非常簡單的 AWS Dynamo DB 存取。clj-http 滿足我們所有的 http 客戶端需求(測試等),而 cheshire 對於 JSON 解析來說就像一個護身符。

然而,我們使用過最令人大開眼界且具有教育意義的函式庫是 Ring - 看到 http 要求如何建模為簡單資料,然後傳遞到系統中,這是一個典範轉移。一旦我們了解到要求可以建模為資料,我們就可以讓要求流經我們的系統,並根據需要進行轉換。這對我們來說是一個關鍵的學習,並真正幫助我們進一步了解基於資料流設計系統,我在 這篇文章 中進一步詳細說明。

最近,使用 spec 真的很好。世代測試的想法對我們來說改變了遊戲規則。它還為我們提供了我們認為的,對靜態類型系統的改進,用於定義函數合約和驗證程式。我們現在可以根據資料的「形狀」或甚至是特定值進行驗證 - 這遠遠超出了傳統類型系統提供的限制。

Clojure 中你最喜歡的功能是什麼?

我們絕對喜歡傳遞映射並讓它們流經系統所帶來的力量。當我們可以使用 -> 函數和函數鏈來實作端點時,我們總是驚訝於 Clojure 的程式設計可以有多麼優雅。

將我們的系統狀態建模為映射也很有啟發性。它讓我們能夠透過查看資料映射而不是大型物件階層來更好地理解我們的系統。結合不變性,這讓 Clojure 變得很好用。

你的堆疊是什麼?

我們 100% 建置在 AWS 中。我們利用 Amazon S3 儲存人工製品,並使用 DynamoDB 儲存元資料。

為了為我們的客戶實現高可用性,我們在 Amazon Elastic Container Services 中執行的多個主機上,以 Docker 容器執行 CloudRepo。我們的後端服務 100% 以 Clojure 編寫。我們可以利用 JVM 的可靠性以及像 Clojure 這樣的語言的力量,這真是太好了。

Clojure 對你的業務有什麼價值?

Clojure 對我們的業務很有價值,因為我們可以用更少的資源做更多的事情。我們有一個非常小的團隊,我們通常可以在幾個小時內新增功能。我們之所以能獲得這種力量,是因為我們讓資料流經系統,而新增功能往往只是找出在哪裡可以最好地插入到該流程中。一旦決定好,我們就可以掛接,而不用擔心影響程式碼其他區域的狀態,這要歸功於不變性。

如果你想分享你的 Clojure 故事,請 填寫此表單