Skip to content

Comment on Help Scale NPM

Comments

Wouldn't it be better to make NPM more distributed so that anyone could set up a mirror and help out?

EDIT: Not saying it would be easy; I'm just wondering if you've considered this direction.

Anyone can make a mirror. That's the glory of CouchDB. Just kick off replication and BOOM you've got the npm registry. There are community mirrors in Europe (http://npmjs.eu) and Australia.

If you want to run or use a community mirror that's totally great!

npm config set registry http://my.awesome.community.mirror

This is great and all, but when Heroku relies on the main npm registry to be up (when it's not) you're screwed.

Heroku customers can always clone the nodejs buildpack and simply point the npm registry at another mirror.

I've started to always check in my node_modules directory. Heroku automatically runs `npm rebuild` in that case, so native modules always work. I've found it to be both faster and more reliable.

I'm surprised they're using CouchDB and not MongoDB.

npm is pretty much the prime use-case for CouchDB. REST API out of the box, replication is a core feature and not just a scaling feature (multi-master, MVCC) and the validation/access control is pretty much made for it. The npm registry is implemented as a CouchApp for a reason.

I agree that from a functionality perspective this is largely true, at least on paper. That said, if running costs become a significant bottleneck CouchDB becomes a less obvious choice. Sometimes there's a reluctance to migrate from one technology to another as requirements change over time but this seems one of those occasions where exactly that step is required. Sometimes it's good to take a step back, look at your current requirements in terms of cost and performance and determine what technology best suits your needs. I would question the know-how and objectivity of anyone that would land on CouchDB/node.js in this instance.

There's no node involved in the registry itself. This is purely CouchDB.

CouchDB has better replication support (e.g. multi-master, MVCC).

a lot of the central node community started on couch

It's hard but the payoff is worth it. Just look at CPAN or any linux pacakge distribution system. The package hosting is all mirrored.

This was what I said when the repository went down for over eight hours a few weeks back. Part one is scaling the server, part two is making the client aware of the mirrors and gracefully handling temporary unavailability. From the looks of it, this all seems above the heads of node's current leadership which frankly sours me on relying on node at all.

Make it into a docker app please. I would love to be able to set up a bunch of these commonly used registries as a distributed app I can run on my machine with very little overhead. Have it set up to pull in bulk changes as a cron job or via torrents maybe?

Having my own personal NPM and own personal RubyGems would be awesome.

Your own personal rubygems is downright trivial, given a constrained set of gems. Upload .gems to a directory, build an index, serve static files. I'm guessing there's something about npm packages which makes that impossible.

Yes, npm itself is the only reason why.

https://github.com/jmgunn87/mynpm <- docker app is jmgunn87/mynpm

Would also be interested to hear someone from nodejitsu's response to this.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.