Nothing really, We were asking it to do something its not really supposed to
Basically we needed a request reply semantic. (forgive the explanation) Its where we have an instance of the front end sending a request to any of the back end servers. A single backend replies directly to the same front end instance.
Basically we needed something similar semantic to a load balancer, but in messaging form.
SQS is only a 1-n Queue system. So we can deliver a message to a single backend in a cluster, but we couldn't get it back to the producer without making a message routing system. We used Dynamodb and repeated polling, but that wasn't cheap to scale.
We might have been able use SNS as a broadcast bus of somesort, but that seemed like a backwards step.
We still use SQS for virtually everything else. NATS is kept for that one use case.
Api-gateway -> Lambda -> NATS -> docker backend on GPU
The backend is C++ and needs to be shielded as much as possible from the web. It also takes a fair wedge of time to deal with requests (1-5 seconds) THe rationale is the Lambda front end validates and routes, the backend replies.
Before we moved to NATs we had the added bonus that using SQS meant that there was no possible link between front-backend apart from SQS. (both lambda and SQS are outside of the VPC by default)
the backend has a strict schema, and to keep moving parts down it seemed wise to avoid having to plumb in a webserver as well. They really are badly suited to this sort of thing. They also add a boat load of extra latency.
We have a large number of machines, all of which deal with certain areas, This allows us to intelligently cache hotter areas closer to clients.
Request reply is a reasonable pattern for interacting with backends that are constantly changing capacity based on demand. It also, if done correctly can be a way to optimise for latency over capacity (depending on how you do it.)
With NATS you can ask for more than one response, which might also be useful. Some other systems use a "fastest reply wins" which guarantees a fast response at the expense of capacity.
I usually say “check environment”, which is usually the reason — cron jobs run in non-interactive mode, new version of system library, wrong PATH variable, new math co-processor and so on.
I think his point is that this doesn't provide much in the way of meaningful measurements or analytics. It's not actually a better way to, say, track soda consumption--it's just more self-aggrandizing.
I don't know if that's actually true, I would like a tool to keep track of this stuff for me but I don't at all feel some "desire to be a celebrity with assistants." Yes I suppose I could carry a notebook everywhere. I have failed doing that in the past though and I don't know anyone that keeps such detailed statistics. Especially on things like the exact time they wake up, come home, get coffee, etc. I imagine it would be a hassle to manually keep track of it all.
I try, and for periods have succeeded, in tracking my diet and weight in detail, partly to support my exercise and partly because I'm prone to over-eating... The biggest challenge is that it needs to be extremely simple. A notebook sort-of works - it's easy to jot something down -, but with the caveat that taking the time to transfer notes and add up calories etc. to actually get any use of it is slow.
Smartphone works for me, but only with an app that is tailored to my workflow. Sensors that could capture lots of it semi-automatically would make a great deal of difference.
Goals and improvements are important, but are these tools really effective, or are they praying on our vanity? How effective can this possibly measure how many cups of coffee or water I am drinking, how many steps I'm taking, if I'm medications or not, etc.
This one takes the cake.
"Get notified if the fridge door is left open and it gets warmer. At the same time, keep track of your snacking between meals."