Brief notes on Meteor for CS 294-101. Many of the key architectural ideas in Meteor are described at https://www.meteor.com/projects.
-
BSD as example of great system design. Application primitives: processes run by a scheduler, sockets, sys calls, virtual memory, mbufs. What makes something a platform. Unix vs Multics.
-
History of application architectures. Mainframes (e.g. IBM 360 / 3270), client-server (e.g. Win32), web (e.g. LAMP), cloud-client. Oscillation of where the software runs. Thin vs thick clients, data vs presentation on the wire. Changes driven by massive forces (cheap CPUs, ubiquitous internet, mobile). New architecture for each era.
-
What it takes to make modern UI/UX. Mobile. Live updating. Collaboration. No refresh button. All drive the need for “realtime” or “reactive” system. Very different from HTTP era.
-
Four questions: 1 — how do we move data around; 2 — where does it come from; 3 — where do we put it; 4 — how do we use it?
-
DDP — the distributed data protocol. It’s all about the wires. Problems with HTTP and REST. Websockets. Publish and subscribe. RPC. EJSON. Authentication. Separation of client and server. https://www.meteor.com/ddp https://www.meteor.com/ejson
-
Livequery — observable database queries. Mongo poll-and-diff vs Oplog tailing. Strategies for other databases: redis, SQL. https://www.meteor.com/livequery https://www.meteor.com/blog/2013/12/18/david-glasser-on-scaling-meteor-with-the-mongodb-oplog
-
Full stack database drivers. Mini databases. Isomorphic APIs. Distributed caching. Latency compensation. https://www.meteor.com/full-stack-db-drivers https://www.meteor.com/mini-databases
-
Blaze and reactive templates. https://www.meteor.com/blaze
-
Generalized reactivity on the client. Tracker. Autorun. https://www.meteor.com/tracker https://github.com/meteor/meteor/wiki/Tracker-Manual
-
Putting it all together: autopublish and the mind-melting screencast. https://meteor.com/screencast
BONUS TIME
-
Concurrency and performance in JavaScript. Fibers. https://github.com/laverdet/node-fibers http://wiki.ecmascript.org/doku.php?id=harmony:generators
-
Packaging. Single loading vs multiple loading. Meteor’s version solver. A* vs SAT. https://www.meteor.com/version-solver http://minisat.se/ https://www.npmjs.com/ http://bundler.io/
-
Isobuild. https://www.meteor.com/isobuild