見出し画像

デキるITエンジニアなら知っているシステム設計コンセプト10選

ITエンジニアたるもの日々の勉強が欠かせません。
とはいえ抜け漏れもあるというもの…
現代ではもはや当たり前の考えとなっているアーキテクチャ周りの概念を10個紹介するので、知識の抜けをここでチェックしていってください!


1. スケーリング - 垂直 vs 水平

システムの負荷が高まったときにパフォーマンスを維持するためコンピューティング資源を確保することをスケーリングといいます。
垂直スケーリングは1台のコンピューティング資源を増やすことで、水平スケーリングは新たに台数を増やすことを言います。

2. CAP定理

分散処理システムの設計に関わる定理で、一貫性(Consistency)、可用性(Availability)、分断耐性(Partition Tolerance)の3つを同時に満たすことはできないことを表しています。

3. モノリス vs マイクロサービス

マイクロサービスのメリットはスケーリングが簡単で、開発がやりやすく、単一責任の原則が守られており、言語に依存しないことなどが挙げられます。
一方でサービス間の通信が複雑になるので、スケーリングが不要だったりプロダクトの初期段階では一般にモノリシックアーキテクチャの方がよいです。

4. データ分割- 垂直 vs 水平

データ大きすぎて扱いづらくなってきたらパーティションの出番かもしれません。
行に分けるか列に分けるか、どの属性をキーにして分けるかを検討しましょう。
データ量の偏りを抑えられるためキーによく用いられるのはイベント時間です。
他にも各ドメインでwhere句によく指定されるキーなどで分割しましょう。

5. キャッシング

キャッシュはパフォーマンスを高めるとてもよい手段です。
唯一キャッシュ量には注意しないといけませんが、フロントエンド、バックエンド、データ、あらゆるエンジニアの領域で活躍してくれます。

6. MQ & イベントドリブンアーキテクチャ

マイクロサービスを抱えていると特にお世話になるのがイベント駆動な仕組みです。
メッセージキュー(MQ)はIoTやモバイルアプリを持っている組織では当然のように使われています。
多種多様大量データのやり取りを行うのに欠かせない技術です。

7. SQL vs NoSQL

すっかりおなじみになったNoSQLですが、まだまだ従来のSQLが不要になったわけではありません。
両者の特性やユースケースを見極めて選びましょう。
(最近ではNewSQLも言われ始めていますね。)

8. ロードバランシング & コンシステントハッシング

特定のコンピュータに負荷が掛かりすぎないよう分散する仕組みがロードバランシングで、ロードバランシングをうまくやるアルゴリズムがコンシステントハッシュです。
可用性が高いシステムを目指すのであれば必須の知識ですね。

9. 冗長性

システム障害に備えてメインで動くサーバー以外にも複製されたサーバーを用意しましょう。
もしものときにきっと役に立ってくれるでしょう。

10. デザインパターン

うまくプログラムするのにあなた自身が新たな設計を生み出す必要はありmせん。
先人がいくつもの設計をすでに考えてくれているので、巨人の肩に乗っかりましょう。

参考

Top 10 System Design Concepts everyone should know

よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!