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

Serverless in Scala on Node.js

Serverless in Scala on Node.js

Lightning Talk at Tokyo Node Festival 2018 Day 2
https://nodejs.connpass.com/event/106263/

TATSUNO Yasuhiro

November 24, 2018
Tweet

More Decks by TATSUNO Yasuhiro

Other Decks in Programming

Transcript

  1. Serverless in Scala on Node.js High Productivity and Resource Saving

    TATSUNO Yasuhiro 2018-11-24 Tokyo Node Festival
  2. 所属での事例紹介 case study from my job 教師データ作成・保管SaaS Quality Annotation for

    ML at Scale 名古屋で機械学習の研究開発 R&D in Machine Learning at Nagoya 2018: ヤフー株式会社(Yahoo Japan) さまとの共同研究 道路沿いの視覚情報をAIでテキスト化する実証実験 https://about.yahoo.co.jp/pr/release/2018/10/15a/ 2017: Google I/O 2017 で紹介 スマートデバイスでラジオ体操をモーション認識 https://youtu.be/25ISTLhz0ys
  3. 少人数で自社SaaS立ち上げの技術テーマ Our Technical Challenges for Building SaaS in Small Team

    両立してイテレーションを速く回す!! インフラ管理とコスト抑えて機能開発に専念できるように Serverless Architecture チームの誰もがUIもバックエンドも開発しやすいように Universal Architecture
  4. サーバーレスのうれしさ Why we love "Serverless" 1. Scale by Design: 必要な性能・量の資源が必要な

    ときに自動起動=スケールしやすい設計になる。 ユーザが少ない時間帯の料金節約にもなる 2. Agile and Manage-Less: フルマネージドサービス 活用でインフラ構築が迅速。管理コストも小 プログラム実行環境の例 Lambda イベント駆動アプリ データベースの例 Batch バッチコンピューティング Aurora Serverless オンデマンドでスケールするRDB AppSync リアルタイムデータアプリ向けBaaS
  5. なぜサーバーレス開発で Scala を選ぶか Why our team choose Scala for Serverless

    SDK Runtime • Back-Endは社内知見豊富で生産性高い Scala • 少人数で Front-End & Back-End を継続開発する必要。 Front-End は Scala.js にして、Universalに開発したい Java JVM Java JS Node.js JS C# .NET C# Python Python Python Language Go Go Go Scala AWS Lambda
  6. 1. Slow Cold-start: メモリをケチると初回起動に数秒。 Web APIバックエンドに使うには遅すぎる メモリ増やしたり、インスタンスを暖めておけば、速くなる。 しかし無料枠が削られてコスト増 2. Too

    Big : 使いたいライブラリを色々乗せたら、 Lambdaのデプロイ上限 50MB スレスレ。立ち上げ 時からプロジェクト分割など手間がかかる Scala on JVM サーバーレスの課題 Technical Challenges in Scala on JVM for Serverless 無難に JS or Python …?
  7. Scala SDK Runtime Language Java版 JVM Scala言語とScala&JSライブラリで開発できるAlt-JS Write JS in

    Scala using Scala Libraries and JS Libraries Our Solution: Run Scala on Node.js using… JavaScript版 Node.js JavaScript transpile use Scala.js
  8. 128MB 256MB 512MB 1024MB 1536MB 10秒 8秒 6秒 4秒 2秒

    0秒 Java (JVM) Scala (JVM) Scala (Node.js) Cold-Start / seconds 省メモリでも Cold-Start 0.1s=爆速 ライブラリ使っても 4MB 程度 何よりチームの好きなScalaで開発 採用 Adopted! 課題解決
  9. 1. 何とかなって自分でも驚いてしまった 2. Front-EndもBack-Endも同じ言語、コードベー スで開発できて疲れない 3. Scala.js由来でユーザに迷惑かけたバグない 4. 将来的には JVM

    の低フットプリント化・高速 起動にも期待: Modular Java, Graal VM 5. 好きな言語で意地でもServerless → AltJS on Node.js という福音 Universal Scala.js で1年半開発・運用してみて Retrospection after 1.5 years of Universal Scala.js in production
  10. Programming Language You Love ... if it has AltJS tooling

    Node.js-powered Serverless Architecture Win 今回1番言いたいこと Summary High-Productivity Resource Saving and Fun
  11. Date メ モ リ 使 用 率 Memory Usage Node.js

    8.10 Lambda on Node.js 6.10 Node.jsバージョンアップで最大60%省メモリ Newer Node.js cut memory usage 60% +Turbofan JIT compiler +Ignition Interpreter 省 メ モ リ 化 Less Memory
  12. Type Definition Importer for Scala.js TypeScript の *.d.ts をScala.js用に変換するツール。Scala.js作者が開発。 TSの変化が速く、足りない機能が多かったので

    PR 送りまくった。 Webブラウザ版も作りました https://exoego.net/scala-js-ts-importer/ Example) Converts electron.d.t.s for Scala.js Typing