Live data from Hacker News

Deno’s July 13th incident update

deno.com

41–47 of 47 posts

Re: Deno’s July 13th incident update

#41
Hey Luca, some thoughts from working on similar systems.

Visibility is the cause & lesson learned on duration. It's worth simply paying for 3P distributed RUM. Make sure you can get down to /24s & ASNs as well as breaking it out by (your) target destination/address. I reallly like TurboBytes in the past. Cedexis was ok, but I remember the API/raw data access to be bit of a pain.

It sounds like your TCP LB wasnt exporting metrics this time. For other cases you can get decent data out of the tcp metrics cache on linux. And proc has some good counters even before you get a socket; PAWSPASSIVEREJECTED may have bitten me before :( Make sure your reads of /proc/net/netstat are aligned to the right size if you go that route.

> ... because the load balancer that failed was very early in the network stack (a TCP load balancer). It does not record any diagnostics about dropped connections ...

You may be able to sort some improved visibility with something like netflow/sflow. This aligns well with discrete components and independent failure domains as well.

> Services announce themselves to the etcd cluster when their availability state changes ... If there are no healthy backends it will un-advertise itself from the network to prevent requests ending up at this "dead end".

In my experience you really can't rely on nodes to manage themselves when it comes to service availability or health. There are too many grey failure cases where a dataplane node will partially fail enough to keep mangling traffic or passing shallow health checks. eg a disk going read only or stalled IO can keep the LB and active data in memory up, signalling like BGP sessions stay up, but prevent consuming new system/customer state updates. A seperate system/component is necessary for teh control loop to be insulated from those failures.

You end up in a situation where the distributed LB has "data plane" workers that handle connections & packets while the out of band "control plane" determines health & controls BGP/routing/ARP/whatever to put the data plane nodes in or out of service. Your application/lb/etc data plane can still self report & retrieve data from etcd. But put the control somewhere with less correlated failures. While you're at it build data versioning in to your configuration, eg active customers/domains/etc, that your dataplane uses & reports. That way your control plane can check both the availability/performance and the current working state of LB dataplane configuration.

> [The LB did not have] any healthy backends to direct traffic to. ... This caused the traffic to be dropped entirely.

Throwing a RST or similar here is not wrong per se, and is a nice clear failure mode. One other approach is to have something like a default route that you can punt traffic to (and alert) as a last resort. It depends on your network/LB configuration but this could be a common MAC address, an internal ECMP'd route, or similar. I think you'll see many services that build L3/4 LBs, like CDNs, take this approach. IIRC google maglev and fastly document their take on this to deal with problems like IP fragments and MTU discovery where some packets dont flow with the rest of teh 5 tuple.

> The region will remain disabled until our monitoring has improved and the issue has been fixed more permanently.

I understand if this choice is around business & customer confidence. However I didnt see anything that indicated your failure modes were specific to us-west3. It seemed to be that visibility & detection were the real failure. And in that case I'd posit the better path is getting global visibility in to your failure mode, deploying that first/early to us-west3 and use that as your gate.

edit: Im a couple years past doing distributed networking/lb systems as my full time job, so apologies if this is dated/fuzzy advice.

Re: Deno’s July 13th incident update

#42

"... (a TCP load balancer). It does not record any diagnostics about dropped connections, nor does it have a return channel to return diagnostic information to the user (unlike HTTP loadbalancers, which can return a response header)." And there is no API monitoring apparently.

A bit of a blunt statement on my part. There is monitoring on a multitude of other connection related issues (eg TLS handshake failures, missing SNI, etc). We should have had monitoring for this specific failure where the load balancer did not have any healthy backends, but as mentioned in the post, the load balancer was programmed in way that this should never have been able to happen in the first place (as the LB s…

API Monitoring is the practice of making calls to an API to check it. Live end-to-end tests. We do at least ping for every API in every region. Still hard to pinpoint these issues sometimes.

Re: Deno’s July 13th incident update

#43
post #16

> On July 13th, at around 18:45 UTC we started to receive reports of an outage from a small number of users. We investigated the status of our services, but were unable to confirm any of the reports. All of our status monitoring and tests reported that everything was operating normally. > Over the course of the outage, we continued to monitor our service status, and worked with some of the affected users to narrow do…

In this case it’s disappointing especially because we know they have exact numbers.

We actually don’t, hence the vague language. As mentioned at the bottom, this incident really revealed some wholes in the insights we have. I think it’s also important to remember that Deploy is still in public beta, specifically because we are aware that it’s not perfect yet.

Re: Deno’s July 13th incident update

#44
post #43

Earlier quoted context omitted.

In this case it’s disappointing especially because we know they have exact numbers.

We actually don’t, hence the vague language. As mentioned at the bottom, this incident really revealed some wholes in the insights we have. I think it’s also important to remember that Deploy is still in public beta, specifically because we are aware that it’s not perfect yet.

Okay, thanks for the correction. I appreciate the transparency about there being holes, and I totally get that it’s a beta as well. I know what you’re doing isn’t easy either — there’s plenty of room for mistakes and learning.

Re: Deno’s July 13th incident update

#45
post #43

Earlier quoted context omitted.

In this case it’s disappointing especially because we know they have exact numbers.

We actually don’t, hence the vague language. As mentioned at the bottom, this incident really revealed some wholes in the insights we have. I think it’s also important to remember that Deploy is still in public beta, specifically because we are aware that it’s not perfect yet.

It's not clear to the reader what metrics you have and what you do not. Reading the post top to bottom, when we get to this line at the end:

> This incident has made it clear that a few blindspots exist within our monitoring systems.

I assume it's related to metrics at the load balancer layer not tracking that it's failing to forward the traffic downstream to registered hosts.

> For a period of around 24 hours, some users in the us-west3 region were unable to access dash.deno.com, and Deno Deploy projects, including deno.com and deno.land.

This earlier sentence implies to me that you do have an idea of the scale of the outage. If you instead meant "some" to be "the users who reported they were impacted directly to Deno" and not a metric you have access to, you should just say it.

For example:

We are unable to determine the impact of the outage to customers in the us-west3 region outside of those who reported the issue to us directly.

There's less ambiguity there.

> I think it’s also important to remember that Deploy is still in public beta, specifically because we are aware that it’s not perfect yet.

No system is perfect. There will always be outages. Taking a more rigorous and transparent approach to postmortems isn't related to your system being perfect.

I'm circling back to this days old thread to give this feedback in the spirit of constructive criticism. It's not meant to embarrass or call anyone out specifically, and I hope you find it helpful.

Re: Deno’s July 13th incident update

#46
post #45
post #43

Earlier quoted context omitted.

We actually don’t, hence the vague language. As mentioned at the bottom, this incident really revealed some wholes in the insights we have. I think it’s also important to remember that Deploy is still in public beta, specifically because we are aware that it’s not perfect yet.

It's not clear to the reader what metrics you have and what you do not. Reading the post top to bottom, when we get to this line at the end: > This incident has made it clear that a few blindspots exist within our monitoring systems. I assume it's related to metrics at the load balancer layer not tracking that it's failing to forward the traffic downstream to registered hosts. > For a period of around 24 hours, some…

Yeah, you make a particularly good point about acknowledging what data we don’t have more directly. Thanks for being constructive about it, I do really appreciate it.

Re: Deno’s July 13th incident update

#47

Earlier quoted context omitted.

In this case it’s disappointing especially because we know they have exact numbers.

Arguably the exact numbers aren't interesting either. 456 982 requests from 5674 projects by 3091 user accounts were dropped during the 23:53:42.104 hours the outage lasted. I think it makes sense to make an interpretation and present that instead of raw numbers.

I think there are some investors out there who might find these numbers more interesting than most numbers they will see today.
Post reply on HN