Fight with Complicated MircoServices

マイクロサービスの複雑さとの戦い

SBI securiteis Co., Ltd.

System Develop Division

ΛTL

Public Edition

Public Edition

  • 固有名詞は伏せてあります。
  • 過度な誇張が含まれる場合があります。
  • 一般化により実際の環境と異なる場合があります。

In other words

このドキュメントはフィクションであり、

実在の人物・団体とは一切関係ありません

The following story is fictional and does not depict any actual person or group.

Well, I can say anything else ;P

マイクロサービスとは

  • サービスを細かく分割する
  • サービス同士の依存度を減らす

PROS

  • 分割統治による蜜結合と複雑さの回避
  • F/Wや言語を分けてもOKなので少しずつ更新可能

CONS

  • プロジェクトが増える事自体で複雑度があがる

従前のシステム

PL-FP

Large BL

PL-PC

※図にしようしたら時間がかかりすぎるのでやめました

フレームワーク変更するためには

全て作り直さなければならない

PC: Desktop PC

FP: Feature Phone

SP: Smart Phone

PL: Presentation Layer

BL: Business logic Layer

PL-SP

マイクロサービス化

BL-Customer

BL-Products

BL-Order

  • BL間は互いに依存しない
  • PL-BL間はJSON RESTful API
  • 複数のAPIバージョン混在OK

各サービスが独立しているので違う言語でもOK

PL-FP

PL-PC

PL-SP

BL-SSO

BL-Crypto

BL-ATM

PC: Desktop PC

FP: Feature Phone

SP: Smart Phone

PL: Presentation Layer

BL: Business logic Layer

BL-Price

物理配置

LB-PC

LB-FP

LB-SP

WEB-FP

WEB-FP

WEB-FP

WEB-PC

WEB-PC

WEB-PC

WEB-SP

WEB-SP

WEB-SP

LB-Customer

LB: LoadBalancer

AP: Application server

AP-Customer

AP-Customer

AP-Customer

LB-Product

AP-Product

AP-Product

AP-Product

LB-Order

AP-Order

AP-Order

AP-Order

LB-Other

AP-Other

AP-Other

AP-Other

AP層のサーバー群定義が増えすぎてつらい

対策を検討

  • どうせ今のところJava/Scalaしか使わない
  • APサーバーを増やしたくない

対策

各MicroServiceのプロジェクトを

serviceとwebに分割

BL-Web-Customer

BL-Service-Customer

BL-Web-Product

BL-Service-Product

serviceは他のプロジェクトに取り込める

BL-Web-ALL

BL-Service-Customer

BL-Service-Product

BL-Service-Order

BL-Service-Price

必要になったらサービスを独立させる

対策後物理配置

LB-PC

LB-FP

LB-SP

WEB-FP

WEB-FP

WEB-FP

WEB-PC

WEB-PC

WEB-PC

WEB-SP

WEB-SP

WEB-SP

LB-AP

AP-A

AP-All

AP-All

LB: LoadBalancer

AP: Application server

結果

元のLarge BLとあまり変わらない

モジュール化を推進しただけ

重要

モジュール化を推進

「いろんな言語を適材適所で使う」

システムを陳腐化させず、FW等を適宜入替

可能にするにはデプロイ単位を小さくして疎結合にしておく事が最も重要

”選択は、ある時点で確定することはなく、時間の経過とともに、その都度、何度でも行う必要がある"

改修予定

EOSLなFWの入替

ポストJavaへの移行

Scala: バイナリ互換どうにかならないと長期プロジェクトでは厳しい

Clojure: SIerの連れてくる一般的な技術者にS式は無理では

Kotlin: もっと人気がでて情報が出てくれないとトラぶった時大変

・みんな大好きなアレ

<<JVM言語>>

<<その他>>

Haskell: Webの最適解出てない感じ

Go: 冗談でしょ?

D言語: D言語君万歳!

結論:将来に期待

将来の技術進化に

漸進対応できる

作りにしよう

Fin.

[MicroServices]Fight with complicated MicroServices

By hakaicode

[MicroServices]Fight with complicated MicroServices

  • 536