Historical Intro
In November 2014, AWS Lambda was released, and it was nothing short of a revolution.
Lambda allows developers to define simple functions & run their code without provisioning or managing servers. AWS takes care of all the necessary infrastructure. The code is run as response to a trigger, and it can be called concurrently thousands and thousands of times and keep scaling.
Unfortunately the implementation details of AWS Lambda are proprietary, and the only way to take advantage of its features is to use AWS, it is not possible to change providers.
In February 2016, Google announced a competitor of AWS Lambda, Google Cloud Function, with the same functionality - unfortunately the software is still closed-source.
Introducing Effe
Today, RedBeardLab is glad to announce the first version of effe, an open-source project which provides the building block necessary to create a “server-less” architecture without locking the developer into any proprietary infrastructure.
effe
is not the infrastructure - it is a small, completely customizable, go-lang package that, once compiled, needs to run inside a bigger architecture; effe
is the building block.
Short video introduction
Different premise than AWS Lambda
effe
has been built on a different premise than AWS Lambda.
-
Isolation is not a real issue today, containers can provide complete isolation between runtimes and much more.
-
It is preferable to have a binary idling on a machine waiting for input, with a small memory footprint and no start-up time, than no memory footprint at all but non-negligible start-up time.
-
Opening and closing connections to databases and other services is expensive, it is not desirable to open a new connection every time a function is invoked.
Based on these assumptions, after a lot of study and thought, we’ve come up with effe
.
effe
is built following the philosopy that perfection is reached when there is nothing left to eliminate, not when there is nothing more to add.
For this reason the code is extremely small, but it will let you do at least the same as AWS Lambda.
Developed in go
effe
has been developed in go; we chose this languange for a variety of reasons:
-
First class support for concurrency: Writing the
effe
code was easy; the code is small, clear and easily-understandable. -
The go languange overall: go is backed by Google and its main uses are web-related services (eg. it already provides support for HTTP2), its syntax is understandable by most developers and it can produce a single, small executable.
-
Garbage Collector: The performance of the go GC is interesting, on top of that most applications written in
effe
are going to be I/O bounded, so the GC should not be a problem. On the other hand, memory that is not managed carefully could cause serious damage in this environment.
effe-tool
Go has been written to simply construct complex systems, so it is a little rigid when you try to do things in a novel, non-standard way, as we did with effe
.
It is possible to compile an effe
executable, however it is a little tricky and requires an intimate knowledge of how the go compiler works.
To help relieve this pain point, we wrote a little command line utility, effe-tool, that let you simply create a new effe
and, more importantly, lets you build it with a simple interface.
effe-tool
is the best way to get started with effe
.
Not complete yet
The whole effe
project is not complete yet.
It currently lacks a simple and easy way to deploy, which is arguably one of the most important benefits of AWS Lambda.
However, it is already usable and, with a little bit of DevOps experience, it can already provide an infinitely-scalable architecture.
The next milestone is to add “dockerization” capabilities to effe-tool
, so that with a single command you can create a docker container, update it in your registry and have it ready to run in production.
For now, we are trying to gather feedback from the community, and we would love you to use our software to build your next project.
You can star the project on github, open issues, submit pull requests or subscribe to our mailing list to be kept up-to-date.
If you subscribe (bottom right), you will also receive our “Little introduction to distributed, highly scalable, fault tolerant system.”