Spring Fest 2018に参加してきました

Spring Fest 2018 に参加してきました。

参加したセッションは以下の通りです。
キーノートが結構盛り上がっていたのですが、子供を保育園に送ってから行ったら間に合わず…

  • 決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発
  • 実際のプロジェクトでSpringアプリをKotlinで開発して得た気づき集
  • Knative: Serving your Serverless Java Service on Kubernetes the 12-Factor way
  • 500+のサーバーで動くLINE Ads PlatformをささえるSpring
  • Spring Boot with Kotlin, functional configuration and GraalVM
  • Micrometer/Prometheusによる大規模システムモニタリング 〜ヤフーインターネット広告システムでの導入事例〜

それぞれ聴講した感想を。

決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発

自身のキャリアとして、クレジットカードの基幹システムや決済システムに多く携わってきたのでとても興味があったセッションです。

内容としては、開発をベンダーに任せきりだった状態から、

  • 運用作業の自動化
  • 開発基盤の整備(GitHub Enterprise、Slack、Confluence、Jiraの導入)
  • サービス監視の導入(Elastic Stack)
  • CIの導入(Jenkins, Nexus, SonarQube)
  • Spring Boot、Spring Cloudへ

と身近なできるところから進め、体制を増やしながら改善を進めてきたという前振りから始まりました。 正直、ここまでで十分すごいなって感じだったのですが、その後プラットフォームとして Pivotal Application Service(PAS) を採用、Concourse CI でビルドパイプラインの構築、開発環境では常にCI/CDが実行され、Productionへはワンクリックでデプロイされるというモダンな構成まで持っていっていて凄いですね…。ベンダーに任せきりから2,3年でここまで来るって思うと、エンダー(SIer)側の立場から見て色々思うところがありました。

資料でわかりやすかったのは、開発プロジェクトの体制と責任分界って箇所。アプリケーション開発者はアプリケーションとデータまで、The Twelve-Factor Appを守ること、ってところが明快で理解しやすかったです。

そのほか、

  • Javaの複数バージョンでCIを実施している
    • バージョンアップ前から実施しているので、バージョンアップする際に安心してあげられる(なるほど!)
    • 本番のJavaバージョン以外でCIが失敗していても本番のバージョンのCIが通っていればOKとした場合、いつコケた箇所を直すんだろう?(すぐに、だと思うけど優先順位が低くなりがちになりそうに思えて、放置されないのかなーとか)
    • Javaのバージョンアップについていく姿勢良い。 攻めて守る !!
  • JMeterでの性能テストを毎日継続して実行、Slackにレポートを送るの良い
    • AWSなどを使うと難しそう(コスト面や申請などで)
  • アプリケーション構成の章のわかりみが凄かった
    • 他加盟店に影響がでないように作り込んだことあるなーとか
    • 接続先多いと大変だよねーとか
    • 決済機関とか特殊な プロトコルでやりとりしたり、色々面倒や苦労があると思うんだけど、そこらへんも聞きたかった。懇親会出ればよかったー

などなど色々感想が出てきて、とても楽しかったです! まだ新システムをリリースしていないとのことだったので、リリース後にどうなったか聞いてみたいと思いました。

実際のプロジェクトでSpringアプリをKotlinで開発して得た気づき集

最近AndroidアプリをKotlinで書いてたりするので(めっちゃ初心者)、興味のあったKotlinのセッションへ。

セッションは、SpringとKotlinの関係(仲良し!)からKotlinのおさらいとSpring利用時の注意点、Spring WebFluxとCoroutinesあたりの話し、Springのアノテーションを減らす、Kotlinでのテスト、といった内容でした。

SpringをKotlinで利用する場合の注意点などは、初心者な自分にもわかりやすく、とてもありがたかったです。

Spring WebFluxでCoroutinesを使う話しあたりはじっくり資料読んだりドキュメント読まないと自分には厳しいですね(´・ω・`) ただ、KotlinのCoroutinesを利用するとスッキリして読みやすく、書きやすくなることは分かったので機会があった際の選択肢にはなるかなと思います。 仕事上、ここらへんの技術を使う機会があるのか怪しいですが…

アノテーションを消していくってところは、いまいちモチベーションが分からなかったですが、起動速度が早くなるのは良いなと思いました。

テストについてはJUnit5を利用しており、モックはMockKを利用している。 特定の文脈でしか呼び出せないCoroutineの呼び出しだったり、デフォルト finalになるクラスもモックにできるのでMockKは便利(というかこれ以外良い選択肢がなさそう?)。

コーディングは ktlint: An anti-bikeshedding Kotlin linter with built-in formatter に従っており、それ以外についてはUbie社でKotlinのコーディングスタイルガイドを作成し、それに従っているとのこと。あ、lateinitとか普通に使ってたな…

Knative: Serving your Serverless Java Service on Kubernetes the 12-Factor way

Knativeの話しが聞きたくて行ったのですが、ほとんど無くて残念でした。 しかも、前半の前振りで疲れて肝心のKnativeの説明部分を集中して聞けず…

ServerlessやFaaSの説明はほどほどに、Knativeの話しをもっとしてほしかった…

500+のサーバーで動くLINE Ads PlatformをささえるSpring

LINEの広告プラットフォームの話。 LINEの広告は7800万人(MAU) にリーチできる(凄い…)プラットフォーム。広告は様々なバリエーション、レイアウト、フォーマットで出す必要があり、しかも50ms以内にオークションしてレスポンスを返さなければならない厳しいシステムとのこと。

広告系の単語が多く、理解しづらい点もありましたが、そこそこ面倒なことを爆速でやらなければならない大変さが滲み出ていました。

アーキテクチャ周りは、基本的にはメモリに乗るものは乗せる、ダメならRedis、みたいな感じで速度をかなり意識している感じです。 サービス間の連携はKafkaを使っていて、かなり使い倒しているようです。

GCが気になるからGoにしたって話しと、ヒープを増やして対応したって話しがあって、Goにせずともどうにかなったのでは?とか思いました。 ちなみに、G1GCを選択していたようですが、ヒープ増やす前の4Gは少ないんじゃないかな?と思いました。

Spring Boot with Kotlin, functional configuration and GraalVM

甲府ー、じゃふー。 Spring Bootでアノテーションで設定しているところを関数(lambda)で設定する、設定はKofu, JafuというDSLで記載する…って感じ?

翻訳するとヤバイ

f:id:tenten0213:20181105221735p:plain

たろうさんのセッションでもあったように、クラスパススキャンが無くなるので起動速度が早くなるという点と、メモリ消費量が少なくなる、GraalVMネイティブイメージフレンドリーといった特徴があるようです。

キーノートでデモしたのかな?相当起動速度が早いようなので、コンテナだったりFaaSの領域で活きてくると面白いなーと思いました。 普段の開発時はさすがにネイティブイメージをビルドじゃなく、ふつうにサーバ立ち上げるのかな?開発、デプロイのプロセスってどうなるんだろう?

Micrometer/Prometheusによる大規模システムモニタリング 〜ヤフーインターネット広告システムでの導入事例〜

MicrometerとPrometheusを使って、3000以上のSpringアプリ、数先インスタンスの監視を行っているとのこと。 プラットフォームは多様で、OpenStack、k8s、PCFなどを利用している。処理の方式も、Web、Web API、バッチ、Pub/Subなど様々。

その監視・運用で困ったことや工夫したことなどを語っていました。 具体的なハマりポイントと、どう解決したかが語られていて、Micrometer, Prometheusを利用している人には参考になりそうでした。 メモはしてあるのですが、合っているか不安なので…資料公開されるのを期待しています!

おわりに

各社の事例と、尖った技術の話しを中心に聞きました。 事例は凄いなって思うものや、参考になるものが多く勉強になりました。尖った技術の話は理解できない箇所も多かったですが、来年、再来年あたりどう変わっているかな?と考えると面白かったです。

運営をしてくださったみなさん、JSUGのみなさん、ありがとうございました!!