Show HN: Jonline, AGPLv3 Social Network Built with Rust, Flutter, React, gRPC (github.com)
So far this is a solo endeavor, but with my recent CI integrations and consolidations of things within the codebase, it's pretty much ready for anyone who wants to contribute to do so. I've labeled some "good first issues" if anyone is interested in contributing: https://github.com/JonLatane/jonline/issues
A few more tech details are available within the app itself, at https://jonline.io/about_jonline or https://getj.online/about_jonline.
Edit: Hug of death is in full effect! I think it's the CPU required for all the TLS stuff being done. I can't even `kubectl logs` to get more information.
I should really be limiting the resources of my containers, etc. as I'm obviously running way beyond what my rinky-dink single server is really meant for. If you're interested, let me know!
CPU/Load/Memory graphs in case y'all are curious (yes, I know I'm already using most of that poor server's memory!): https://imgur.com/7xGpvRI
28 comments
[ 3.2 ms ] story [ 67.7 ms ] threadWhat a time to be alive :)
Dead for me
Looks like the CPU load of all the TLS/HTTPS stuff is what's doing it in now.
Your landing page should be serving static cached HTML from S3/Cloudflare (or Varnish, even). There's no reason your app server should be handling that load at all.
If you have some ideas for how I could handle automatically rolling out updated HTML/JS to such a CDN from the K8s cluster, I'd definitely be interested. PRs/code would be best, but even just walking me through any good solutions you know would be immense :)
It's completely agnostic to your setup. Just point your domain to their nameservers, define the routes you want cached, and that's it.
There's also an API where you can do your invalidations on deploy: https://developers.cloudflare.com/workers/learning/how-the-c...
Now this is getting into opinion, but I don't believe gRPC was ever intended to talk to browsers. And with TLS termination in the mix, are you really even saving anything versus just translating to HTTP(S) and Gzipping for the clients?
A typical setup is Backend -> protobuff grpc -> GQL/Auth server -> HTTPS -> client
With the backend and GQL server in a VPC, so no need for TLS.
I’d argue that for what I want to do (single ingress everything), gRPC’s various language-specific frameworks handle TLS better than most (obviously not all) HTTP frameworks. Most HTTP frameworks just expect you to put them unsecured behind a separate ingress to do the TLS.
For instance, as we can see with my own deploy here, Tonic (the Rust gRPC server) has handled TLS much better than Rocket (the Rust HTTP server).
Negotiation of what transport type to use is done (at the Dart linking level) in Flutter here: https://github.com/JonLatane/jonline/blob/6cd6c24ee3ceb09ef3...
And it's done in React here: https://github.com/JonLatane/jonline/blob/6cd6c24ee3ceb09ef3...
Deployment should focus on non-cloud deployments as a first class citizen.
Cloud is 100x more expensive on bandwidth and it is much easier to make a non-cloud product work in the cloud then make a cloud product work outside of the cloud.
I'd suggest moving to k3s and testing deployments on raspberry pis or one of the x64 based SBCs.
Or maybe work on deployments to vpses.
Making it easy with cloud should still also be a primary goal, just avoid making it hard to reduce costs by moving to rented dedicated servers or rented vpses. Some communities will need the 99% reduction.
How do these platforms handle communities that pop up that actively plan for say the eradication of certain religious groups?
The software is apolitical. Enabling speech always comes with enabling shitty speech, and that's a problem with humanity, not the tools enabling speech.
Anyone can set up a forum and host it. You are relying as always on points of centralisation, like domain names and hosting companies as a way to take down illegal content. If it is illegal enough, like CP, terror etc. police will cooperate internationally and infiltrate it. FBI has seized so many BTC it isn’t funny and it doesn’t get more decentralised than that.
My question was more tangential/philosophical, and not something for you to fix of course.