diff --git a/solutions/system_design/scaling_aws/README-ja.md b/solutions/system_design/scaling_aws/README-ja.md new file mode 100644 index 0000000000000000000000000000000000000000..951810ede9227fb505ca00d2c4ee9adf3a5370ba --- /dev/null +++ b/solutions/system_design/scaling_aws/README-ja.md @@ -0,0 +1,404 @@ +# AWS ã§æ•°ç™¾ä¸‡ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾å¿œã™ã‚‹ã‚·ã‚¹ãƒ†ãƒ ã‚’è¨è¨ˆã™ã‚‹ + +*Note: ã“ã®ãƒ‰ã‚ュメントã¯ã€é‡è¤‡ã‚’é¿ã‘ã‚‹ãŸã‚ã«ã€[システムè¨è¨ˆå…¥é–€](https://github.com/donnemartin/system-design-primer/blob/master/README-ja.md#%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80)ã«ã‚ã‚‹é–¢é€£é ˜åŸŸã«ç›´æŽ¥ãƒªãƒ³ã‚¯ã—ã¦ã„ã¾ã™ã€‚一般的ãªè©±ã®ãƒã‚¤ãƒ³ãƒˆã‚„トレードオフ, 代替案ã«ã¤ã„ã¦ã¯ãƒªãƒ³ã‚¯å…ˆã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„。* + +## Step 1: ユースケースã¨åˆ¶ç´„ã®æ¦‚è¦ + +> è¦ä»¶ã‚’åŽé›†ã—ã€å•題ã®ç¯„囲を調ã¹ã¦ä¸‹ã•ã„。 +> ユースケースã¨åˆ¶ç´„を明確ã«ã™ã‚‹ãŸã‚ã«è³ªå•ã—ã¦ä¸‹ã•ã„。 +> 仮定ã«ã¤ã„ã¦è°è«–ã—ã¦ä¸‹ã•ã„。 + +明確化ã™ã‚‹ãŸã‚ã®è³ªå•ã«å¿œãˆã‚‹ã‚¤ãƒ³ã‚¿ãƒ“ュアーãŒä¸åœ¨ã®å ´åˆã¯ã€è‡ªç™ºçš„ã«ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã‚„制約を定義ã—ã¾ã—ょã†ã€‚ + +### ユースケース + +ã“ã®å•題を解決ã™ã‚‹ã«ã¯ã€ç¹°ã‚Šè¿”ã—以下ã®ã‚¢ãƒ—ãƒãƒ¼ãƒã‚’行ã„ã¾ã™: 1) **Benchmark/Load Test**, 2) ボトルãƒãƒƒã‚¯ã® **Profile**, 3) 代替案ã¨ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•を評価ã—ãªãŒã‚‰ãƒœãƒˆãƒ«ãƒãƒƒã‚¯ã«å¯¾å‡¦ã™ã‚‹, 4) 繰り返ã—。 ã“れã¯åŸºç¤Žçš„ãªè¨è¨ˆã‹ã‚‰ã‚¹ã‚±ãƒ¼ãƒ©ãƒ–ルãªè¨è¨ˆã¸ã®é€²åŒ–ã«é©ã—ãŸè‰¯ã„パターンã§ã™ã€‚ + +AWS ã®ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãŒã‚ã‚‹ã‹ã€AWS ã®çŸ¥è˜ã‚’å¿…è¦ã¨ã™ã‚‹ãƒã‚¸ã‚·ãƒ§ãƒ³ã«å¿œå‹Ÿã—ã¦ã„ã‚‹å ´åˆã‚’覗ãã€AWS 固有ã®è©³ç´°ã¯å¿…é ˆã§ã¯ã‚りã¾ã›ã‚“。 ãŸã ã—ã€**ã“ã®æ¼”ç¿’ã§èª¬æ˜Žã™ã‚‹åŽŸå‰‡ã®å¤šãã¯ã€AWS エコシステムã®å¤–ã®ä¸–界ã§ã‚‚ã€ã‚ˆã‚Šä¸€èˆ¬çš„ã«é©ç”¨ã§ãã¾ã™ã€‚** + +#### 以下ã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã®ã¿ã‚’処ç†ã™ã‚‹ãŸã‚ã«ã€å•題ã®ã‚¹ã‚³ãƒ¼ãƒ—を定義ã—ã¾ã™ + +* **User** ãŒã€Read ã‚ã‚‹ã„㯠Write リクエストを行ã„ã¾ã™ + * **Service** ã¯å‡¦ç†ã‚’実行ã—ã€User データをä¿å˜ã—ã€çµæžœã‚’è¿”ã—ã¾ã™ +* **Service** ã¯ã€å°‘æ•°ã®ãƒ¦ãƒ¼ã‚¶æ•°ã‹ã‚‰ã€æ•°ç™¾ãƒžãƒ³ã®ãƒ¦ãƒ¼ã‚¶æ•°ã¸ã®ã‚µãƒ¼ãƒ“スæä¾›ã«é€²åŒ–ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + * 多ãã®ãƒ¦ãƒ¼ã‚¶ã¨ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’処ç†ã™ã‚‹ã‚¢ãƒ¼ã‚テクãƒãƒ£ã‚’進化ã•ã›ãªãŒã‚‰ã€ä¸€èˆ¬çš„ãªã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ãƒ‘ターンã«ã¤ã„ã¦è°è«–ã—ã¾ã™ã€‚ +* **Service** ã¯ã€é«˜å¯ç”¨æ€§ãŒã‚りã¾ã™ã€‚ + +### 制約ã¨ä»®å®š + +#### 状態ã®ä»®å®š + +* トラフィックãŒå‡ç‰ã«åˆ†æ•£ã•れã¦ã„ãªã„ +* リレーショナルãªãƒ‡ãƒ¼ã‚¿ãŒå¿…è¦ +* 1 ユーザã‹ã‚‰æ•°åƒãƒžãƒ³ãƒ¦ãƒ¼ã‚¶ã«ã‚¹ã‚±ãƒ¼ãƒ«å¯èƒ½ + * ユーザ数ã®å¢—åŠ ã‚’æ¬¡ã®ã‚ˆã†ã«ç¤ºã—ã¾ã™: + * Users+ + * Users++ + * Users+++ + * ... + * 1 åƒä¸‡ã®ãƒ¦ãƒ¼ã‚¶ + * 1 ヶ月ã‚ãŸã‚Š 10 億回㮠Write + * 1 ヶ月ã‚ãŸã‚Š 1000 億回㮠Read + * Read 㨠Write ã®æ¯”率㯠100 : 1 + * Write 一回ã‚ãŸã‚Šã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„㯠1 KB + +#### 使用é‡ã‚’計算ã™ã‚‹ + +**大雑把ãªä½¿ç”¨é‡ã®è¨ˆç®—ã‚’ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ã‚¤ãƒ³ã‚¿ãƒ“ュアーã«ãれをä¼ãˆã¦ä¸‹ã•ã„。** + +* 1 ヶ月ã‚ãŸã‚Š 1 TB ã®æ–°ã—ã„コンテンツ + * 1 KB * 10 å„„ + * 3 å¹´é–“ã§ 36 TB ã®æ–°ã—ã„コンテンツ + * ã»ã¨ã‚“ã©ã®æ›¸ãè¾¼ã¿ã¯ã€æ—¢å˜ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ›´æ–°ã§ã¯ãªãã€æ–°ã—ã„ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ›¸ãè¾¼ã¿ã§ã‚ã‚‹ã¨ã™ã‚‹ +* å¹³å‡ã§ 400 write/sec +* å¹³å‡ã§ 40,000 read/sec + +便利ãªå¤‰æ›ã‚¬ã‚¤ãƒ‰: + +* 1 ヶ月ã¯ç´„ 250 万秒 +* 1 req/sec = 250万 req/month +* 40 req/sec = 100万 req/month +* 400 req/sec = 10å„„ req/month + +## Step 2: 高レベルデザインã®ä½œæˆ + +> å…¨ã¦ã®é‡è¦ãªã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’å«ã‚“ã ã€é«˜ãƒ¬ãƒ™ãƒ«ãªè¨è¨ˆã®æ¦‚è¦ã‚’説明ã—ã¾ã™ã€‚ + + + +## Step 3: コアコンãƒãƒ¼ãƒãƒ³ãƒˆã‚’è¨è¨ˆã™ã‚‹ + +> å„コンãƒãƒ¼ãƒãƒ³ãƒˆã®è©³ç´°ã«è¸ã¿è¾¼ã¿ã¾ã™ã€‚ + +### ユースケース: User ãŒã€Read ã‚ã‚‹ã„㯠Write リクエストを行ã„ã¾ã™ + +#### ゴール + +* 1~2 人ã®ãƒ¦ãƒ¼ã‚¶ã§ã‚れã°ã€åŸºæœ¬çš„ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã ã‘æ±‚ã‚られã¾ã™ + * シンプルãªå˜ä¸€ãƒœãƒƒã‚¯ã‚¹ + * å¿…è¦ã«å¿œã˜ã¦åž‚直スケーリング + * ボトルãƒãƒƒã‚¯ã‚’特定ã™ã‚‹ãŸã‚ã®ç›£è¦– + +#### å˜ä¸€ãƒœãƒƒã‚¯ã‚¹ã‹ã‚‰å§‹ã‚ã‚‹ + +* **Web server** on EC2 + * ユーザデータã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ + * [**MySQL Database**](https://github.com/donnemartin/system-design-primer#relational-database-management-system-rdbms) + +**垂直スケーリング** を使用ã™ã‚‹: + +* å˜ã«ã‚ˆã‚Šå¤§ããªç®±ã‚’é¸ã¶ +* メトリックを監視ã—ã¦ã€ã‚¹ã‚±ãƒ¼ãƒ«ã‚¢ãƒƒãƒ—ã®æ–¹æ³•を決定ã—ã¾ã™ + * 基本的ãªç›£è¦–を使用ã—ã¦ãƒœãƒˆãƒ«ãƒãƒƒã‚¯ã‚’特定ã—ã¾ã™: CPU, memory, IO, network ãªã© + * CloudWatch, top, nagios, statsd, graphite ãªã© +* 垂直方å‘ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã¯ã¨ã¦ã‚‚高価ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ +* 冗長性/フェイルオーãƒãƒ¼ãªã— + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* **垂直スケーリング** ã«ä»£ã‚ã‚‹ã‚‚ã®ã¯ [**水平スケーリング**](https://github.com/donnemartin/system-design-primer#horizontal-scaling)ã§ã™ + +#### SQL ã‹ã‚‰å§‹ã‚ã€NoSQL を検討ã™ã‚‹ + +制約ã§ã¯ã€ãƒªãƒ¬ãƒ¼ã‚·ãƒ§ãƒŠãƒ«ãªãƒ‡ãƒ¼ã‚¿ãŒå¿…è¦ã§ã‚ã‚‹ã¨ä»®å®šã—ã¦ã„ã¾ã™ã®ã§ã€å˜ä¸€ã®ãƒœãƒƒã‚¯ã‚¹ã§ **MySQL Database** を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* [Relational database management system (RDBMS)](https://github.com/donnemartin/system-design-primer#relational-database-management-system-rdbms) ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ +* [SQL or NoSQL](https://github.com/donnemartin/system-design-primer#sql-or-nosql) ã®ç†ç”±ã«ã¤ã„ã¦è°è«–ã—ã¦ä¸‹ã•ã„ + +#### パブリックãªé™çš„ IP を割り当ã¦ã‚‹ + +* Elastic IP ã¯ã€å†èµ·å‹•時㫠IP ãŒå¤‰åŒ–ã—ãªã„パブリックエンドãƒã‚¤ãƒ³ãƒˆã‚’æä¾›ã—ã¾ã™ +* フェイルオーãƒãƒ¼ã‚’支æ´ã—ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’æ–°ã—ã„ IP ã«ãƒã‚¤ãƒ³ãƒˆã™ã‚‹ã ã‘ + +#### DNS を使用ã™ã‚‹ + +Route 53 ãªã©ã® **DNS** ã‚’è¿½åŠ ã—ã€ãƒ‰ãƒ¡ã‚¤ãƒ³ã‚’インスタンスã®ãƒ‘ブリック IP ã«ãƒžãƒƒãƒ—ã—ã¾ã™ã€‚ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* [Domain name system](https://github.com/donnemartin/system-design-primer#domain-name-system) ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ + +#### web server ã‚’ä¿è·ã™ã‚‹ + +* å¿…è¦ãªãƒãƒ¼ãƒˆã®ã¿ã‚’é–‹ã + * web server ãŒä»¥ä¸‹ã‹ã‚‰ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç”ã§ãるよã†ã«ã—ã¾ã™ + * 80 for HTTP + * 443 for HTTPS + * 22 for SSH to only whitelisted IPs + * web server ãŒã‚¢ã‚¦ãƒˆãƒã‚¦ãƒ³ãƒ‰æŽ¥ç¶šã‚’é–‹å§‹ã—ãªã„よã†ã«ã™ã‚‹ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* [Security](https://github.com/donnemartin/system-design-primer#security) ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ + +## Step 4: デザインをスケーリングã™ã‚‹ + +> 制約を考慮ã—ã¦ã€ãƒœãƒˆãƒ«ãƒãƒƒã‚¯ã‚’特定ã—ã¦å¯¾å‡¦ã—ã¾ã™ã€‚ + +### Users+ + + + +#### 仮定 + +ユーザ数ãŒå¢—ãˆå§‹ã‚ã€å˜ä¸€ãƒœãƒƒã‚¯ã‚¹ã®è² è·ãŒå¢—åŠ ã—ã¦ã„ã¾ã™ã€‚ **Benchmarks/Load Tests** 㨠**Profiling** ã¯ã€ãƒ¦ãƒ¼ã‚¶ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒãƒ‡ã‚£ã‚¹ã‚¯é ˜åŸŸã‚’ä½¿ã„æžœãŸã—ã¦ã„ã‚‹é–“ã€**MySQL Database** ãŒå¤šãã®ãƒ¡ãƒ¢ãƒªã¨ CPI リソースを消費ã™ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚ + +ã“れã¾ã§ã¯ **垂直スケーリング** ã§ã“れらã®å•題ã«å¯¾å‡¦ã™ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚ ã—ã‹ã—残念ãªãŒã‚‰ã€ã“れã¯éžå¸¸ã«é«˜ä¾¡ã«ãªã‚Šã€**MySQL Database** 㨠**Web Server** を個別ã«ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 + +#### ゴール + +* シングルボックスã®è² è·ã‚’軽減ã—ã€ç‹¬ç«‹ã—ãŸã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚’å¯èƒ½ã«ã™ã‚‹ + * é™çš„コンテンツを個別㫠**Object Store** ã«ä¿å˜ã™ã‚‹ + * **MySQL Database** を別ã®ãƒœãƒƒã‚¯ã‚¹ã«ç§»å‹•ã™ã‚‹ã€€ +* æ¬ ç‚¹ + * ã“れらã®å¤‰æ›´ã«ã‚ˆã‚Šè¤‡é›‘ã•ãŒå¢—ã—ã€**Object Store** 㨠**MySQL Database** を指ã™ã‚ˆã†ã« **Web Server** ã«å¤‰æ›´ã‚’入れる必è¦ãŒã‚りã¾ã™ã€‚ + * æ–°ã—ã„コンãƒãƒ¼ãƒãƒ³ãƒˆã‚’ä¿è·ã™ã‚‹ãŸã‚ã®ã€è¿½åŠ ã®ã‚»ã‚ュリティä¿è·ã‚’講ã˜ã‚‹å¿…è¦ãŒç”Ÿã˜ã¾ã™ã€‚ + * AWS ã®ã‚³ã‚¹ãƒˆã‚‚å¢—åŠ ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ãŒã€åŒæ§˜ã®ã‚·ã‚¹ãƒ†ãƒ を自分ã§ç®¡ç†ã™ã‚‹éš›ã®ã‚³ã‚¹ãƒˆã¨æ¯”較検討ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ + +#### é™çš„コンテンツを個別ã«ä¿å˜ã™ã‚‹ + +* S3 ã®ã‚ˆã†ãªãƒžãƒãƒ¼ã‚¸ãƒ‰ **Object Store** を使用ã—ã¦é™çš„コンテンツをä¿å˜ã™ã‚‹ã“ã¨ã‚’検討ã—ã¾ã™ + * é«˜ã„æ‹¡å¼µæ€§ã¨ä¿¡é ¼æ€§ + * サーãƒã‚µã‚¤ãƒ‰ã®æš—å·åŒ– +* é™çš„コンテンツを S3 ã«ç§»å‹•ã™ã‚‹ + * ユーザファイル + * JS + * CSS + * ç”»åƒ + * å‹•ç”» + +#### MySQL database を別ã®ãƒœãƒƒã‚¯ã‚¹ã«ç§»å‹•ã™ã‚‹ + +* RDS ãªã©ã®ã‚µãƒ¼ãƒ“スを利用ã—㦠**MySQL Database** を管ç†ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ä¸‹ã•ã„ + * 管ç†, スケーリングãŒå®¹æ˜“ + * 複数㮠+ * 複数ã®ã‚¢ãƒ™ã‚¤ãƒ©ãƒªTゾーン + * ä¿å˜æ™‚ã®æš—å·åŒ– + +#### システムをä¿è·ã™ã‚‹ + +* é€ä¿¡ä¸/ä¿å˜ä¸ã®ãƒ‡ãƒ¼ã‚¿ã‚’æš—å·åŒ–ã™ã‚‹ +* 仮装プライベートクラウドを使用ã™ã‚‹ + * å˜ä¸€ã® **Web Server** ã®ãƒ‘ブリックサブãƒãƒƒãƒˆã‚’作りã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã‹ã‚‰ãƒˆãƒ©ãƒ•ィックをé€å—ä¿¡ã§ãるよã†ã«ã—ã¾ã™ + * ãã®ä»–å…¨ã¦ã‚’プライベートサブãƒãƒƒãƒˆã§ä½œã‚Šã€å¤–éƒ¨ã‚¢ã‚¯ã‚»ã‚¹ã‚’é®æ–ã—ã¾ã™ + * å„コンãƒãƒ¼ãƒãƒ³ãƒˆã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆ IP ã‹ã‚‰ã®ã¿ãƒãƒ¼ãƒˆã‚’é–‹ãã¾ã™ +* æ®‹ã‚Šã®æ¼”ç¿’ã§ã¯ã€æ–°ã—ã„コンãƒãƒ¼ãƒãƒ³ãƒˆã«ã¤ã„ã¦åŒæ§˜ã®ãƒ‘ターンを実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* [Security](https://github.com/donnemartin/system-design-primer#security) ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ + +### Users++ + + + +#### 仮定 + +**Benchmarks/Load Tests** 㨠**Profiling** ã¯ã€ãƒ”ーク時ã«å˜ä¸€ **Web Server** ã«ãƒœãƒˆãƒ«ãƒãƒƒã‚¯ãŒã‚りã€ã„ãã¤ã‹ã®ã‚±ãƒ¼ã‚¹ã‚„ダウンタイムã§ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒé…ã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚ ã‚µãƒ¼ãƒ“ã‚¹ãŒæˆç†Ÿã™ã‚‹ã«ã¤ã‚Œã€å¯ç”¨æ€§ã¨å†—長性ã®å‘上も実施ã—ã¦ã„ããŸã„ã§ã™ã€‚ + +#### ゴール + +* 以下ã®ã‚´ãƒ¼ãƒ«ã¯ã€**Web Server** ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°å•題ã«å¯¾å‡¦ã™ã‚‹ã“ã¨ã‚’試ã¿ã¾ã™ + * **Benchmarks/Load Tests** 㨠**Profiling** ã«åŸºã¥ãã€ã“ã‚Œã‚‰ã®æ‰‹æ³•ã® 1 ã¤ã‚ã‚‹ã„㯠2 ã¤ã‚’実装ã™ã‚‹ã ã‘ã§æ¸ˆã‚€ã“ã¨ãŒã‚りã¾ã™ +* [**水平スケーリング**](https://github.com/donnemartin/system-design-primer#horizontal-scaling) を使用ã—ã¦ã€å¢—åŠ ã—ã¦ã„ã‚‹è² è·ã‚’処ç†ã—ã€å˜ä¸€éšœå®³ç‚¹ã«å¯¾å‡¦ã™ã‚‹ + * AWS ã® ELB ã‚„ HAProxy ã®ã‚ˆã†ãª [**Load Balancer**](https://github.com/donnemartin/system-design-primer#load-balancer) ã‚’è¿½åŠ ã™ã‚‹ + * ELB ã¯é«˜å¯ç”¨æ€§ãŒã‚ã‚‹ + * ã‚‚ã—独自㮠**Load Balancer** を構築ã—ã¦ã„ã‚‹ãªã‚‰ã€è¤‡æ•°ã®ã‚¢ãƒ™ã‚¤ãƒ©ãƒ“リティーゾーン㧠[active-active](https://github.com/donnemartin/system-design-primer#active-active) ã‚ã‚‹ã„㯠[active-passive](https://github.com/donnemartin/system-design-primer#active-passive) ã«è¤‡æ•°ã®ã‚µãƒ¼ãƒã‚’構築ã™ã‚‹ã¨å¯ç”¨æ€§ãŒå‘上ã—ã¾ã™ã€‚ + * **Load Balancer** ã® SSL を終了ã—ã¦ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚µãƒ¼ãƒã®è¨ˆç®—è² è·ã‚’軽減ã—ã€è¨¼æ˜Žæ›¸ã®ç®¡ç†ã‚’ç°¡ç´ åŒ–ã—ã¾ã™ + * 複数ã®ã‚¢ãƒ™ã‚¤ãƒ©ãƒ“リティーゾーンã«åˆ†æ•£ã•れãŸè¤‡æ•°ã® **Web Servers** を使用ã™ã‚‹ + * 冗長性をå‘上ã•ã›ã‚‹ãŸã‚ã«ã€è¤‡æ•°ã®ã‚¢ãƒ™ã‚¤ãƒ©ãƒ“リティーゾーンã«è·¨ã£ã¦ [**Master-Slave Failover**](https://github.com/donnemartin/system-design-primer#master-slave-replication) モードã§è¤‡æ•°ã® **MySQL** インスタンスを使用ã™ã‚‹ +* [**Application Servers**](https://github.com/donnemartin/system-design-primer#application-layer) ã‹ã‚‰ **Web Servers** を分離ã™ã‚‹ + * 両方ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’個別ã«ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã—ã¦æ§‹ç¯‰ã™ã‚‹ + * **Web Servers** 㯠[**Reverse Proxy**](https://github.com/donnemartin/system-design-primer#reverse-proxy-web-server) ã¨ã—ã¦å‹•ã‘ã‚‹ + * 例ãˆã°ã€**Write APIs** を処ç†ã™ã‚‹ **Application Servers** ã‚’è¿½åŠ ã—ã¤ã¤ã€**Read APIs** を処ç†ã™ã‚‹ **Application Servers** ã‚’è¿½åŠ ã§ãã¾ã™ +* é™çš„(ãŠã‚ˆã³ä¸€éƒ¨ã®å‹•çš„)コンテンツを CloudFront ãªã©ã® [**Content Delivery Network (CDN)**](https://github.com/donnemartin/system-design-primer#content-delivery-network) ã«ç§»å‹•ã—ã¦ã€è² è·ã¨ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã‚’軽減ã—ã¾ã™ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* 詳細ã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å‚ç…§ã—ã¦ãã ã•ã„ + +### Users+++ + + + +**Note:** 煩雑ã•を減らã™ãŸã‚ã«ã€**内部㮠Load Balancers** ã¯è¡¨ç¤ºã•れã¦ã„ã¾ã›ã‚“ + +#### 仮定 + +**Benchmarks/Load Tests** 㨠**Profiling** ã¯ã€Read ヘビー (Read : Write ㌠100 : 1 ) ã§ã‚りã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãŒå¤§é‡ã® Read リクエストã«ã‚ˆã‚‹ãƒ‘フォーマンス劣化ã«è‹¦ã—ã‚“ã§ã„ã¾ã™ã€‚ + +#### ゴール + +* 以下ã®ã‚´ãƒ¼ãƒ«ã¯ã€**MySQL Database** ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°å•題ã«å¯¾å‡¦ã™ã‚‹ã“ã¨ã‚’試ã¿ã¾ã™ + * **Benchmarks/Load Tests** 㨠**Profiling** ã«åŸºã¥ãã€ã“ã‚Œã‚‰ã®æ‰‹æ³•ã® 1 ã¤ã‚ã‚‹ã„㯠2 ã¤ã‚’実装ã™ã‚‹ã ã‘ã§æ¸ˆã‚€ã“ã¨ãŒã‚りã¾ã™ +* 以下ã®ãƒ‡ãƒ¼ã‚¿ã‚’ Elasticache ãªã©ã® [**Memory Cache**](https://github.com/donnemartin/system-design-primer#cache) ã«ç§»ã—ã€è² è·ã¨ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã‚’軽減ã—ã¾ã™ + * **MySQL** ã‹ã‚‰é »ç¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã•れるコンテンツ + * ã¾ãšã€**Memory Cache** を実装ã™ã‚‹å‰ã«ã€**MySQL Database** ã‚ャッシュをè¨å®šã—ã¦ã€ãれãŒãƒœãƒˆãƒ«ãƒãƒƒã‚¯ã‚’解消ã™ã‚‹ã®ã«å分ã‹ã©ã†ã‹ã‚’確èªã—ã¾ã™ã€‚ + * **Web Servers** ã‹ã‚‰ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒ‡ãƒ¼ã‚¿ + * **Autoscaling** を考慮ã—ã¦ã€**Web Servers** ã¯ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¬ã‚¹ã« + * メモリã‹ã‚‰ 1 MB ã‚’é †æ¬¡èªã¿å–ã‚‹ã«ã¯ç´„ 250 マイクãƒç§’ã‹ã‹ã‚Šã¾ã™ãŒã€SSD ã‹ã‚‰ã¯ãã® 4 å€ã€ãƒ‡ã‚£ã‚¹ã‚¯ã‹ã‚‰ã¯ãã® 80 å€ã®æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™<sup><a href=https://github.com/donnemartin/system-design-primer#latency-numbers-every-programmer-should-know>1</a></sup> +* [**MySQL Read Replicas**](https://github.com/donnemartin/system-design-primer#master-slave-replication) ã‚’è¿½åŠ ã—ã¦ã€æ›¸ãè¾¼ã¿ãƒžã‚¹ã‚¿ã®è² è·ã‚’軽減ã™ã‚‹ +* **Web Servers** 㨠**Application Servers** ã‚’è¿½åŠ ã—ã¦ã€ãƒ¬ã‚¹ãƒãƒ³ã‚¹æ€§èƒ½ã‚’å‘上ã•ã›ã‚‹ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* 詳細ã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å‚ç…§ã—ã¦ãã ã•ã„ + +#### MySQL リードレプリカã®è¿½åŠ + +* **Memory Cache** ã®è¿½åŠ ã¨ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã«åŠ ãˆã¦, **MySQL Read Replicas** 㯠**MySQL Write Master** ã®è² è·ã‚’軽減ã™ã‚‹ã®ã«ã‚‚役立ã¡ã¾ã™ +* **Web Server** ã«ãƒã‚¸ãƒƒã‚¯ã‚’è¿½åŠ ã—ã¦ã€Write 㨠Read を分離ã—ã¾ã™ +* **MySQL Read Replicas** ã®å‰æ®µã« **Load Balancers** ã‚’è¿½åŠ ã—ã¾ã™ (煩雑ã•を減らã™ãŸã‚ã«å›³ç¤ºã•れã¦ã„ã¾ã›ã‚“) +* ã»ã¨ã‚“ã©ã®ã‚µãƒ¼ãƒ“ス㯠Read ヘビー ã‹ Write ヘビー + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* [Relational database management system (RDBMS)](https://github.com/donnemartin/system-design-primer#relational-database-management-system-rdbms) ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ + +### Users++++ + + + +#### 仮定 + +**Benchmarks/Load Tests** 㨠**Profiling** ã¯ã€US ã«ãŠã‘る通常ã®å–¶æ¥æ™‚é–“ã«ãŠã‘るトラフィックã®ã‚¹ãƒ‘イクãŒã€ãƒ¦ãƒ¼ã‚¶ãŒã‚ªãƒ•ィスを離れる時ã«è‘—ã—ã低下ã—ã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚ 実際ã®è² è·ã«åŸºã¥ã„ã¦ã‚µãƒ¼ãƒã‚’自動的ã«èµ·å‹•ãŠã‚ˆã³åœæ¢ã™ã‚‹ã“ã¨ã§ã€ã‚³ã‚¹ãƒˆã‚’削減ã§ãã‚‹ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚ å°ã•ãªãŠåº—ãªã®ã§ã€**Autoscaling** ã¨ä¸€èˆ¬çš„ãªæ“作ã®ãŸã‚ã«ã€ã§ãã‚‹é™ã‚Š DevOps を自動化ã—ãŸã„ã§ã™ã€‚ + +#### ゴール + +* å¿…è¦ã«å¿œã˜ã¦å®¹é‡ã‚’プãƒãƒ“ジョニングã™ã‚‹ãŸã‚ã«ã€**Autoscaling** ã‚’è¿½åŠ ã—ã¾ã™ + * ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã®æ€¥ä¸Šæ˜‡ã«å¯¾å¿œã—ã¾ã™ + * 未使用ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’シャットダウンã™ã‚‹ã“ã¨ã§ã‚³ã‚¹ãƒˆã‚’削減ã—ã¾ã™ +* DevOps ã®è‡ªå‹•化 + * Chef, Puppet, Ansible ãªã© +* ボトルãƒãƒƒã‚¯ã«å¯¾å‡¦ã™ã‚‹ãŸã‚ã®ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚’継続ã—ã¦ç›£è¦–ã™ã‚‹ + * **Host level** - å˜ä¸€ã® EC2 インスタンスを確èªã™ã‚‹ + * **Aggregate level** - Load Balancer ã®çµ±è¨ˆæƒ…å ±ã‚’ç¢ºèªã™ã‚‹ + * **Log analysis** - CloudWatch, CloudTrail, Loggly, Splunk, Sumo + * **External site performance** - Pingdom or New Relic + * **Handle notifications and incidents** - PagerDuty + * **Error Reporting** - Sentry + +#### autoscaling ã®è¿½åŠ + +* AWS **Autoscaling** ãªã©ã®ãƒžãƒãƒ¼ã‚¸ãƒ‰ã‚µãƒ¼ãƒ“スを検討ã™ã‚‹ + * **Web Server** ã”ã¨ã€ãŠã‚ˆã³ **Application Server** ã®ç¨®é¡žã”ã¨ã« 1 ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—を作æˆã—ã€å„グループを複数ã®ã‚¢ãƒ™ã‚¤ãƒ©ãƒ“リティーゾーンã«é…ç½®ã—ã¾ã™ + * ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®æœ€å°æ•°ã¨æœ€å¤§æ•°ã‚’è¨å®šã—ã¾æ˜Žæ—¥ + * CloudWatch を介ã—ã¦ã‚¹ã‚±ãƒ¼ãƒ«ã‚¢ãƒƒãƒ—ãŠã‚ˆã³ã‚¹ã‚±ãƒ¼ãƒ«ãƒ€ã‚¦ãƒ³ã™ã‚‹ãƒˆãƒªã‚¬ãƒ¼ã‚’è¨å®šã—ã¾ã™ + * 予測å¯èƒ½ãªè² è·ã®ãŸã‚ã®å˜ç´”ãªæ™‚刻メトリックã€ã¾ãŸã¯ + * 一定期間ã®ãƒ¡ãƒˆãƒªãƒƒã‚¯: + * CPU è² è· + * レイテンシ + * ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒˆãƒ©ãƒ•ィック + * カスタム指標 + * æ¬ ç‚¹ + * Autoscaling ã¯è¤‡é›‘ã•ã‚’ã‚‚ãŸã‚‰ã™å¯èƒ½æ€§ãŒã‚ã‚‹ + * 需è¦ã®å¢—åŠ ã«å¯¾å¿œã™ã‚‹ãŸã‚ã«ã‚·ã‚¹ãƒ†ãƒ ãŒé©åˆ‡ã«ã‚¹ã‚±ãƒ¼ãƒ«ã‚¢ãƒƒãƒ—ã™ã‚‹ã¾ã§ã€ã¾ãŸã¯éœ€è¦ãŒä½Žä¸‹ã—ãŸæ™‚ã«ã‚¹ã‚±ãƒ¼ãƒ«ãƒ€ã‚¦ãƒ³ã™ã‚‹ã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚‹ã“ã¨ãŒã‚ã‚‹ + +### Users+++++ + + + +**Note:** 煩雑ã•を減らã™ãŸã‚ã«ã€€**Autoscaling** ã¯å›³ç¤ºã•れã¦ã„ã¾ã›ã‚“ + +#### 仮定 + +制約ã§èª¬æ˜Žã•れã¦ã„る数値ã«å‘ã‘ã¦ã‚µãƒ¼ãƒ“ã‚¹ãŒæˆé•·ã—ç¶šã‘ã‚‹ã«ã¤ã‚Œã¦ã€**Benchmarks/Load Tests** 㨠**Profiling** ã«ã‚ˆã‚Šæ–°ãŸãªãƒœãƒˆãƒ«ãƒãƒƒã‚¯ã‚’明らã‹ã«ã—ã¦å¯¾å‡¦ã—ã¾ã™ã€‚ + +#### ゴール + +å•題ã®åˆ¶ç´„ã«ã‚ˆã‚Šã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã®å•題ã«å¼•ãç¶šã対処ã—ã¾ã™: + +* ã‚‚ã— **MySQL Database** ãŒå¤§ãããªã‚Šã™ãŽã¦ããŸã‚‰ã€Redshift ã®ã‚ˆã†ãªãƒ‡ãƒ¼ã‚¿ã‚¦ã‚§ã‚¢ãƒã‚¦ã‚¹ã«æ®‹ã‚Šã‚’ä¿å˜ã—ã¤ã¤ã€é™ã‚‰ã‚ŒãŸæœŸé–“ã®ãƒ‡ãƒ¼ã‚¿ã ã‘をデータベースã®ä¿å˜ã™ã‚‹ã“ã¨ã‚’検討ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ + * Redshift ãªã©ã®ãƒ‡ãƒ¼ã‚¿ã‚¦ã‚§ã‚¢ãƒã‚¦ã‚¹ã¯ã€1 ヶ月ã‚ãŸã‚Š 1 TB ã®æ–°ã—ã„コンテンツã®åˆ¶ç´„を満足ã«å‡¦ç†ã§ãã¾ã™ +※1 ç§’ã‚ãŸã‚Šã®å¹³å‡ Read リクエスト㌠40,000 ãªã®ã§ã€**Memory Cache** をスケーリングã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ä¸€èˆ¬çš„ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã® Read トラフィックã«å¯¾å¿œã§ãã¾ã™ã€‚ ã“れã¯ã€ä¸å‡ä¸€ã«åˆ†æ•£ã•れãŸãƒˆãƒ©ãƒ•ィックやトラフィックスパイクã®å‡¦ç†ã«ã‚‚役立ã¡ã¾ã™ã€‚ + * **SQL Read Replicas** ã¯ã€ã‚ャッシュミスを扱ã†å•題を抱ãˆã‚‹ã‹ã‚‚ã—れãªã„ã®ã§ã€è¿½åŠ ã® SQL スケーリングパターンを採用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ã€‚ +* 1ç§’ã‚ãŸã‚Šå¹³å‡ 400 Write (ピーク時ã¯ã‚‚ã£ã¨é«˜ããªã‚‹å¯èƒ½æ€§ã‚り) ã¯ã€å˜ä¸€ã® **SQL Write Master-Slave** ã§ã¯é›£ã—ã„å ´åˆãŒã‚りã€è¿½åŠ ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°æŠ€è¡“ãŒå¿…è¦ã«ãªã‚‹å¯èƒ½æ€§ã‚‚ã‚りã¾ã™ã€‚ + +SQã€€ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ãƒ‘ã‚¿ãƒ¼ãƒ³ã¯æ¬¡ã®é€šã‚Šã§ã™: + +* [Federation](https://github.com/donnemartin/system-design-primer#federation) +* [Sharding](https://github.com/donnemartin/system-design-primer#sharding) +* [Denormalization](https://github.com/donnemartin/system-design-primer#denormalization) +* [SQL Tuning](https://github.com/donnemartin/system-design-primer#sql-tuning) + +éŽåº¦ãª Read, Write リクエストã«ã•らã«å¯¾å‡¦ã™ã‚‹ã«ã¯ã€é©åˆ‡ãªãƒ‡ãƒ¼ã‚¿ã‚’ DynamoDB ãªã©ã® [**NoSQL Database**](https://github.com/donnemartin/system-design-primer#nosql) ã«ç§»å‹•ã™ã‚‹ã“ã¨ã‚‚検討ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + +[**Application Servers**](https://github.com/donnemartin/system-design-primer#application-layer) ã‚’ã•らã«åˆ†é›¢ã™ã‚‹ã“ã¨ã§å€‹åˆ¥ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚’å¯èƒ½ã«ã§ãã¾ã™ã€‚ リアルタイムã§å®Ÿè¡Œã™ã‚‹å¿…è¦ã®ãªã„ãƒãƒƒãƒå‡¦ç†ã‚„計算ã¯ã€**Queues** 㨠**Workers** ã§ [**Asynchronously**](https://github.com/donnemartin/system-design-primer#asynchronism) ã«å®Ÿè¡Œã§ãã¾ã™ã€‚ + +* 例ãˆã°ã€å†™çœŸã‚µãƒ¼ãƒ“スã§ã€å†™çœŸã‚ªã‚»ãƒã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã¨ã‚µãƒ ãƒã‚¤ãƒ«ã®ä½œæˆã‚’分離ã§ãã¾ã™: + * **Client** ãŒå†™çœŸã‚’アップãƒãƒ¼ãƒ‰ã™ã‚‹ + * **Application Server** 㯠SQS ãªã©ã® **Queue** ã«ã‚¸ãƒ§ãƒ–ã‚’è¿½åŠ ã™ã‚‹ + * EC2 ã‚ã‚‹ã„㯠Lambda 上㮠**Worker Service** ãŒã€**Queue** ã‹ã‚‰ã‚¸ãƒ§ãƒ–ã‚’ pull ã—ã¾ã™: + * サムãƒã‚¤ãƒ«ã‚’作æˆã—ã¾ã™ + * **Database** ã‚’æ›´æ–°ã—ã¾ã™ + * サムãƒã‚¤ãƒ«ã‚’ **Object Store** ã«ä¿å˜ã—ã¾ã™ + +*トレードオフや代替案,è¿½åŠ ã®è©³ç´°:* + +* 詳細ã¯ä¸Šè¨˜ã®ãƒªãƒ³ã‚¯ã•れãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’å‚ç…§ã—ã¦ãã ã•ã„ + +## è¿½åŠ ã®ãƒã‚¤ãƒ³ãƒˆ + +> å•題ã®ç¯„å›²ã¨æ®‹ã‚Šæ™‚間次第ã§ã€è¿½åŠ ã®è©±é¡Œã«è¸ã¿è¾¼ã¿ã¾ã™ã€‚ + +### SQL scaling patterns + +* [Read replicas](https://github.com/donnemartin/system-design-primer#master-slave-replication) +* [Federation](https://github.com/donnemartin/system-design-primer#federation) +* [Sharding](https://github.com/donnemartin/system-design-primer#sharding) +* [Denormalization](https://github.com/donnemartin/system-design-primer#denormalization) +* [SQL Tuning](https://github.com/donnemartin/system-design-primer#sql-tuning) + +#### NoSQL + +* [Key-value store](https://github.com/donnemartin/system-design-primer#key-value-store) +* [Document store](https://github.com/donnemartin/system-design-primer#document-store) +* [Wide column store](https://github.com/donnemartin/system-design-primer#wide-column-store) +* [Graph database](https://github.com/donnemartin/system-design-primer#graph-database) +* [SQL vs NoSQL](https://github.com/donnemartin/system-design-primer#sql-or-nosql) + +### Caching + +* ã‚ャッシュã™ã‚‹å ´æ‰€ + * [Client caching](https://github.com/donnemartin/system-design-primer#client-caching) + * [CDN caching](https://github.com/donnemartin/system-design-primer#cdn-caching) + * [Web server caching](https://github.com/donnemartin/system-design-primer#web-server-caching) + * [Database caching](https://github.com/donnemartin/system-design-primer#database-caching) + * [Application caching](https://github.com/donnemartin/system-design-primer#application-caching) +* ã‚ャッシュã™ã‚‹ãƒ¢ãƒŽ + * [Caching at the database query level](https://github.com/donnemartin/system-design-primer#caching-at-the-database-query-level) + * [Caching at the object level](https://github.com/donnemartin/system-design-primer#caching-at-the-object-level) +* ã‚ャッシュを更新ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚° + * [Cache-aside](https://github.com/donnemartin/system-design-primer#cache-aside) + * [Write-through](https://github.com/donnemartin/system-design-primer#write-through) + * [Write-behind (write-back)](https://github.com/donnemartin/system-design-primer#write-behind-write-back) + * [Refresh ahead](https://github.com/donnemartin/system-design-primer#refresh-ahead) + +### éžåŒæœŸã¨ãƒžã‚¤ã‚¯ãƒã‚µãƒ¼ãƒ“ス + +* [Message queues](https://github.com/donnemartin/system-design-primer#message-queues) +* [Task queues](https://github.com/donnemartin/system-design-primer#task-queues) +* [Back pressure](https://github.com/donnemartin/system-design-primer#back-pressure) +* [Microservices](https://github.com/donnemartin/system-design-primer#microservices) + +### 通信 + +* トレードオフã«ã¤ã„ã¦è©±ã—åˆã†: + * クライアントã¨ã®å¤–部通信 - [HTTP APIs following REST](https://github.com/donnemartin/system-design-primer#representational-state-transfer-rest) + * 内部通信 - [RPC](https://github.com/donnemartin/system-design-primer#remote-procedure-call-rpc) +* [Service discovery](https://github.com/donnemartin/system-design-primer#service-discovery) + +### ã‚»ã‚ュリティ + +[security section](https://github.com/donnemartin/system-design-primer#security) ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„。 + +### レイテンシ + +See [Latency numbers every programmer should know](https://github.com/donnemartin/system-design-primer#latency-numbers-every-programmer-should-know). + +### é€²è¡Œä¸ + +* システムã®ãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯ã¨ç›£è¦–を継続ã—ã€ãƒœãƒˆãƒ«ãƒãƒƒã‚¯ãŒç™ºç”Ÿã—ãŸæ™‚ã«å¯¾å‡¦ã™ã‚‹ +* スケーリングã¯å復的ãªãƒ—ãƒã‚»ã‚¹ã§ã™