2023/12/12に開かれたOutSystems User Groups TokyoのイベントOutSystems Connect: 年忘れLT大会!で行ったLTの内容にちょっと追記・補足したもの。
要旨
ODCは設計・実装をマイクロサービスベースで行うことを前提としている。
しかし、Martin FowlerのMicroservicePremiumや、いくつかのマイクロサービス適用経験談で示されているように、マイクロサービス実現には追加的なコストがかかる。システムの複雑さがさほど高くない場合、追加的なコスト > メリットとなるケースがあるとされている。
個人的な経験から、システムの複雑さが中程度(OutSystemsで構築するアプリケーションはほとんどこの範囲と思われる)なら、マイクロサービスを避ける方法も取り得るという感触を持っている。
MicroservicePremium
martinFowler.comのMicroservicePremiumに示されている。
マイクロサービス実現には追加的なコストがかかり、システムの複雑さがさほど高くない場合、追加的なコスト > メリットとなるケースがある。そのため、システム構築時には、モノリシックなシステムとして構築することを基本とし、どうしても必要な時にのみマイクロサービス化を検討すべきというもの。
つまり、モノリシックなシステムとして構築してしまうと、小さな変更でも、システム全体が大きく複雑すぎるため、開発・リリースに困難を感じるような場合。
補足
とはいえ、マイクロサービス化にあたって必要なもののうちいくつかは、OutSystemsがODCの機能として担当してくれている。
よって、マイクロサービス化に必要なコストは、OutSystemsを使わなかった場合よりは低いことが期待できる(議論の余地はありそうだが、そのようにうまく設計・実装してくれると思っていないのであれば、OutSystemsを導入していないはず)。
難しいのは、ODCを利用する前提でどの程度、マイクロサービス化に追加のコストが発生するかが不明なこと。
システム規模によるアーキテクチャ設計方針検討
システムの複雑さによって以下の三段階に分け、アーキテクチャ設計をどうするかを考えてみる。
- 複雑さ:低い(開発対象システムそれぞれが、1つのAppに押し込められる程度)
- 複雑さ:中程度(1.にも3.にも分類できない程度)
- 複雑さ:高い(モノリシックなシステムとして構築すると、開発・保守・リリースの生産性が低下し、マイクロサービス化が明らかなメリットをもたらす場合。あるいは将来そうなることが想定できる場合)
複雑さ | アーキテクチャ設計方針 | 備考・補足 |
---|---|---|
1. 低い | 真剣に検討する必要が無い | 1つのAppに収まる程度なので、アーキテクチャ設計がそんなに影響を持たないと思われる |
2. 中程度 | ①O11のアーキテクチャ設計を微修正して踏襲 ② マイクロサービス設計 |
現実的には、OutSystemsで作るアプリケーションはこの範囲に収まるのでは? ODCを触ってみた感じでは、現実的には①も十分可能と思われる |
3. 高い | マイクロサービス設計 | マイクロサービス設計が明らかにメリットを持つので、OutSystemsの推奨に合わせるのがよさそう |
⓵O11のアーキテクチャ設計を微修正して踏襲
ODCのアーキテクチャ設計の変更に備える(2023/10/18 UserGroup LT)で書いたような事項への考慮が必要。
具体的には、以下。特にトランザクションが分散してしまうのを避けるのが重要(実装が難しくなってしまうので)
- Applicationは無くなったのでApplicationにまとめるステップはなし
- Architecture Canvasであれば、業務ロジックはCore Businessレイヤーのモジュール、UIはEnd Userレイヤーのモジュールというように分割していたが、ODCではAppをまたがるActionの参照は通信ベースになる(=オーバーヘッドがある)ので、O11のモジュールよりはODCのAppは気持ち粒度が大きくなる
- ODCの制約により、Appをまたがると別トランザクションになるため、ある一連の処理で更新するEntityは同じAppに分類されるように設計する
O11 -> ODC移行ドキュメントからのフィードバック
元々、ODCではマイクロサービス設計やDDDを推奨するような記述は多かった。
最近追加されたOutSystems 11アプリケーションをODCのApp/Libraryに移行するためのドキュメントでも、この点を補強するような記述があった。
このようにOutSystemsが公開する資料は、マイクロサービス設計やDDDを前提とするものが増えてきているので、マイクロサービス設計にしておければ、将来の変動に備えやすくなる(現実的にどの程度の追加コストがかかるのかが不明なので、気軽にできる選択ではないが)。
ドキュメントについては、読んだ感想を以下にまとめてある。参考までに。