スケーラビリティ

スケーラビリティ（scalability）とは利用者や仕事の増大に適応できる能力・度合いのこと。電気通信やソフトウェア工学において、システムまたはネットワークまたはアルゴリズムの、持つべき望ましい特性の1つで、一種の拡張性である。より具体的には、小規模なシステムを大規模にする場合に、システム全体を交換する方法（建物で例えると大きな物件に引っ越すこと）では無く、リソース（特にハードウェア）の追加によって大規模なものへと透過的に規模拡張できる能力（建物で例えると、増築や別棟を建てること）はスケーラビリティの一種だといえる。リソースの量に比例して全体のスループットが向上するシステムはスケーラブルな（scalable）システムまたはスケーラビリティのあるシステムと呼ばれる。 対する概念としては、既存の仕組みを破棄してそれ以上の仕組みにするスクラップアンドビルドである。 システムの特性としてのスケーラビリティに一般的な定義を与えるのは難しい。具体的な事例においては、問題としている領域でスケーラビリティを確保するための条件を特定することが必要である。これはデータベース、ルータ、ネットワークなど情報工学の分野において非常に重要なことである。スケーラビリティは分散処理の透過性の概念と密接なつながりがある。 スケーラビリティの高さは様々な尺度で評価される。例として 規模透過性 負荷の高低に合わせてリソース・プールを拡大・縮小できること 位置透過性 ユーザーやリソースがどれだけ離れているか意識せずに、変わらない使い勝手でシステムが利用できること 異種透過性 システムを構成する機器やソフトウェアが異なっていることを意識せずに管理・利用できること がある。スケーラビリティについて議論する際には規模透過性のみを問題にすることも多い。 例えば、スケーラブルなデータベース管理システムではプロセッサやストレージを追加することでより多くのトランザクションを処理できるようにアップグレードでき、またアップグレードをシャットダウンなしに実行できる。 ルーティングプロトコルがネットワークの規模に関してスケーラブルであると言われるのは、Nをネットワーク内のノード数としたときに、各ノードに必要なルーティングテーブルのサイズが O(log N) に従って増大するときである。 スケールアップ（垂直スケール）やスケールアウト（水平スケール）は、スケーラビリティの向上、すなわち性能・容量向上のための方法である。 スケールアップはシステムの単一のノードにリソースを追加する方法で、CPUやメモリの増強や、コンピュータ自体の買い換えなどである。スケールアウトはシステムにノードを追加することで、クラスタなどの並列コンピューティング技術を使用する方法である。現実のシステムではそれぞれ上限・制約・デメリットも存在するため、組み合わせも行われる。 システム設計では処理能力をあげることよりもハードウェアに関するスケーラビリティを高めることに力を入れろとよく言われる。システムのノードを増やして高いパフォーマンスを得るほうが、パフォーマンス・チューニングで個々のノードの処理能力を上げるよりも、大抵は安くつくからである。しかし、この手法ではノード数の増加に伴って利益が鈍化していってしまう。この問題はパフォーマンス・エンジニアリング（英語版）で扱われる。例として部分的な並列化によって高速化が可能なプログラムを仮定する。並列化可能な部分は全体の70%とし、CPUを1個から4個にスケールアウトする。Fを逐次的な部分の割合とすると、(1 - F)が並列化される割合となる。P個のプロセッサを稼動して得られる最大の高速化（倍）は次の式（アムダールの法則）となる。 1 F + 1 − F P {\displaystyle {\frac {1}{F+{\frac {1-F}{P}}}}} 仮定した数値を代入すると、 1 0.3 + 0.7 / 4 = 2.105 {\displaystyle {\frac {1}{0.3+0.7/4}}=2.105} が得られる。プロセッサを8個までスケールアウトすると 1 0.3 + 0.7 / 8 = 2.581 {\displaystyle {\frac {1}{0.3+0.7/8}}=2.581} が得られる。よってハードウェアを単純に追加していくのは、必ずしも最適な手法とはいえない。 高性能計算の分野で代表的なスケーラビリティの定義としては次の二つがよく用いられる。ひとつはストロング・スケーリング、あるいは強スケーリングと呼ばれ、全体の問題の大きさを保ってプロセッサ数を増やしたときに実行時間がどのように変化するかで定義される。もう一方はウィーク・スケーリング、あるいは弱スケーリングと呼ばれ、プロセッサあたりの問題の大きさを保ってプロセッサ数を増やしたときに実行時間がどのように変化するかで定義される。 変圧器の容量増設 - 三相交流で二個の変圧器の「V結線」にしておけば将来的容量が増えた場合に変圧器を一個追加し「Δ結線」にして容量を上げる事ができる。二段階であるが、元の変圧器二台をそのまま使えるので、スケーラビリティーと言える。 売り場面積拡張 - 一般的な小売店は規模が大きくなった場合、現在より大きい物件に移転をするが、現在の物件の増築や隣の物件を取得するスケーラブルな計画を行う場合もある。ホームセンター大手のジョイフル本田はこの手法を採用している。 クラウドコンピューティング - ユーザのアプリケーションの改変なしに、プラットフォーム側の計算資源や記憶領域を増減させることが出来る技術。本技術を使用しない場合は、より高性能なコンピュータへの移行やストレージの追加によるアプリケーション側の改変が必要になる。 コンピュータの実メモリや外部記憶装置 - 実メモリは空きスロットがあれば追加することで容量を増やすことができる。また、適切にアプリケーションが設計されていれば増えたメモリが適切に使われる。外部記憶装置も基本ソフトにスパニング機能があればアプリケーションの改変無しで容量を増やすことができる。 オーバードライブプロセッサ - インテルがCPUのアップグレードパスとして販売していたプロセッサや対応コンピュータ。コンピュータ本体を購入しなくても、ソケットにアップグレード用のプロセッサーを接続するだけでアップグレードできる。しかし、実際は元のプロセッサの動作を停止し、新規プロセッサを動作させる仕組みでありスケーラビリティとは異なる。 ^ André B. Bondi, 'Characteristics of scalability and their impact on performance', Proceedings of the 2nd international workshop on Software and performance, Ottawa, Ontario, Canada, 2000, ISBN 1-58113-195-X, pp.195 - 203 ^ Mark D. Hill, 'What is scalability?' in ACM SIGARCH Computer Architecture News, December 1990, Volume 18 Issue 4, pp.18 - 21, (ISSN 0163-5964) および Leticia Duboc, David S. Rosenblum, Tony Wicks, 'Doctoral symposium: presentations: A framework for modelling and analysis of software systems scalability' in Proceeding of the 28th international conference on Software engineering ICSE '06, May 2006, ISBN 1-59593-375-1, pp.949 - 952, などを参照 ポータル コンピュータ アムダールの法則 並列化 分散コンピューティング 負荷分散