Running a Serverless Lucene Reverse Geocoder Alexander Reelsen alex@elastic.co @spinscale
Slide 2
Agenda ‣ What is serverless? ‣ Searching for Locations ‣ Demo ‣ How to execute java code faster
Slide 3
Serverless?
Slide 4
Serverless? ‣ FaaS (Function as a Service) ‣ Execution Environment as a Service ‣ Payment model: Pay per code runtime ‣ Not running? No bill! ‣ Configure memory size (also changes CPU power) ‣ Maximum function execution time ‣ Provider takes care of scaling functions
Slide 5
Examples ‣ Good: Short lived HTTP requests ‣ Good: Short running jobs ‣ Good: Event streaming & processing ‣ Good: Share nothing web applications ‣ Good: Parallelizable workloads ‣ Bad: Slack bots?
Search across points ‣ Each city gets indexed with a lat/lon pair ‣ Search for the next point to the supplied one ‣ Problem: Neighbours!
Slide 14
Point based search: Near neighbours
Slide 15
Point based search: Near neighbours
Slide 16
Search across shapes ‣ Each city gets indexed with a lat/lon pair ‣ Certain cities get indexed as a geoshape ‣ Run two searches: ‣ Lat/Lon within any shape ‣ Lat/Lon nearby any point
Slide 17
Geo and Lucene: BFF! ‣ LatLonPoint: two points, 4 bytes each ‣ LatLonShape: triangular mesh tesselation
Slide 18
Geo and Lucene: BFF!
https://home.apache.org/~mikemccand/geobench.html
Slide 19
Geo and Lucene: BFF!
https://home.apache.org/~mikemccand/geobench.html
Slide 20
Serverless Lucene ‣ Local execution, index part of the package ‣ Offline index creation ‣ Packaging index into code ‣ Index needs to be unpacked, using Lucene via classpath resources is tricky
Slide 21
Demo
Slide 22
Summary ‣ Works! ‣ Problem: Data quality, getting accurate shape data ‣ Problem: First invocation (up to 2s) ‣ JVM startup ‣ Lucene index opening
Slide 23
Faster startup & runtime
Slide 24
Enter GraalVM! ‣ A new compiler, supporting HotSpot and AOT compilation ‣ Graal compiler part of Java9 (experimental!) ‣ Graal JIT compiler part of Java10 (Linux 64bit only) ‣ Project Metropolis: Java-on-Java Hotspot implementation ‣ Truffle: Framework to implement other languages on top of graal (jruby replacement)
Slide 25
Enter GraalVM! ‣ AOT static compilation + SubstrateVM = executable binaries of java apps ‣ Using SubstrateVM ‣ Reflection!
Slide 26
Slide 27
Deployment model
Slide 28
AWS Lambda ‣ Deployment model: Zip archive in S3 bucket ‣ Execution: Download zip archive & execute ‣ Requires regular java start (AWS reduced JVM startup time) ‣ GraalVM can only be used with custom runtime
Google Cloud Run ‣ Serverless done ‘right’? ‣ Docker container as a web application listening in $PORT ‣ Deployment model: docker push && gcloud beta run ‣ Easier to test ‣ Configurable concurrency ‣ Improved billing model due to concurrency
Slide 41
Demo
Slide 42
Summary
Slide 43
Summary ‣ Economics ‣ Billing model ‣ Runtime cost vs. development cost ‣ Break even vs. non serverless model ‣ Development ‣ Vendor lock-in ‣ Deployment model is important ‣ Cloud Run: Run serverless or as container ‣ Scalability strategies, base load container, increased load serverless? ‣ Observability