皆さんこんにちは、システム部エンジニアのシカです。
GMOリサーチでは、毎日数百万のトラフィックを処理するために、様々なアプローチでスケーラビリティを実現しています。
システムを開発するために、スケーラビリティを意識することは重要で、自分自身がレベルアップするためにも欠かせない知識だと思っています。今回の記事では、そのスケーラビリティを実現するための方法について、調べたことを紹介していきます。
目次
1.スケーラビリティとは?
2.スケーラビリティを高める手法①負荷分散
3.スケーラビリティを高める手法②キャッシュ
4.スケーラビリティを高める手法③分散ファイルシステム
5.スケーラビリティを高める手法④シャーディング
6.結論
1.スケーラビリティとは?
まず、スケーラビリティとは利用者や仕事の増大に適応できる能力・度合いのことを指します。電気通信やソフトウェア工学において、システムまたはネットワークまたはアルゴリズムの、持つべき望ましい特性の1つで、一種の拡張性のことです。
※参照:Wikipedia
システムは利用者、データ、トラフィックが増加しても性能を下げたり、信頼性を失うといった犠牲を払うことなく、扱える必要があります。SNSのプラットフォームやeコマース、Webサイト、モバイルアプリなど大幅な成長が見込まれるシステムには特にこの拡張性が必要になります。
2.スケーラビリティを高める手法①負荷分散
システムのパフォーマンスと可用性は、負荷分散によって向上します。負荷分散とは、システムにかかる負荷を複数のサーバーに分散させ、1つのサーバーに負担が集中することを防ぎ、システム全体がトラフィック増加に対応しやすくするための方法です。
負荷分散には、ハードウェアベースとソフトウェアベースがあり、IPハッシュ、最小接続、ラウンドロビンなど、様々な方法を使用して負荷を分散させることができます。
複数のサーバーにトラフィックを分散させ、1つのサーバーに負荷がかからないようにすることで、より多くのリクエストを処理し、より迅速に対応することができます。負荷分散は、サーバーがダウンしていることを自動的に識別し、アクセス可能な別のサーバーにトラフィックを転送することで、冗長性を提供することもできます。
また、NGINXやHAProxyなどのソフトウェアベースのロードバランサーの利用は、よく知られる負荷分散方法の1つです。これらの解決法が提供する柔軟性とシンプルさにより、エンジニアはシステムの要件に合わせて負荷分散アルゴリズムを変更することができます。さらに、仮想マシンやコンテナーにインストールすることもできるため、水平スケーリングも簡単になります。
※水平スケーリング:同種のリソースをシステムへ追加投入してパフォーマンスを向上させること。
※引用:「Nginxによるロードバランサーでサーバーの負荷分散をする」
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
続きはこちらのテックブログからご覧ください。
日本語版【https://gmor-sys.com/2023/06/29/system-scalability-jpn/】
英語版【https://gmor-sys.com/2023/06/29/system-scalability-eng/】