ログミーTech Live #1「サーバーサイド開発最前線」に参加してきました

  • ログミーTech Live #1「サーバーサイド開発最前線」に参加してきました。

logmitechlive.connpass.com

  • 最近サーバサイドKotlinが気になっていたこともあり参加してみました。
  • テーマが「サーバーサイド」とスコープを絞りすぎない勉強会だったので、普段ふれないgoやScalaGCPの話も聞けて良かったです。
タイトル 発表者
Go/GAEで作る金融システム 株式会社ネクストカレンシー
FRESH LIVEにおけるServer Side KotlinとMicroservicesの今 株式会社サイバーエージェント 野澤聡史氏
クラウド電子カルテを支えるテクノロジーの光と闇 エムスリー株式会社 冨岡純氏

Go/GAEで作る金融システム

ネクストカレンシー

  • DMMの子会社
  • 仮想通貨の会社
  • 金融業
  • 高い安全性が求められる

技術スタック

  • GCP
    • easyだから
  • golang
    • simpleだから
  • node

Google App Engineはいいぞ

  • Googleが提供するPaaS
  • とにかく楽
    • bluegreenデプロイ
      • GAEのバージョンの機能を使う
    • スケールイン/アウト
      • goなら立ち上がり数十ミリ秒
    • セキュリティ

Stackdriver Loggingはいいぞ

  • フルマネージドなロギングサービス
    • GCPで出力されるログが集約される
  • 加工や通知が楽
  • 柔軟なフィルタ

Protocol Buffersはいいぞ

  • APIドキュメントメンテしなくなりがち
  • シンプルで高速
  • JSONをhttpでやりとりするのと同じようにProtocol Buffersをやりとりする
  • ドキュメント=実装なのがいい

golangはいいぞ

  • シンプルな仕様
  • 並行処理
  • ループするならfor,if使うしかない
    • シンプル

FRESH LIVEにおけるServer Side KotlinとMicroservicesの今

FRESH LIVEとサーバサイドKotlin

  • 様々なマイクロサービスにKotlin導入してる

FRESH LIVEとマイクロサービス

  • どっかが落ちても全体は倒れない
  • 戦略とともに必要なところをスケールできる
  • 1サービス1DB
  • サービス間はgrpc
  • 低レイヤーはgo

SpringBoot2とKotlin

  • Idiomatic Kotlin Code
    • Kotlinらしく書くためのベストプラクティス
    • 拡張関数が便利
  • Router Function DSL
    • エンドポイントをDSLで書ける
    • コンストラクタインジェクトで@Autowiredを省略
  • Spring Web Flux
    • Reactiveをサポート
    • StreamなAPIを簡単に作れる

コンテナとマイクロサービス

  • 環境変数をコンテナにDI
  • k8sのSecretリソース
    • 環境ごとに異なる機密情報を扱う
    • コンテナの環境変数にセット
  • サービスログ収集
    • これまではecs
    • k8sのDaemonSetでfluentdをNodeに配置
    • サイドカーコンテナの撤廃
    • ログは標準出力に吐くだけ
    • stern
      • podのログを見られる

gRPC

  • HTTP2との効率的な接続
  • 双方向ストリーミング
  • portを分けて2つのServer起動
    • CommandLineRunner
    • DisposableBean
  • SpringとgRPC
    • Server起動Interceptorなど難なく構築
    • 入念なクライアント疎通確認必要(特にAndroid)
    • 周辺ライブラリのアップデートをこまめに

まとめ

  • サーバサイドKotlinやるならSpringBoot2おすすめ
  • k8sでコンテナ配置戦略に変化
  • gRPCで効率的な通信

クラウド電子カルテを支えるテクノロジーの光と闇

  • エムスリー株式会社 冨岡純さん(@jooohn1234)

クラウド電子カルテ

  • クラウドが当たり前の業界ではない
    • 導入できたらありがたみを実感できた

  • 院内ネットワークとクラウドの連携にハードル
    • socketio使って双方向通信
    • サーバはNode
    • クライアントはJava
  • 院内ネットワークで動くものの保守つらい
  • 全部クラウドの世界になってほしい

レセコン

  • 会計ソフトウェア

  • カルテの情報をレセコンと動機するのは必須
  • 診療報酬点数計算等々複雑で開発ハードル高い

  • Scala
    • 管理しやすく(oop)
    • 堅牢(fp)
  • Functional Programming
    • テスト再利用容易
    • 点数計算は巨大な関数
  • Clean Architecture
    • 複雑な起算ルールと作用を分離

まとめ

  • レガシー業界ではすべてがモダンにならない過渡期がある
  • 設計手法を駆使して少しずつ良くしてる