Open8

OutSystems Developer Cloudのアーキテクチャ

Junji WatanabeJunji Watanabe

ODC (OutSystems Developer Cloud)になって、アーキテクチャ・アーキテクチャ設計に違いが出てきているので、まとめる。

Junji WatanabeJunji Watanabe

https://success.outsystems.com/documentation/outsystems_developer_cloud/onboarding_for_outsystems_developers/
ODCでなく既存のOutSystemsでの開発経験がある人向けに、相違点をまとめたドキュメント。

アプリケーションが無くなる

これまでモジュールと呼んでいたものがAppと呼ばれるようになる。
リリース単位もApp。

Publishすると、コンパイルされた結果を含んだコンテナが作成され、リリースはこのコンテナを次のステージ(OutSystems 11でいう環境)に持っていくだけ。これまで部品作成に作っていたモジュールは、ODCではLibraryという種類になる。LibraryはPublish時にApp内に一緒に組み込まれる。

参照の変更

App間では弱い参照のみ可能となる。
Libraryが提供するPublic要素は強い参照が行える。
We cannot set Server Actions as public.

マイクロサービスが強制される

App毎にコンテナに分かれる
App間は弱い参照のみ

管理系アプリケーションの統合

LifeTime, Service Center, Usersで行っていた作業はODC Portalで行う

Junji WatanabeJunji Watanabe

アーキテクチャ設計を見ていく。
全体的にはOutSystems11の時とそんなに違いが無い印象だが、アプリケーションがなくなってマイクロサービス志向が強くなったたことの影響が出ているはず。

Architecture Fundamentals in ODC

https://www.outsystems.com/training/courses/207/architecture-fundamentals-in-odc/

Basic Concepts

外部のEntityを参照するときは強制的にRead-Only
RoleはPublicにできない
Libraryは以下のようなもの。Appのコンテナに取り込まれて動作する。

  • 業務要件から独立している
  • 再利用される
  • データを保存しない(Static EntityをLibraryに作ると、バックエンドはテーブルではない。App内に作ったらテーブル)

ようなもの。つまりOutSystems 11なら、Foundation Layerに分類されるもののうち、外部DB接続を覗いたものがほぼ一致する。
では、Core Layerに分類されていたものは? というとAppsの方に配置される。これまでのEnd User LayerとCore Layer相当をビジネスコンセプトごとに1つの小さなApps(=マイクロサービス)にまとめる感じ。

Design Process

基本的な流れは、OutSystems 11の時と同じ。
設計プロセスDisclose->Organize->Assembleも同じだが、内容がちょっと変わる。

  1. Disclose: 機能要求等、非機能要件、外部サービス連携等からコンセプトを抽出
  2. Organize: コンセプトをBounded Contextにまとめる
  3. Assemble: Bounded ContextをAppにマッピングする
Junji WatanabeJunji Watanabe

Building a well-architected app

questions to make+

  1. What are the business concepts in your use case?
  2. What's the organizational structure?
  3. Who are the business owners and sponsors?
  4. How are the business owners and sponsors related to the different business contexts?
  5. How can you ensure your teams can work independently and deliver at the rate of business decisions?
  6. What are your non-functional requirements (NFRs), reusable components, and integrations with external systems?

These are the same policies when considering proper software architecture in OutSystems 11.
The difference is in the resulting unit of architecture, which are modules in O11 and bounded contexts in ODC. The resulting bounded contexts will be mapped to the organization.

Bounded contexts will be identified by grouping the business concepts.
When grouping following policies should be considered too:

What are the business domain experts' boundaries?
What are the business processes, data flow, and ownerships?
Is the concept's cohesion or clustering due to dependencies between concepts?

Limit dependencies between bounded contexts.

Business owner: one go-to person for each business context
Business sponsor: one being accountable for the budget, so they have the power to prioritize the demand

Steps are four for ODC; on the other hand, steps are three for OutSystems 11.
Discover -> Identify bounded contexts -> Define a clear ownership -> Assemble

Resulting apps each have one or more bounded contexts.

Junji WatanabeJunji Watanabe

マイクロサービスと関連知識について再度まとめておく。主に書籍から

  • マイクロサービスの定義
    • Microservice Patterns: With Ecamples in Java p11の定義は、「an architectural style that functionally decomposes an application into a set of services. Note that this definitiona doesn't say anything about size」というわけで、アプリケーションを(サイズを問わず)サービスの組み合わせで構成するアーキテクチャのこと。
  • マイクロサービス設計で注意すべき点は?
  • DDD
    • Bounded Contextとは(ODCのアーキテクチャ設計ではOrganizeでこの単位にまとめる)
    • OutSystems 11におけるDDD: https://qiita.com/jyunji_watanabe/items/357470b3b632c232ce76
      • ここの補足に書いたように、OutSystems 11では、Architecture Canvasを書く単位がBounded Contextにマッチする印象だった
      • DDDにおけるBounded Contextは、ODCでいうAppに対応するものよりは広い概念だったような気がする。ここは後で確認する
  • 逆に、一般の開発環境でマイクロサービスを設計のデフォルトとして採用していたとする。その環境で特定のアプリケーション設計時にあえてマイクロサービスを崩してモノリスとして作る場合、設計上注意すべきことは何だろうか?
  • 複数のマイクロサービスを横断するサービスがあったとき、分散トランザクションをロールバックを行う方法を確認しておく。Sagaと補償トランザクション
  • マイクロサービスのテストについて注意すべき点は?
  • What are the architectures for data stores in ODC?
Junji WatanabeJunji Watanabe

Next Step 2022 videos linked from the ODC site

Some videos are linked from the ODC site as of 2023/08/11

Junji WatanabeJunji Watanabe

OutSystems Developer Cloud Architecture

  • WAF: This should be AWS WAF.
    • "With AWS WAF, you can create security rules that control bot traffic and block common attack patterns such as SQL injection or cross-site scripting (XSS)." (from AWS Web Application Firewall page)
  • CDN
  • .Net 6 Core technology is used to compose each apps