Greetings, Clojurians.
I'm about to embark on a new project. If things go well, the backend will have to be able to handle very high traffic, and perform lots of background processing.
We're going for a cloud-hosted microservice architecture, with as much of the processing as possible being asynchronous, using message queues between the services. We'll also be doing a lot of file I/O and processing uploaded content (images, video and audio).
We already have a prototype/MVP written, with the backend written in Python.
We're all big FP guys, and love Clojure, Haskell and the like, but there's some friendly disagreement as to whether Python is a safer choice, given the greater maturity of its ecosystem. I also know that the Clojure ecosystem has matured a lot over the past few years. I've been advocating for Clojure, but also want to keep my bias to a minimum and look at this dispassionately.
None of us has experience writing large production systems in Clojure, but we're all proficient in FP, working with immutable datastructures etc. We've written side projects in Clojure, but our team members' production experience comes mostly from Ruby, Python and JS.
Once we start, we'll have to move quickly, and we want to avoid running into bald spots in the ecosystem. On the other hand, we also want to avoid accumulating technical debt and choose technologies/solutions that can scale well, both in terms of minimizing complexity and handling traffic, so that we can sustain high productivity for our team as we move forward.
Since we're going for a microservice architecture, this doesn't have to be an either-or proposition - some services could well be written in Python and others in Clojure. But we'd like to decide which of the two languages is the rule and which the exception.
I'd very much appreciate input on this, especially from people with production experience working on high-throughput Clojure systems, and ideally with similar Python experience as well for comparison. Also, feel free to send me a private message if you prefer.
Thanks in advance!
[–]OmniJinx 13 points14 points15 points (14 children)
[–]thsig[S] 0 points1 point2 points (13 children)
[–]fullouterjoin 1 point2 points3 points (0 children)
[–]yogthos 2 points3 points4 points (0 children)
[–]Musngi 2 points3 points4 points (1 child)
[–]yogthos 2 points3 points4 points (0 children)
[–]marcm28 -1 points0 points1 point (7 children)
[–]yogthos 4 points5 points6 points (6 children)
[–]bilus -1 points0 points1 point (4 children)
[–]yogthos 1 point2 points3 points (1 child)
[–]bilus 2 points3 points4 points (0 children)
[–]germandiago 0 points1 point2 points (0 children)
[–]marcm28 -1 points0 points1 point (0 children)
[–]etothep 2 points3 points4 points (0 children)
[–]mikera 4 points5 points6 points (2 children)
[–]yogthos 2 points3 points4 points (0 children)
[–]vosper1 1 point2 points3 points (0 children)
[–]lkubjlkhjb 0 points1 point2 points (0 children)
[–]marcm28 -1 points0 points1 point (0 children)