71
Five years of Node.js Unity <3 Node.js, or do we…?

Unity Loves HelNode - Helsinki Node.js November Meetup

Embed Size (px)

Citation preview

Page 1: Unity Loves HelNode - Helsinki Node.js November Meetup

Five years of Node.js

Unity <3 Node.js, or do we…?

Page 2: Unity Loves HelNode - Helsinki Node.js November Meetup

The Beginning

Page 3: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 4: Unity Loves HelNode - Helsinki Node.js November Meetup

The Beginning

Page 5: Unity Loves HelNode - Helsinki Node.js November Meetup

PHP + MySQL

Page 6: Unity Loves HelNode - Helsinki Node.js November Meetup

PHP + MongoDB

Page 7: Unity Loves HelNode - Helsinki Node.js November Meetup

Node.js + MongoDB

Page 8: Unity Loves HelNode - Helsinki Node.js November Meetup

Late 2010: Node.js 0.4

700M ads served per day

Page 9: Unity Loves HelNode - Helsinki Node.js November Meetup

Thus began our 5-year journey with Node.js

Page 10: Unity Loves HelNode - Helsinki Node.js November Meetup

Initially, Node was used only for APIs for ad delivery

Page 11: Unity Loves HelNode - Helsinki Node.js November Meetup

New products and features were an easy way to

transition

Page 12: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 13: Unity Loves HelNode - Helsinki Node.js November Meetup

Backbone + Node.js + MongoDB

Page 14: Unity Loves HelNode - Helsinki Node.js November Meetup

But it was not always a smooth ride…

Page 15: Unity Loves HelNode - Helsinki Node.js November Meetup

Updating between Node versions was horrible

Page 16: Unity Loves HelNode - Helsinki Node.js November Meetup

We ended up having different services run on different Node versions

Page 17: Unity Loves HelNode - Helsinki Node.js November Meetup

A bleeding-edge tech stack will give you new challenges

Page 18: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 19: Unity Loves HelNode - Helsinki Node.js November Meetup

Things we learned: MongoDB shards well…

on paper

Page 20: Unity Loves HelNode - Helsinki Node.js November Meetup

Things we learned: It was easier to optimize code and data layout than shard

MongoDB

Page 21: Unity Loves HelNode - Helsinki Node.js November Meetup

Things we learned: Handling memory leaks in

Node.js is a pain

Page 22: Unity Loves HelNode - Helsinki Node.js November Meetup

Things we learned: External dependencies,

especially NPM, can make your deplos unreliable

Page 23: Unity Loves HelNode - Helsinki Node.js November Meetup

While on the subject of NPM(JS.org)…

Page 24: Unity Loves HelNode - Helsinki Node.js November Meetup

One of the best parts of Node.js is the community

Page 25: Unity Loves HelNode - Helsinki Node.js November Meetup

One of the best worst parts of Node.js is the community

Page 26: Unity Loves HelNode - Helsinki Node.js November Meetup

NPM, like actually most package managers, can be

a security issue

Page 27: Unity Loves HelNode - Helsinki Node.js November Meetup

Are you doing this?

~1.2.3 or

^1.2.3

Page 28: Unity Loves HelNode - Helsinki Node.js November Meetup

Are you doing this? If you are, stop right now.

Page 29: Unity Loves HelNode - Helsinki Node.js November Meetup

But you have no control over dependencies of used

packages!

Page 30: Unity Loves HelNode - Helsinki Node.js November Meetup

Worst case scenario

Your application

Dependency A

Dependency B

Sub-dependency

A.1

Sub-dependency

A.2

Page 31: Unity Loves HelNode - Helsinki Node.js November Meetup

Worst case scenario

Your application

Dependency A

Dependency B

Sub-dependency

A.1

Compromised package

Page 32: Unity Loves HelNode - Helsinki Node.js November Meetup

Worst case scenario

Your application

Dependency A

Dependency B

Sub-dependency

A.1

Compromised package

Page 33: Unity Loves HelNode - Helsinki Node.js November Meetup

npm shrinkwrap

Page 34: Unity Loves HelNode - Helsinki Node.js November Meetup

The Present

Page 35: Unity Loves HelNode - Helsinki Node.js November Meetup

Tech Stack

Node.js MongoDB + Cassandra +

Redis Angular.js + Bootstrap

Page 36: Unity Loves HelNode - Helsinki Node.js November Meetup

Infrastructure

Everything on AWS Docker for deployment

Page 37: Unity Loves HelNode - Helsinki Node.js November Meetup

Teams

2010: 8 people in Helsinki 2015: 70+ people in Helsinki

Page 38: Unity Loves HelNode - Helsinki Node.js November Meetup

Requirements

99.9% uptime Continuous deployment

Handle massive scale

Page 39: Unity Loves HelNode - Helsinki Node.js November Meetup

How are we handling that?

Page 40: Unity Loves HelNode - Helsinki Node.js November Meetup

#1: Testing

Page 41: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 42: Unity Loves HelNode - Helsinki Node.js November Meetup

For continuous deployment, we must aim for ~100% test

coverage

Page 43: Unity Loves HelNode - Helsinki Node.js November Meetup

Tests are our compiler type-safety check

Page 44: Unity Loves HelNode - Helsinki Node.js November Meetup

#2: Automated Deployment

Page 45: Unity Loves HelNode - Helsinki Node.js November Meetup

Developers must be able to handle deployment and rollback independently

Page 46: Unity Loves HelNode - Helsinki Node.js November Meetup

Auto-scaling must be able to set up new instances in a few

minutes

Page 47: Unity Loves HelNode - Helsinki Node.js November Meetup

Developer  

commit  

No.fies  of  commit  

Clones  repository  

Tests    run  

Docker  container  pushed  to  private  registery  

Deploy  Happiness  

Page 48: Unity Loves HelNode - Helsinki Node.js November Meetup

#3: Understanding the weaknesses of Node.js

Page 49: Unity Loves HelNode - Helsinki Node.js November Meetup

Leaking memory is easy, and debugging memory leaks is

insanely difficult

Page 50: Unity Loves HelNode - Helsinki Node.js November Meetup

Callback-hell makes debugging painful

Page 51: Unity Loves HelNode - Helsinki Node.js November Meetup

Node.js is single-threaded

Page 52: Unity Loves HelNode - Helsinki Node.js November Meetup

Let’s talk about that for a while…

Page 53: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 54: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 55: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 56: Unity Loves HelNode - Helsinki Node.js November Meetup
Page 57: Unity Loves HelNode - Helsinki Node.js November Meetup

Making sure your code yields adds complexity you don’t

want

Page 58: Unity Loves HelNode - Helsinki Node.js November Meetup

Measuring and monitoring these spikes is a nightmare

Page 59: Unity Loves HelNode - Helsinki Node.js November Meetup

How do you measure?

Page 60: Unity Loves HelNode - Helsinki Node.js November Meetup

Single-threaded also means that you cannot cache data

efficiently on the local machine

Page 61: Unity Loves HelNode - Helsinki Node.js November Meetup

We run 40 Redis instances to act as data caches

Page 62: Unity Loves HelNode - Helsinki Node.js November Meetup

… and we still run Memcached locally in

addition to that

Page 63: Unity Loves HelNode - Helsinki Node.js November Meetup

Writing CPU-optimized code with Node.js is extremely

difficult

Page 64: Unity Loves HelNode - Helsinki Node.js November Meetup

The Future

Page 65: Unity Loves HelNode - Helsinki Node.js November Meetup

Would we choose Node.js again?

Page 66: Unity Loves HelNode - Helsinki Node.js November Meetup

Probably not.

Page 67: Unity Loves HelNode - Helsinki Node.js November Meetup

Node.js is useful for prototyping.

Page 68: Unity Loves HelNode - Helsinki Node.js November Meetup

Node.js does create burden in sustainable development.

Page 69: Unity Loves HelNode - Helsinki Node.js November Meetup

Node.js requires a lot of discipline from the

development team.

Page 70: Unity Loves HelNode - Helsinki Node.js November Meetup

In the end: right tool for the right task.

Page 71: Unity Loves HelNode - Helsinki Node.js November Meetup

Thank you!

http://unity3d.com/helsinki