Here's what makes it so: 👇
▶️ git clone github.com/elastic/elasti…
And you get all the source code on your laptop, in one IDE window.
▶️ ./gradlew assemble
And you get a single file to distribute the entire app.
▶️ ./elasticsearch
And you get the app running on your laptop, with all functionality inside a single process.
▶️ curl http://localhost:9200/
All functionality is available locally on your laptop. You can attach a debugger and break on any line of code anywhere in the app.
▶️ ./elasticsearch # on another computer
Start the app on another computer on the same network, and a cluster will automatically form between the two processes. Repeat to add more nodes.
While each node can handle all functions, the cluster can make certain nodes handle only one specific function (ingestion, storage, querying, etc). This is useful for running the app on optimal hardware without breaking it in independent components.
You're always interacting with one well-defined version of the app, unlike an app composed of many independently-deployable microservices.
A deployment is just a version upgrade for the entire app. And a rollback is just a version downgrade. Every deployment updates all nodes. There are no separate components to worry about being compatible with each other.