Upgrade to Pro — share decks privately, control downloads, hide ads and more …

歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス

110416
December 19, 2024

 歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス

110416

December 19, 2024
Tweet

More Decks by 110416

Other Decks in Programming

Transcript

  1. 定義 : 原理・原則 我々はマイクロサービスを意識したアーキテクチャを選んでいるので、ここではマイクロサ ービスの原理・原則を扱う 自治(autonomy): クロスファンクショナルなチーム編成. チーム間の独立性. 疎結合(loose coupling):

    サービス間の独立性・実装詳細の隠蔽 分離(isolation): ストレージの分離 耐障害性(fault tolerant): 障害の局所性 横断的関心ごとの分離(offload cross cutting concerns) 参考 Microsoft: Microservice architecture style #Best practices SalesForce: 6 Fundamental Principles of Microservice Design 7
  2. 課題: 自治・疎結合・分離 多数の層から構成されているが内部の実装を隠蔽する層が少なく、各層が保証する仕様 も曖昧 (下流から見ると)自身の仕様を決めるには、利用する API だけでなくその上流のサ ービス群まで調査しなければならない (下流から見ると)重要なロジックが特定のアプリケーションに埋め込まれていて、 容易に検証できない

    (上流から見ると)上流の変更で下流のサービスが(予期しない)影響を受け、その影響 範囲が容易に特定できない (上流から見ると)下流に対して変更を伝播する仕組みがなく、古い API を互換性の ために残さないといけない (上流から見ると)さらに上流の一部のリソースはコントロールできない 10
  3. 1 2 利用者の利便性 利用者は実装詳細の一部にしか にアクセスできない 利用者は実装詳細の(ほぼ)全て の機能にアクセスできる 提供者の(短期的な)工 数 多い.

    データのモデリング・バ リデーション・変換などが必要. 少ない. データをプロキシする だけ. (利用者が)機能開発で 検討すべき内容 提供側の API の仕様 提供者と、提供側が依存する サービス群の実装 (提供者が)機能の変 更・廃止で検討する内 容 自身が公開する仕様との互換性 利用側のサービス群(より下流 の依存も含む)の実装への影響 将来の変更の影響 小さい 大きい 12
  4. マイクロサービスの原理・原則(ベストプラクティス)からの逸脱 Model services around the business domain. ... Decentralize everything.

    Individual teams are responsible for designing and building services. Avoid sharing code or data schemas. ... Services communicate through well-designed APIs. Avoid leaking implementation details. APIs should model the domain, not the internal implementation of the service. https://learn.microsoft.com/en-us/azure/architecture/guide/architecture- styles/microservices#best-practices 17
  5. プロダクトの歴史 2010: 日経電子版創刊 2015: 日経電子版アプリ 2016: 紙面ビューアー 2016: データ分析基盤 Atlas

    2022: Nikkei Prime 2024: 日経空間版 日経電子版はウェブからはじまったが、異なるデバイス(モバイル・タブレット・Vision Pro)、異なる媒体(紙面ビュワー・Prime)、データ分析やデータベース事業などの用途が発生 未来を見通すことはできないので、特定のユースケースに特化した実装が漏洩してしまうの は仕方がないことも... 19
  6. スキーマレジストリ + コード生成 大規模なスキーマレジストリ + コード生成の例 AWS: 200+ services v1:

    templating: https://github.com/aws/aws-sdk-java/tree/master/aws-java-sdk-code- generator/src/main/resources/templates v2: IDL + Codegen: https://smithy.io/2.0/aws/protocols/index.html GCP: 150+ services googleapis protobuf schema: https://github.com/googleapis/googleapis Discovery API: https://cloud.google.com/docs/discovery 27
  7. Washington Post ANS ("Arc Native Specification") is the collection of

    schema documents that comprise the Washington Post's definition of "content", in so far as content is passed back and forth between systems in the Arc ecosystem of applications. https://github.com/washingtonpost/ans- schema/commit/bb0ea89b21faac45660e180af9f4f813983c28bb First Commit: Jun. 24, 2015 31
  8. 日経の制度・取り組み 技術的な取り組み コードの自動生成ツールやワークフローの検証(by @me) protobuf からコード生成・ライブラリとして配布・self-host renovate で更新伝播 smithy スキーマから

    API クライアントや型定義の自動生成 モノレポ統合により複雑なマイクロサービスの開発を単純化するアプローチ 草の根スキーマ改善活動 35