/universe/names Breaking Update
Hi all,
As you know, the /universe/names/ endpoint was taken offline last week. This action was taken due to a new traffic profile to this endpoint that was causing disproportionate load on the database. It turns out this has been a lurking flaw in the endpoint since it was released, and it's just not been used this way until now.
Tech Co is developing technology to help the EVE server defend itself better against unforeseen load issues like this without requiring rate limits, but that technology is at least 4 weeks away from being ready. We will be releasing a blog explaining how this system will work closer to the deployment date.
Over the last week, we've been working the problem to find a way to bring this endpoint back earlier than that date. The /character/affiliations/ endpoint has the same flaw, and the changes below will be implemented on that endpoint as well.
Currently, these endpoints accept a list of IDs that may or may not be valid entities, and return the subset of them that have valid data. Going forward, these endpoints will return 404 if any single entry in the batch is not a valid ID. This change will be permanent on both endpoints.
Additionally, we are going to temporarily supplement the ability of these endpoints to detect invalid IDs without contacting the monolith, by using a dirty hack. Prior to initiating a round-trip to the DB with your query, we will test it against a set of hard-coded values that will filter out the vast majority of the values in the int32 range that are not valid for these endpoints.
Unsurprisingly, this hard-coded approach is a flawed half-solution. It will be better than nothing until we finish our work on the monolith load management code, but it has two key weaknesses you need to know about.
First, we have deliberately excluded dust characters from the hard coded values. This halves the number of valid IDs, and we consider it a worthwhile trade-off to re-enforce this temporary solution. Dust characters can still be resolved one at a time via the /characters/{character_id}/ endpoint, and their affiliations determined by spidering up the similar corporation and alliance endpoints.
Second, there is a set of very old character and corporation ID's that exists in an extremely large legacy range. This range is approximately 2 billion ID's wide, which means that including it would nullify the protective value of this technique. Characters and corporations with IDs between 100000000 and 2099999999 should be resolved individually against the character and corporation endpoints until we can implement a more permanent solution.
It is our hope that these techniques will be sufficient to tide us over to a better place, but the health of the EVE cluster will come first. If this approach is insufficient, we will fall back to offlining the endpoints again. If that happens, both endpoints will remain offline until the load management code is deployed.
With these compromises in place, the /universe/names/ endpoint will be onlined again shortly, and the /characters/affiliations/ endpoint will be updated at the same time.
As always, we're available to talk in the #esi channel of the tweetfleet slack if you've got questions.
-Team Tech Co.