system-design-resources - これらは、インターネット上のシステム設計に最適なリソースです。

(These are the best resources for System Design on the Internet)

Created at: 2022-05-19 13:37:49
Language:
License: GPL-3.0

システム設計リソース

これらは、インターネット上のシステム設計に関する最良のリソースです。

ビデオ処理

大規模なビデオのトランスコーディング: https://www.egnyte.com/blog/2018/12/transcoding-how-we-serve-videos-at-scale/

Facebook ビデオブロードキャスト: https://engineering.fb.com/ios/under-the-hood-broadcasting-live-video-to-millions/

大規模な Netflix ビデオ エンコーディング: https://netflixtechblog.com/high-quality-video-encoding-at-scale-d159db052746

Netflix ショット ベースのエンコーディング: https://netflixtechblog.com/optimized-shot-based-encodes-now-streaming-4b9464204830

クラスターとワークフローの管理

Facebook クラスター管理: https://engineering.fb.com/data-center-engineering/twine/

Google オートパイロット - 自動スケーリング: https://dl.acm.org/doi/pdf/10.1145/3342195.3387524

Netflix ワークフロー オーケストレーション: https://netflix.github.io/conductor/

オープンソースのワークフロー管理: https://github.com/spotify/luigi

メタ ハードウェア管理: https://engineering.fb.com/2020/12/09/data-center-engineering/how-facebook-keeps-its-large-scale-infrastructure-hardware-up-and-running/

サービス内メッセージング

メッセージ キューとは: https://www.cloudamqp.com/blog/what-is-message-queuing.html

AirBnb べき等性: https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system-2981f6b070bb

Nginx サービス メッシュ: https://www.nginx.com/learn/service-mesh/

メッセージ キューのアンチパターン

キューとしての DB アンチパターン: http://blog.codepath.com/2012/11/15/asynchronous-processing-in-web-applications-part-1-a-database-is-not-a-queue/

データベースをメッセージ キューとして使用する: https://softwareengineering.stackexchange.com/questions/231410/why-database-as-queue-so-bad

キューとしての DB のアンチパターン: http://mikehadlow.blogspot.com/2012/04/database-as-queue-anti-pattern.html

キューとしての DB の欠点: https://www.cloudamqp.com/blog/why-is-a-database-not-the-right-tool-for-a-queue-based-system.html

サービス メッシュ

Kubernetes サービス メッシュ: https://akomljen.com/kubernetes-service-mesh/

Kubernetes サイドカー: https://www.weave.works/blog/introduction-to-service-mesh-on-kubernetes-and-progressive-delivery

サービス メッシュ: https://www.weave.works/blog/introduction-to-service-mesh-on-kubernetes-and-progressive-delivery

NginX サービス メッシュ: https://www.nginx.com/learn/service-mesh/

実践的なシステム設計

Facebook メッセンジャーの最適化: https://spectrum.ieee.org/how-facebooks-software-engineers-prepare-messenger-for-new-years-eve

YouTube アーキテクチャ: http://highscalability.com/youtube-architecture

YouTube のスケーラビリティ 2012: https://www.youtube.com/watch?v=w5WVu624fY8

分散デザイン パターン: http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html

モノリスからマイクロサービスへ: https://martinfowler.com/articles/break-monolith-into-microservices.html

分散ファイル システム

オープン ソース分散ファイル システム: https://docs.ceph.com/en/latest/architecture/

Amazon S3 パフォーマンス ハック: https://aws.amazon.com/blogs/aws/amazon-s3-performance-tips-tricks-seattle-hiring-event/

Amazon S3 オブジェクトの有効期限: https://aws.amazon.com/blogs/aws/amazon-s3-object-expiration/

時系列データベース

Pintrest 時系列データベース: https://medium.com/pinterest-engineering/goku-building-a-scalable-and-high-performant-time-series-database-system-a8ff5758a181

Uber 時系列データベース: https://eng.uber.com/aresdb/

TimeSeries リレーショナル DB: https://blog.timescale.com/blog/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c/

Facebook ゴリラ時系列データベース: http://www.vldb.org/pvldb/vol8/p1816-teller.pdf

レート制限

サーキット ブレーカー アルゴリズム: https://martinfowler.com/bliki/CircuitBreaker.html

Uber レート リミッター: https://github.com/uber-go/ratelimit/blob/master/ratelimit.go

インメモリ データベース - Redis

Redis 公式ドキュメント : https://redis.com/

Redis University で Redis を学ぶ : https://university.redis.com/

Redis オープン ソース リポジトリ: https://github.com/redis/redis

Redis アーキテクチャ: https://medium.com/opstree-technology/redis-cluster-architecture-replication-sharding-and-failover-86871e783ac0

ネットワーク プロトコル

HTTP とは: https://engineering.cred.club/head-of-line-hol-blocking-in-http-1-and-http-2-50b24e9e3372

QUIC プロトコル: https://www.akamai.com/blog/performance/http3-and-quic-past-present-and-future

TCP プロトコル アルゴリズム: https://ee.lbl.gov/papers/congavoid.pdf (最初の 10 ページが重要です)

WebRTC: https://webrtc.github.io/webrtc-org/blog/2012/07/23/a-great-introduction-to-webrtc.html

WebSocket: https://datatracker.ietf.org/doc/html/rfc6455#section-1.2

チェスエンジンのデザイン

チェス エンジン ビルディング: https://www.youtube.com/watch?v=U4ogK0MIzqk

サブスクリプション管理システム

サブスクリプション マネージャー: https://netflixtechblog.com/building-a-rule-based-platform-to-manage-netflix-membership-skus-at-scale-e3c0f82aa7bc

Googleドキュメント

運用上の変換: http://www.codecommit.com/blog/java/understanding-and-applying-operational-transformation

Google ドキュメント: https://www.youtube.com/watch?v=uOFzWZrsPV0&list=PLXDe3d8o9VFtydBV5biyz9iS3WqKsBMD5&index=3

API 設計

API 設計: https://medium.com/airbnb-engineering/building-services-at-airbnb-part-1-c4c1d8fa811b

Swagger API: https://swagger.io/docs/specification/about/

NoSQL データベースの内部

Cassandra アーキテクチャ: https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/architecture/archIntro.html

Google BigTable アーキテクチャ: https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf

Amazon Dynamo DB 内部: https://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

Amazon Dynamo DB のデザイン パターン: https://www.youtube.com/watch?v=HaEPXoXVf2k

Amazon Dynamo DB の内部: https://www.youtube.com/watch?v=yvBR71D0nAQ

NoSQL データベース アルゴリズム

Hyperloglog アルゴリズム: https://odino.org/my-favorite-data-structure-hyperloglog/

ログ構造マージ ツリー: https://www.cs.umb.edu/~poneil/lsmtree.pdf

ソートされた文字列テーブルと圧縮戦略: https://github.com/scylladb/scylla/wiki/SSTable-compaction-and-compaction-strategies

平準化圧縮 Cassandra: https://www.datastax.com/blog/leveled-compaction-apache-cassandra

Scylla DB 圧縮: https://github.com/scylladb/scylla/wiki/SSTable-compaction-and-compaction-strategies

Cassandra でのインデックス作成: https://www.bmc.com/blogs/cassandra-clustering-columns-partition-composite-key/

データベースの複製

データベースの複製: https://dev.mysql.com/doc/refman/8.0/en/replication.html

Netflix データ レプリケーション - 変更データ キャプチャ: https://netflixtechblog.com/dblog-a-generic-change-data-capture-framework-69351fb9099b

LinkedIn ロギングのユースケース: https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

コンテナーと Docker

Facebook Twine コンテナ化: https://engineering.fb.com/developer-tools/zookeeper-twine/

CloudFlare コンテナ化: https://blog.cloudflare.com/cloud-computing-without-containers/

Docker アーキテクチャ: https://docs.docker.com/get-started/overview/#docker-architecture

容量見積もり

Google 容量見積もり: https://www.youtube.com/watch?v=modXC5IWTJI

YouTube 2012 でのスケーラビリティ: https://www.youtube.com/watch?v=G-lGCC4KKok

封筒の裏 AWS での計算: https://www.youtube.com/watch?v=-3qetLv2Yp0

容量の見積もり: http://static.googleusercontent.com/media/research.google.com/en//people/jeff/stanford-295-talk.pdf

パブリッシャー サブスクライバー

Oracle パブリッシャー サブスクライバー: https://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg15pub.htm

Amazon Pub サブメッセージ: https://aws.amazon.com/pub-sub-messaging/

非同期処理: http://blog.codepath.com/2013/01/06/asynchronous-processing-in-web-applications-part-2-developers-need-to-understand-message-queues/

非同期リクエスト応答: https://www.enterpriseintegrationpatterns.com/patterns/conversation/RequestResponse.html

イベント駆動型アーキテクチャ

Martin Fowler - イベント駆動型アーキテクチャ: https://www.youtube.com/watch?v=STKCRSUsyP0

イベント駆動型アーキテクチャ: https://martinfowler.com/articles/201701-event-driven.html

六角形のアーキテクチャ

六角形のアーキテクチャ: https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec967749

マイクロサービス

モノリス アーキテクチャ: https://buttercms.com/books/microservices-for-startups/should-you-always-start-with-a-monolith/

モノリス vs マイクロサービス: https://articles.microservices.com/monolithic-vs-microservices-architecture-5c4848858f59

マイクロサービス: http://highscalability.com/blog/2018/4/5/do-you-have-too-many-microservices-five-design-attributes-th.html

Uber Nanoservices アンチパターン: https://www.youtube.com/watch?v=kb-m2fasdDY

Uber ドメイン指向のマイクロサービス: https://eng.uber.com/microservice-architecture/

負荷分散

スティッキー セッションを備えたロード バランサー: https://stackoverflow.com/questions/10494431/sticky-and-non-sticky-sessions

Citrix 負荷分散とは: https://www.citrix.com/en-in/solutions/app-delivery-and-security/load-balancing/what-is-load-balancing.html

Nginx 負荷分散: https://www.nginx.com/resources/glossary/load-balancing/

一貫性のあるハッシュ: https://michaelnielsen.org/blog/consistent-hashing/

アラートと異常検出

外れ値検出: https://towardsdatascience.com/outlier-detection-with-isolation-forest-3d190448d45e

異常検出: https://towardsdatascience.com/machine-learning-for-anomaly-detection-and-condition-monitoring-d4614e7de770

Uber のリアルタイム監視と根本原因分析 Argos: https://eng.uber.com/argos-real-time-alerts/

マイクロソフトの異常検出: https://www.youtube.com/watch?v=12Xq9OLdQwQ&t=0s

Facebook データ エンジニアリング: https://engineering.fb.com/2016/05/09/core-data/introducing-fblearner-flow-facebook-s-ai-backbone/

LinkedIn リアルタイム アラート: https://engineering.linkedin.com/blog/2019/06/smart-alerts-in-thirdeye--linkedins-real-time-monitoring-platfor

LinkedIn アイソレーション フォレスト: https://engineering.linkedin.com/blog/2019/isolation-forest

分散ロギング

Uber Distributed Request Tracing: https://eng.uber.com/distributed-tracing/

ピントレスト ロギング: https://medium.com/@Pinterest_Engineering/open-sourcing-singer-pinterests-performant-and-reliable-logging-agent-610fecf35566

Google 監視インフラストラクチャ: https://www.facebook.com/atscaleevents/videos/959344524420015/

メトリクスとテキスト検索エンジン

Facebook リアルタイム テキスト検索エンジン: https://www.facebook.com/watch/?v=432864835468

Elastic Search の時間ベースのクエリ: https://www.elastic.co/guide/en/elasticsearch/guide/current/time-based.html

エラスティック検索集計: https://www.elastic.co/guide/en/elasticsearch/guide/current/aggregations.html

単一障害点

単一障害点の回避: https://medium.com/the-cloud-architect/patterns-for-resilient-architecture-part-3-16e8601c488e

Netflix マルチリージョンの可用性: https://netflixtechblog.com/active-active-for-multi-regional-resiliency-c47719f6685b

Oracle の単一障害点: https://docs.oracle.com/cd/E19693-01/819-0992/fjdch/index.html

DNS 単一障害点 2004: http://www.tenereillo.com/GSLBPageOfShame.htm

シャーディング: https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6

位置情報サービス

Google S2 ライブラリ: https://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sphere-cells-and-hilbert-curve/

バッチ処理

Map Reduce アーキテクチャ: https://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf

リアルタイム ストリーム処理

LinkedIn Brooklin - リアルタイム データ ストリーミング: https://engineering.linkedin.com/blog/2019/brooklin-open-source

Netflix リアルタイム ストリーム処理: https://netflixtechblog.com/keystone-real-time-stream-processing-platform-a3ee651812a

キャッシング

Google グアバ キャッシュ: https://github.com/google/guava/wiki/CachesExplained

キャッシング (README を参照): https://github.com/ben-manes/caffeine/

キャッシュ: http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html

Microsoft キャッシュ ガイド: https://docs.microsoft.com/en-us/previous-versions/msp-np/dn589802(v%3dpandp.10)

キャッシング パターン: https://hazelcast.com/blog/a-hitchhikers-guide-to-caching-patterns/

分散コンセンサス

パクソス: http://ifeanyi.co/posts/understanding-consensus/

ラフト: https://raft.github.io/

認可

企業向けの認可モデルの設計https://cerbos.dev/blog/designing-an-authorization-model-for-an-enterprise

有料コース

インタビューレディ: https://get.interviewready.io