Planet9energy.com is a new electricity company building a sophisticated analytics and energy trading platform for the UK market. Since the earliest draft of the platform, we took the unconventional decision to go serverless and build the product on top of AWS Lambda and the Serverless framework using Node.js. In this talk, I want to discuss why we took this radical decision, what are the pros and cons of this approach and what are the main issues we faced as a tech team in our design and development experience. We will discuss how normal things like testing and deployment need to be re-thought to work on a serverless fashion but also the benefits of (almost) infinite self-scalability and the piece of mind of not having to manage hundreds of servers. Finally, we will underline how Node.js seems to fit naturally in this scenario and how it makes developing serverless applications extremely convenient.
5. Agenda
What is Serverless
History & definition
Advantages & costs
How it Works
Example on AWS Lambda
Example with Serverless
Framework
Serverless at Planet 9
Architecture
Security
Quality
Monitoring / Logging
Step Functions
5
14. 👨💻👨💻 Focus on business logic, not on infrastructure
🐎🐎 Virtually “infinite” auto-scaling
💰💰 Pay for invocation / processing time (cheap!)
Advantages of serverless
14
16. Car analogy
Cars are parked 95% of the time ( )
How much do you use the car?
loige.link/car-parked-95
Own a car
(Bare metal servers)
Rent a car
(VPS)
City car-sharing
(Serverless)
16
18. What can we build?
📱 Mobile Backends
🔌 APIs & Microservices
📦 Data Processing pipelines
⚡ Webhooks
🤖 Bots and integrations
⚙ IoT Backends
💻 Single page web applications
18
22. Serverless and JavaScript
Frontend
🌏 Serverless Web hosting is static, but you can build SPAs
(React, Angular, Vue, etc.)
Backend
👌 Node.js is supported by every provider
⚡ Fast startup (as opposed to Java)
📦 Use all the modules on NPM
🤓 Support other languages/dialects
(TypeScript, ClojureScript, ESNext...)
22
23. exports.myLambda = function (
event,
context,
callback
) {
// get input from event and context
// use callback to return output or errors
}
Anatomy of a Node.js lambda on AWS
23
47. a Big Data company
E.g. Meter readings per customer/year
2 × 24 × 365
Half Hours
× 25
~ meter reading points
× 24
~ data versions
= 💩💩load™
of data
47
48. 👩🚀 Limited number of “Full stack” engineers
⚡ Write & deploy quality code fast
👻 Experiment different approaches over different features
😎 Adopt hot and relevant technologies
Limited number of servers = LIMITED CALLS AT 2 AM!
Why Serverless
48
54. User Action Resource
Podge trade Account17
Podge changeSettings Account17
Luciano delete *
... ... ...
Custom ACL module used by every lambda
Built on &
Persistence in Postgres
node-acl knex.js
54
55. import { can } from '@planet9/acl';
export const tradingHandler =
async (event, context, callback) => {
const user = event.requestContext.userId;
const account = event.pathParameters.accountId;
const isAuthorized = await can(user, 'trade', account);
if (!isAuthorized) {
return callback(new Error('Not Authorized'));
}
// ... business logic
}
55
58. Split business logic into small testable modules
Use dependency injection for external resources
(DB, Filesystem, etc.)
Mock stuff with Jest
Aim for 100% coverage
Nyan Cat test runners! 😼😼
Quality: Unit Tests
58
59. Use child_process.exec to launch "sls invoke local"
Make assertions on the JSON output
Test environment simulated with Docker (Postgres, Cassandra, etc.)
Some services are hard to test locally (SNS, SQS, S3)
Quality: Functional Tests
59
60. 👨👨 Git-Flow
Feature branches
Push code
GitHub -> CI
Quality: Continuous integration
CircleCI
Lint code (ESlint)
Unit tests
Build project
Functional tests
if commit on "master":
create deployable artifact
60
66. Some lessons learned...
🚗 Think serverless as microservices " "
❄ !
🚫 Be aware of
🛠 There is still some infrastructure: use proper tools
(Cloudformation, Terraform, ...)
microfunctions
Cold starts
soft limits
66
67. Serverless architectures are COOL! 😎
Infinite scalability at low cost
Managed service
Still, has some limitations
Managing a project might be hard but:
Technology progress and open source (e.g.
Serverless.com) will make things easier
Recap
67