#author("2022-12-27T09:05:17+00:00","default:admin","admin") #author("2022-12-27T09:12:17+00:00","default:admin","admin") -[[アプリケーション・モダナイゼーション: マイクロサービスのメリットって?:https://rheb.hatenablog.com/entry/appmod-microservice]] -[[細かく分けて何度もデプロ~イ!マイクロサービスアーキテクチャの利点・欠点:https://japan.zdnet.com/article/35085741/]] -[[【アプリ開発】そのマイクロサービス、ちょっと待った!本当に必要な場面を教えます:https://www.youtube.com/watch?v=jiV7CdXEBs8]] -[[マイクロサービスについてザックリとまとめてみる:http://qiita.com/Iwark/items/6c362fd6b695a5792246]] -[[マイクロサービスのアーキテクチャについて:https://docs.oracle.com/ja/solutions/learn-architect-microservice/index.html#GUID-BDCEFE30-C883-45D5-B2E6-325C241388A5]] -[[マイクロサービスアーキテクチャとそれを支える技術:https://knowledge.sakura.ad.jp/20167/]] -[[マイクロサービスのデータ不整合を防ぐ、冪等性と結果整合性はなぜ必要なのか:https://xtech.nikkei.com/atcl/nxt/column/18/01276/041600001/]] -[[マイクロサービス設計原則: SOLIDではなくIDEALS:https://www.infoq.com/jp/articles/microservices-design-ideals/]] -[[gRPCを用いたマイクロサービスのAPI仕様の記述:https://engineering.mercari.com/blog/entry/2019-05-31-040000/]] -[[メルペイ立ち上げの裏側 – 決済サービス開発のゼロイチ話:https://engineering.mercari.com/blog/entry/2019-12-21-104948/]] -[[メルペイのマイクロサービスアーキテクチャの裏側と、不整合を防ぐための工夫:https://logmi.jp/tech/articles/321647]] -[[CNDT2020シリーズ:メルペイのマイクロサービスの現状をSREが解説:https://thinkit.co.jp/article/18038]] -[[マイクロサービスに失敗する7つの方法:https://www.infoq.com/jp/articles/microservices-seven-fail/]] -[[マイクロサービス(Microservices)採用時の注意事項:https://www.fujitsu.com/jp/products/software/resources/feature-stories/cloud/microservices-cautions/]] *分割単位 [#a33433d7] -[[アーキテクチャ 【まとめ】 -マイクロサービス、ミニサービス、モジュラーモノリス、モノリシックアーキテクチャを並べて比べてみました-:https://tech-blog.rakus.co.jp/entry/20201218/architecture]] -[[モノリシックサービスvsマイクロサービス 両方経験した上でのPros/Cons:https://zenn.dev/yojo/articles/516e1aa134ec49]] -[[マイクロサービスで悩ましい「DB分割問題」、データアーキテクトに高まる需要:https://xtech.nikkei.com/atcl/nxt/column/18/01956/022500004/]] *概要 [#e7b721c0] -アプリケーションの様々な側面を、小さな単位に分割し、それぞれ独立して変化していくことを重視した設計スタイル **何をばらばらにするか? [#j572f2d0] -実行環境 --個々のサービスは、独立した実行環境に、任意のタイミングでばらばらに配置可能にする -処理タイミング、トランザクション --サービス間の結合度合いを小さくし、できるだけ異なるタイミングで実行できる設計にする -データ管理 -意思決定 --小さな単位に分割し、独立性が高くなれば、個々のサービスの設計や実施可否などの意思決定単位を小さくすることができる -ソフトウェアのライフサイクル --個々のサービスは、企画・開発・運用・保守・廃棄のライフサイクルがばらばらになる -配置作業(ビルド、テスト、デプロイ) **サービスの組み合せパターン [#o55c3659] -同期-直列 -非同期-直列 -同期-並列 -非同期-並列 **サービスの分け方 [#p13f5a50] ***適切な分け方かできているかのチェックポイント [#pef5cef3] -それぞれのサービスはお互いに独立性が高いか --隠蔽性 ... お互いの内側を知らずに利用できる --交換可能性 ... 他のサービスの変更なしに入れ替えできる -サービスが切り分けられていることで技術的な選択肢が広げられるか --低コストで高パフォーマンスを発揮できる --競争優位性が得られる -サービスが切り分けられていることで開発効率を高められるか ***ドメインの境界で分ける [#q508cbf0] ***再利用性の高いものを分ける [#b70d5b2e] ***プログラミング言語や採用技術で分ける [#lafa88b8] ***開発サイクルやプロセスの違いで分ける [#ubc56f01] ***組織構造に合わせて分ける [#t48dff69] **サービスのアーキテクチャ [#m3c0489b] ***同期的なサービス [#pc1bc2a1] ***非同期的なサービス [#fe46679f] -アクターモデル -イベントモデル *Backends For Frontends [#p6b34abc] -[[BFF(Backends For Frontends)超入門――Netflix、Twitter、リクルートテクノロジーズが採用する理由:https://www.atmarkit.co.jp/ait/articles/1803/12/news012.html]] -[[モダンBFFを活用した既存APIサーバーの再構築:https://techlife.cookpad.com/entry/2019-orcha-bff]] *言語 [#p7766789] **Go [#jc1ac5e0] -[[Goがマイクロサービスと相性が良いと言われているのはなぜですか?:https://jp.quora.com/Go%E3%81%8C%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A8%E7%9B%B8%E6%80%A7%E3%81%8C%E8%89%AF%E3%81%84%E3%81%A8%E8%A8%80%E3%82%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE]] --Goだとhttpサーバー機能がデフォルトで実装されており超かんたんかつシンプルかつ高速動作するマイクロサービスを実装できます。これが「Goがマイクロサービス向き」と言われる理由です。 --Goが持っている仕様とライブラリがマイクロサービス向きなのでそう言われているだけです。 --go のウリの1つに goroutine という軽量スレッドがあります。こいつがマルチコアCPUをうまいこと抽象化して最適なパフォーマンスを引き出してくれます。 --マイクロサービスの基本構造は「リクエストに対してレスポンスを返す」ですが、この仕組みとgoroutineは大変相性が良いのです。 -[[Go言語とは?詳しく解説します:https://it-kyujin.jp/article/detail/2284/]] -[[Go言語(golang)とは?できること、将来性、アプリ事例を紹介:https://www.offshore-kaihatsu.com/contents/general/what-golang/]] -[[プロダクトの成長を下支えする、Goによるマイクロサービス化とは?:https://engineer-lab.findy-code.io/go-findy-event-1]] -[[Wantedly における Go 導入にまつわる技術背景:https://www.wantedly.com/companies/wantedly/post_articles/193633]] -[[Go言語とマイクロサービス、そしてクラウドサインについて:CTOに聞いてみた:https://techfeed.io/entries/61adbf2d66b2a123020a5fc8]] -[[アンドパッドのマイクロサービス基盤チームを紹介します!:https://tech.andpad.co.jp/entry/2021/12/23/110000]] -[[Go言語 - ZOZO TECH BLOG: https://techblog.zozo.com/archive/category/Go%E8%A8%80%E8%AA%9E]] **Rust [#o8c6e00a] -[[Rustでマイクロサービス開発はじめました:https://tech.emotion-tech.co.jp/entry/2021/08/31/164039]] *関連ツール [#t176214e] **[[Akka:https://akka.io/]] [#w182782a] **Akka Streams [#o51ff8ae] **Swagger [#lbffa91b] **[[Istio:https://istio.io/]] [#d6b3fac2] -[[Istioサービスメッシュ入門:https://www.slideshare.net/yokawasa/istio-114360124]] -[[Istio入門 その1 -Istioとは?-:https://qiita.com/Ladicle/items/979d59ef0303425752c8]] **Dapr [#q3c3abf2] -[[マイクロソフト、マイクロサービス開発を容易にする「Dapr」をオープンソースで公開。サービス間呼び出し、ステート管理、サービス間メッセージングなど提供:https://www.publickey1.jp/blog/19/dapr.html]] **Istio [#q7387d23] -[[Istio が解決する私達の問題:https://engineering.mercari.com/blog/entry/20220210-how-istio-solved-our-problems/]]