orangeitems’s diary

クラウドで働くインフラエンジニアの日々の感想です(ほぼ毎日更新)。

設計で失敗したら基本的に取り返しがつかない

f:id:orangeitems:20200913082147j:plain

 

一度、設計がどうしようもないシステムに数年お付き合いしたことがあって、タイトルはその結論です。

設計で失敗したら基本的に取り返しがつかない。

基本的に、と言っているのは、運用でなんとかカバーしてシステムの寿命を何とかまっとうするのが通常だからです。どんな無理な設計でも特定の時間を経過できてしまえばやり過ごすことはできます。でもそれは、地獄の時間と言ってもいいものです。

初期構築するときはユーザーがいないので、結構大胆に設定変更や構成変更ができますが、一度サービスインし本番運用化してしまうと、ほんの少しの変更でもとても慎重になります。

だから、一度動かしてしまった後に、大きな仕様変更は基本できないのです。システム規模を大きくしていくときにはその基本設計は変えることはできず、横に継ぎ足していくのが通常です。

私が失敗していた、という表現する最も最悪な設計は、いくつものシステムを横に並べつつ、インターネットへの出口が1つしかないという仕組みでした。冗長化はしていたものの、とにかくルーティングから考えると1つしか出入り口がない。

システムが1つ2つならいいのですが、10個20個と増え続ける日々。

トラフィックも10倍、20倍、しかも、私が担当していた時は光回線や4Gの普及期。扱うコンテンツもリッチ化していきましたから、1つのシステムが利用するトラフィックも右肩上がり。

そうなると、インターネットの出入り口が何らかの原因で使えなくなると、全システム停止です。全てのシステムがインターネット越しにユーザーが使うので、どんなにデータセンター内でシステムが健全に動いていても、致命的な状況となってしまいます。

例えるなら、街を作ったけれど、他の街につながる道路が1個しかない状態。街がどんどん大きくなっていくのに外には1本しか道路がないので道路が災害などで使えなくなると、孤立状態になってしまう、という感じでしょうか。街をつくる時点で道路を複数確保したり、エリアごとに幹線道路を作ったりして、大きくなってもいいような配慮をはじめのうちからすべきでした。しかし、新しく道を作ろうにも、街がそこそこ大きくなってしまったあとは、もうそこに家ができていて動かせない、みたいな問題になるのがオチです。

始めに設計をする人に想像力が無いと、初期の段階できれいな、シンプルな設計を施してしまいます。でも、本来は、大きくなったときの配慮が必要、ということです。しかし、開始当初は予算が限られているので、理想を施そうとすると予算がオーバーし、経済的な理由で設計が削られてしまう、と言うようなことが起きます。

運用保守を知らない人が設計をしたり、お金しか見ていない人が関わったりすると、この過ちが非常に発生しやすい。この手の問題が原因となる障害は、非常に大規模化しやすいです。先の例で言えばインターネットの入口が詰まると、全システムが運用停止。しかもインターネットのトラフィックが問題となっている場合は帯域の広い回線に変更するか、回線を増設しルーティングを変更するなどの方法が考えられますが、システムを動かしながらこの手の変更をするのは相当大変なことなのです。

当初の設計に問題があることで結局は顧客の信用を失ったり、設計変更に多額の費用を費やしたり、トータルで見ると大きなコストがかかるので、であれば設計の段階で大きくなる前提で構築しておくのが、最もコストがかからない、これはもう真理として私は考えています。

 

初めから、大げさな想定をしておくことが重要だと思います。