Cloudflare (or a similar CDN) would be useful - we have an open issue
to implement that, but haven't had a chance to get to it:
https://github.com/clojars/clojars-web/issues/434

- Toby

On Sat, Jan 2, 2016 at 4:30 AM, Nando Breiter <na...@aria-media.com> wrote:
> Would CloudFlare help on the short term? I haven't used the service yet, I
> just ran across it researching DDoS solutions, but judging from the overview
> of how it works, it might be able to cache all clojars.org assets in a
> distributed manner and handle the DNS issue as well.
> https://www.cloudflare.com/ If it would work, the advantage is a very quick
> initial setup. All you need to do is let them handle the DNS.
>
>
>
>
>
> Aria Media Sagl
> Via Rompada 40
> 6987 Caslano
> Switzerland
>
> +41 (0)91 600 9601
> +41 (0)76 303 4477 cell
> skype: ariamedia
>
> On Sat, Jan 2, 2016 at 4:31 AM, Toby Crawley <t...@tcrawley.org> wrote:
>>
>> Given the recent DDoS-triggered outages at linode (including the one
>> today that has been the worst yet, currently 10 hours at the time I'm
>> writing this), I've been giving some more thought to how we can make
>> future outages less painful for the community.
>>
>> I have an open issue[1] (but no code yet) to move the repository off
>> of the server and on to a block store (s3, etc), with the goal there
>> to make repo reads (which is what we use clojars for 99.9% of the
>> time) independent of the status of the server. But I'm not sure that
>> really solves the problem we are seeing today. Currently, we have two
>> points of failure for repo reads:
>>
>> (1) the server itself (hosted on linode)
>> (2) DNS for the clojars.org domain (also hosted on linode)
>>
>> moving the repo off of the server to a block store still has two
>> points of failure:
>>
>> (1) the block store (aws, rackspace, etc)
>> (2) DNS for the clojars.org domain, since we would CNAME the block
>>      store (hosted on linode)
>>
>> Though the block store provider would probably be better distributed,
>> and have more resources to withstand a DDoS (but do any block store
>> providers have 100% uptime?).
>>
>> The block store solution is complex - it introduces more moving parts
>> into clojars, and requires reworking the way we generate usage stats,
>> and how the api gets its data. It also requires reworking the way we
>> administer the repo (deletion requests, cleaning up failed/partial
>> deploys). And it may not solve the availability problem at all, since
>> we still have two points of failure.
>>
>> I think a better solution may be to have multiple mirrors of the repo,
>> either run by concerned citizens or maintained by the clojars staff. I
>> know some folks in the community already run internal caching proxies
>> or rsynced mirrors (and are probably chuckling knowingly at those of
>> us affected by the outage), but those proxies don't really help those
>> in the community that don't have that internal infrastructure. And I
>> don't want to recommend that everyone set up a private mirror - that
>> seems like a lot of wasted effort.
>>
>> Ideally, it would be nice if we had a turn-key tool for creating a
>> mirror of clojars. We currently provide a way to rsync the repo[2], so
>> the seed for a mirror could be small, and could then slurp down the
>> full repo (and could continue to do so on a schedule to remain up to
>> date). We could then publish a list of mirrors that the community
>> could turn to in times of need (or use all the time, if they are
>> closer geographically or just generally more responsive). Any deploys
>> would still need to hit the primary server, but deploys are are
>> dwarfed by reads.
>>
>> There are a few issues with using mirrors:
>>
>> (1) security - with artifacts in more places, there are more
>>     opportunities to to introduce malicious versions. This could be
>>     prevented if we had better tools for verifying that the artifacts
>>     are signed by trusted keys, and we required that all artifacts be
>>     signed, but that's not the case currently. But if we had a regular
>>     process that crawled all of the mirrors and the canonical repo to
>>     verify that the checksums every artifact are identical, this could
>>     actually improve security, since we could detect if any checksum
>>     had been changed (a malicious party would have to change the
>>     checksum of a modified artifact, since maven/lein/boot all confirm
>>     checksums by default).
>>
>> (2) download stats - any downloads from a mirror wouldn't get
>>     reflected in the stats for the artifact unless we had some way to
>>     report those stats back to clojars.org. We currently generate the
>>     stats by parsing the nginx access logs, mirrors could do the same
>>     and report stats back to clojars.org if we care enough about
>>     this. We don't get stats from the existing private mirrors, and
>>     the stats aren't critical, so this may be a non-issue, and
>>     definitely isn't something that has to be solved right away, if
>>     ever.
>>
>> The repo is just served as static files, so I think a mirror could
>> simply be:
>>
>> (1) a webserver (preferably (required to be?) HTTPS)
>> (2) a cronjob that rsyncs every N minutes
>>
>> And the cronjob would just need the rsync command in [2], so, to get
>> this started, we just need:
>>
>> (1) linode to be up
>> (2) people willing to run mirrors
>>
>> (I would say "(3) add a page to the wiki on how to use a mirror", but
>> that would destroy the symmetry of all the other 2-item lists in this
>> message)
>>
>> And it would be nice to have the process in place to verify checksums
>> soon - that would actually be a boon if we had another linode
>> compromise[3].
>>
>> Does anyone see any issues with this plan - I'm curious if there are
>> security implications (or anything else) that I haven't thought of?
>>
>> Are you willing to run a mirror?
>>
>> One issue that comes to mind is if we do decide to move the repo to a
>> block store, it actually makes mirroring more difficult unless we keep
>> a copy of the repo on disk on clojars.org as well. But I would like to
>> have mirrors in place as soon as possible, and worry about that later.
>>
>> - Toby
>>
>> [1]: https://github.com/clojars/clojars-web/issues/433
>> [2]:
>> https://github.com/clojars/clojars-web/wiki/Data#rsync-the-whole-classic-repository
>> [3]:
>> https://groups.google.com/d/msg/clojars-maintainers/uAVJVwRAnSU/WISqQn5E9KIJ
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to