
Systems Programming at Twitter (2012) - lelf
http://monkey.org/~marius/talks/twittersystems/#1
======
readme
I don't understand how this is about systems programming. Would someone care
to clarify?

~~~
dbrower
I take it to imply the 'system' they are programming is the
distributed/concurrent complex they are running. To other people, 'system' is
below that, and this is application programming, or "middleware"

It seems like at any level, you write the system, and applications are above.

-dB

~~~
seanmcdirmid
What else does the systems community do these days besides concurrent
distributed systems?

~~~
weland
Power management and flash/SSD-aware filesystems are also quite the rage.

~~~
seanmcdirmid
Ya: distributed computing, storage, and power are hot. Where did all the
kernel research go?

~~~
weland
Much of it happens with different objectives, or at different levels, in the
context of computing, storage and power management. See Akaros for example:
[http://akaros.cs.berkeley.edu/akaros-
web/overview.php](http://akaros.cs.berkeley.edu/akaros-web/overview.php) .

------
YZF
Twitter seems like the poster child for Scala. I've played with Scala a little
and it definitely has a lot of things going for it yet I wonder:

\- Is Scala used exclusively for systems programming in Twitter or are there
other languages in the mix?

\- The majority of other big software players seem to be not using it for
various reasons. Is that a concern?

\- How is the learning curve for new hires? How long before they become
productive? How long before they write great code in Scala (as opposed to
still figuring things out but maybe being productive)?

\- Isn't the JVM too big of a performance compromise for large scale software
where every bit of performance matters?

\- Is it easier to hire people for Scala positions? Harder? The same?

\- How do engineers in Twitter with a lot of experience in other platforms and
languages feel about Scala after having used it for a while? E.g. vs. C++, Go,
Java, C# just to throw a few names into the hat there. Do people tend to just
write C++ in Scala or Java in Scala or whatever or do they adopt to new
paradigms with ease?

I know we always say that a good engineer can pick up any new language and to
some extent that's true but I think expertise in a specific language builds up
over time. Maybe an analogy would be a musical instrument. It seems some of
the other languages have larger pools of talent, more mature tools, etc. I
guess it's hard to be a new language in this world...

~~~
meowface
I've heard many complaints about Scala being too much of a "kitchen sink"
language; too many paradigms and too many features from each paradigm. It
still seems like the best language that uses the JVM, though.

~~~
danieldk
There's also Kotlin, which is largely a better Java. And Java 8 is an enormous
improvement too, since it supports lambdas, default methods, streams, etc.

------
noname123
Hi, I'm currently in the researching & prototyping phase of what's the best
and will-be-the-most-community supported distributed real time distributed
framework based on the reactor pattern?

So far, I've got:

Queuing Framework (rolling your own streams):

1) ZeroMQ (language agnostic, so have to roll your own serialization and
services, seems like Google Protocol Buffer is the best way to go)

2) RabbitMQ (relies on a central message broker, with lots of built-in
bindings)

Event-Based Frameworks:

2) Akka (JVM)

3) RxExtensions (.net) but have RxCpp and RxJava ports

4) Reactor (JVM)

Stream-Based Frameworks

4) Twitter Storm (Java-ish, but suppose to be language agnostic?)

5) S4 (Java-ish, but suppose to have bindings?)

Can any peeps help me out on your opinion what is the best or give me a better
one? Currently, I'm having fun multiplexing sockets, dereferencing C pointers
and seg-faulting, so any suggestion is welcome.

~~~
noelwelsh
IF you're looking at RabbitMQ you should take a look at Kafka.

Overall, I think looking for one framework to-rule-them-all is a mistake.
Different components demand different tradeoffs.

------
jeffreyrogers
The content here is interesting, but I don't like the way the information is
displayed. Most of the time when I read HN I skim the articles I'm interested
since it's not worth my time to dive into all the details. This layout makes
it pretty difficult to do that efficiently.

------
amirouche
no a single word about the "data bus" they use. This would be better entitled
something like "Scala crash course by a twitter system engineer"

~~~
lumpypua
They don't use a global data bus AFAICT. It's all driven by rpc through
finagle (i.e. thrift). Finding service endpoints is likely done through
zookeeper or some equivalent.

~~~
alecthomas
That is correct. The service discovery is called ServerSets and is available
here:
[https://github.com/twitter/commons/blob/master/src/java/com/...](https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/zookeeper/ServerSetImpl.java)

~~~
amirouche
I understand that there is finagle and also a service discovery backed by
zookeeper.

I fail to understand how twitter's data stays consistent without something
like linkedin's databus. Doesn't twitter manage a single point of thruth or a
single version of thruth and propagate changes to secondary databases like
social graph & search indexes?

------
wging
Is anyone else having trouble viewing this on a mobile device?

