Design Lessons & Advice from Building Large Scale Distributed Systems at Google
perspectives.mvdirona.com
perspectives.mvdirona.com
I have a Googler friend (genius coder in his own right) who sometimes wondered if he wouldn't be more productive by just devoting his workday to ensuring that Jeff Dean was properly caffeinated.
I find this kind of fascinating because Jeff Dean's academic background was in compiler optimization research. Not the obvious choice to build infrastructure for a large website. But perhaps compiler people know how every nanosecond counts, and can see the network as just another high latency part of a big computation.
If you've never written a compiler from scratch, I highly suggest doing so(1): there are data structures (symbol table -- a hash table, parse tree, tries), algorithms (converting an NDFSM to a DFSM(2), parsing, filling registers and many others), computer organization / architecture (outputting assembly, optimizing the code with pipelining and CPU cache in mind). Not to mention it's also a substantial project which teaches you a lot about software engineering: it's not something you can write in a single session, it's something that has to be frequently extended and tested (I can't think of a cleaner candidate for test driven development: you specify the source code you want to input and test if the generated IR/assembly code is what you're looking for). It's also really fun :-)
Not to mention custom compilers/languages are very useful in distributed systems: look at Thrift/Protocol Buffers ( languages for describing serialization of data structures for RPC). Google also has custom language which is compiled into state machines that they used to implement their Chubby service (and probably other distributed systems) -- see the "Paxos Live" paper. At an employer I've been at, which (when I was there) was deploying distributed systems with tens of thousands of nodes, we've created a custom language for describing/querying groups of machines: this language and systems built on top of it (for monitoring, configuration, provisioning and deployment), helped reduce admin:machine ratio by orders of magnitude (think a team of three handling ~10,000 machines).
(1) I suggest picking up an older (not the newest) version of the Dragon Book and targeting a x86/amd64/MIPS: while for a practical compiler I'd almost certainly suggest targeting LLVM or JVM/CLR, you'll learn more targeting bare metal.
(2) Incidentally, Lamport's landmark paper suggested treating processes in distributed systems as state machines.
I am not able to wrap my head around what was it specifically that you needed a language for - rather than, say building it on top of perl/python/lua - and whether you used the yacc/bison toolchain to build it.
The queries you'd make would be like: "Give me difference of (union of ( all machines running 64 bit Linux , all machine in cluster "match", all machines in wast coast datacenter )) machines starting "box10" and then show me the vlans these machines are on". Of course this would be in a much more terse (but very easy to learn) language. Perl/Python/C code (and through a CLI tool, shell scripts) would then do operations on returned values (i.e. parallel ssh to execute a command, parallel TCP call).
"Map Reduce Usage at Google: 3.5m jobs/year averaging 488 machines each & taking ~8 min ... Big Table Usage at Google: 500 clusters with largest having 70PB, 30+ GB/s I/O"
So to run 3.5 million jobs at 8 minutes each on 488 machines that means they would need at least 26,069 machines to complete those map reduce jobs in a year.
Similarly if you deduce that for their largest storage cluster they are using their previously described commodity hardware approach and at the moment the sweet spot for drives is at about 1TB with 1 or two drives per machine that is between 36,700 and 73,400 machines in their largest storage cluster. That seems like a lot.
o Similar to BigTable in that Spanner has tables, families, groups, coprocessors, etc.
o But has hierarchical directories rather than rows, fine-grained replication (ad directory level), ACLs
Finally :-)
You're right... how do you compete against this?
I always felt as though the discussion was missing something -- and I think that this is it. Competition is different from most startups' vision of success. Growing to compete with the titans of your industry is always harder, so maybe you do need to ride a wave to do it.
I'll be the methods are the same, at least at the start:
make something people want
That's what facebook did, and they've now got some pretty cool infrastructure running in-house.I wouldn't say -- particularly after reading that article, yikes -- that anyone is really in a position to compete directly with google via frontal assault.
But if you really want to take on Google instead of be bought by them, the starting point is probably the same as it would be for an upstart in manufacturing back in the day: make something people want, a killer product; become the leader in that product, that thing, and you'll probably be more competitive than when you started, even if you don't have the economies of scale of your competition.
Google does move really fast, and their moat is massive.
I personally have neither the desire nor the ability to pole-vault that moat. Still, the trend against them is the iron-clad rule that small teams are always more productive than large teams (they manage it incredibly well, still -- somewhere, somehow, this is a drag on them), small organizations can move faster than big ones, etc.
Small organizations will be able to make things people want, the first step towards competitiveness. And as for infrastructure advantage the trend is in their favor:
cloud-on-demand; or, DIY big storage (backblaze guys)
crawling-on-demand (8legs et al)
pbx-on-demand (twilio etc)
... lots more ...
That ecosystem empowers tiny companies to do a lot more before they have to think about in-housing difficult infrastructure -- possibly, enough to fund it!( This is all just a thought exercise; I don't know why someone would want to wade the moat and take down google as opposed to sell to them. There are more pleasant things to do with your life. )