Artifact Storage
Overview
This is an ongoing issue we are attempting to address. This page represents a starting point.
Goals
Stability against outages in upstream artifact stores (e.g., pypi, github, etc)
Have a reliable, intuitive, and consistent storage mechanism for the things that we produce and others would like to consume
Open questions:
What SLA are we striving for out of a given artifact store?
What level of support/availability do we give to community?
Requirements out of a given artifact tool
self-service
Intuitive to find given artifacts
audit trail/logging
auth
publicly readable?
Storage approach for what we produce vs what we consume does not need to be the same
Things that we consume that we would like to protect against failures with a pull-through cache
Artifact | Default storage location | Impact of outage | Usage | Observed uptime/bad-events |
|---|---|---|---|---|
Python libraries | pypi | dev, build | V High |
|
Custom wheels | S3 | EMR/analytics jobs can't run | High |
|
npm packages | npm | dev, build, production | Med-high | Partial outage 7/7/16, roughly 5 hours |
rubygems | rubygems.org | cs-comments-service builds can't run | Low |
|
debian packages (apt) |
| can't build new AMIs | High |
|
debian packages (ppas) | various ppas | can't build new AMIs | High |
|
docker files/images | dockerhub | can't run tests against new IDAs | ?? |
|
maven repository bits/jars | maven central | can't build android | ?? |
|
Github repos | github | dev, build | V High |
|
PEAR install bits | PEAR | marketing | Med |
|
keys (data czars) | private repo/github | data czars can't get their data (can't run analytics exports) | Low |
|
ssh keys | github | among others, impacts ability to run analytics | Med |
|
S3-stored artifacts (excluding anything run in edx-platform) | AWS | video pipeline analytics can't be run | V High |
|
Things we produce that we want to store (Not focusing on this right now)
Artifact | Default storage location | Impact if it's not available | Observed uptime/bad-events |
|---|---|---|---|
iOS applications | S3, hockeyapp |
|
|
Android apps |
|
|
|
AMIs |
|
|
|
.box files |
|
|
|
custom-built wheels |
|
|
|
test/product-feature artifacts |
|
|
|
Problem we may be trying to solve
We want a consistent view of our artifacts
Packages no longer exist
eg. python 2.7.10
Higher availability than external services
Unified view of package management
Artifacts we're calling out of scope right now
our own PPAs
docker AMIs
---archive---
iOS applications
Android applications
AMIs
Various IDAs + Platform
Build workers
devstack .box files
custom built wheels
test or product-feature artifacts
e.g., screenshots of product under test (for example, Netflix has a way to see an app under different languages, etc)
---------------
Pypi libraries
libraries
wheels
npm packages
rubygems
debian packages
docker files/images
maven repository bits (e.g., for android installs)
Github repositories used in installs
PEAR install bits (e.g., for our marketing repo/drupal/php)
keys
data-czars' keys
secrets needed for deployments
keys for mobile apps
S3-stored artifacts
Just added a note above about the recent NPM outage, which caused all Jenkins builds to fail for a period of several hours the morning of 7/7/16. As a result, the FedX team has a heightened interest in this project.
The long term solution to total isolation from all forms of NPM issues (eg, the left-pad disaster) is an artifact storage system like Artifactory or NPM Enterprise, however yesterday's issues would have been kept from affecting us with (as described above) a pull-through cache. Many companies I know have deployed something like this (including Hubspot - spoke to one of their JS tools engineers about this yesterday).
Anyone interested in working with me to come up with an approximation of the scope of setting up an npm mirror for ourselves?