I’m already using it in production. It works. The performance is about the same in my use case.
On the plus side, Bandit is built on top of OTP primitives and doesn’t do the annoying silent crashes that Cowboy does.
On the downside, it’s still fairly young, and there are rough edges. Pre-9 version had some breaking bugs, the current (pre-10) version seems okay but some behaviors differ from Cowboy like the lack of interrupting requests when client drops off. We also observed increased memory usage, but these things can be related to one another.
Generally, it looks like it’s the future, and at some point should probably be the default over Cowboy, but you should use it with caution on production (I’m hovering my hand over the switch back to Cowboy just in case for now).
I’m sticking with Bandit, because I like where its going, and It’s necessary for others to adopt it, so that we can detect those cases where failure happens, and library will improve because of that.
The current APM for e.g new relic don’t work with Bandit. This takes away visibility for the apps as there is no telemetry. Any plans to make the telemetry compatible to cowboy so it can be used without losing metrics
The groundwork has been laid, but I do not personally have any plans for such a library (mostly time limitations and the fact that there’s still a lot to do on the core of Bandit).
Making it “compatible with cowboy” would mean literally emitting events tagged with the :cowboy atom from bandit (and making sure all the metadata was a superset of cowboy’s). The place for bandit support to be added is in the New Relic agent.
@hubertlepicki and others; 1.3.0 just went out with a fix for the long-standing issue of increasing memory use (which wasn’t really a memory issue so much as it was an issue with how memory use is reported, but anyway), along with a few other fixes. See CHANGELOG as always. Hopefully this fixes your issue; please report back if so as I’d love to have more evidence that we’ve finally licked this.
Hi…
Thanks for the reply…
Does it mean that the requests for static files (e.g. under /priv) are no longer hitting the Phoenix server (here bandit)?
Are you setting this config on Phoenix side or Nginx side? I guess it’s on Nginx… Then the config for static assets on Phoenix becomes somehow useless, right?
For reverse proxy and SSL I was using traefik but I also want to add caching and static assets serving…
So I guess I’ll also switch to Nginx…
Do you think you can share your nginx file (or just the main parts)?
Hi, I’m sorry about not replying sooner. Anyway, the static assets will be served by Nginx. The Nginx configurations will be set within Nginx. Here are some of the main parts to consider:
What’s the point in separate the sockets from the rest of the request? Why one can’t add socket support to / directly, has it some disadvantage?
By the way, did you ever try it against a K8s cluster? Didn’t face any issues with stickies sessions?
On the other hand, is it a mistake to delegate to cloudflare the SSL part and have one less problem keeping in mind to renew certs, creates it, config, etc? I noticed that, in general, people prefer to have their own certs and 443 port…