Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Thriving with and within App Engine

Thriving with and within App Engine

Deck made for GDG DevFest Baguio 2016

Ben Adrian Sarmiento

November 05, 2016
Tweet

More Decks by Ben Adrian Sarmiento

Other Decks in Technology

Transcript

  1. LIMITATIONS* can't write in the local disk 60secs deadline to

    respond to requests 10mins deadline for background threads limited to 1 CPU thread even for concurrent PLs can't customize the serving stack doesn't support installing 3rd party binaries some PL features can’t be used
  2. Support for Google Auth Memcache API Cron jobs Task queues

    Search API (Python, Java and Go) Logs API Image API (Python, Java and Go) Mail API URL Fetch service Sockets API Cloud Storage Cloud Datastore
  3. LESSEN WRITE FREQUENCY Consider all remote ops slow Reads are

    turbo fast (constant speed corresp result size)
  4. Open a new shell, run gcloud components list to get

    a list of available App Engine extensions
  5. Zend Expressive Silex Slim Any router package (PHP by itself

    is already a web framework!) FastRoute klein.php https://zendframework.github.io/zend- expressive/ http://silex.sensiolabs.org/ http://www.slimframework.com/ https://packagist.org/packages/nikic/fast- route https://packagist.org/packages/klein/klein
  6. Python libs with C extensions won't work # appengine_config.py from

    google.appengine.ext import vendor # Add any libraries install in the "lib" folder. vendor.add('lib') To install third-party libs.. $ # project root $ pip install -t lib <package>
  7. MISSING LINKS ON LATEST SDK BUILD $ # Warning: Temporary

    fix! $ cd <sdk-location>/bin $ ln -s ../platform/google_appengine/goapp .
  8. app.go package main import ( "fmt" "net/http" ) func init()

    { http.HandleFunc("/", handler) } func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "DevFest Baguio in Go!") }
  9. main.go // +build !appengine package main import "net/http" func main()

    { http.ListenAndServe("localhost:8080", nil) }