2020年11月1日日曜日

安定稼働のための投資

ウェブサービスの経営陣には、新しい機能を開発してナンボという意識があるんじゃないでしょうか(※個人の感想です)。

まあ間違ってはいないんですよ。ウェブサービスは流行り廃りが激しく、世間で騒がれているサービスが翌年には閑古鳥が鳴いているという状態も珍しくありません。そんな中で生き残るには、便利な機能を次々と発表していくのも戦略です。

が、それと同じくらい、いやそれ以上に安定稼働させることが重要です。

重要性を理解していますか?

どんなに高機能でも、しょっちゅう障害が発生したりデータが吹っ飛ぶようなサービスは誰も使いませんよね。

電気・通信・水道・道路・橋…社会インフラを思い浮かべてもらえばわかると思いますが、サービスを止めない・当たり前に使えるようにするのはとても大変。

落雷で停電したり、キャリアの障害で電話が使えなくなったり、地震で道路や橋が崩れたりしてパニックになった経験は誰しも少なかずあるでしょう。

いくら安くても停電が頻発する電力会社や通信障害が頻発するキャリアを使いたいと思わないはずです。

あなたの作ったサービスでは、安定稼働させるにどんな投資をしていますか?

ウェブサービスの場合

ソフトウェアには老朽化という概念はないので、一度作ればメンテフリーでずっと動くと思っている人もいるかもしれません。

しかし実際には、仮にソフトウェア自体が完璧だったとしても(そんな仮定自体があり得ないことですが)最低これくらいのメンテが必要です。

  • OSのサポート期限が切れる前に新しいOSにアップグレードする
    • OS以外のミドルウェア(ウェブサーバーやスクリプトの処理系等)も定期的なアップデートが必要
  • サーバーの老朽化等に伴うメンテに対して、メンテ中もサービスを継続できるように冗長化や経路の迂回設定などを行う
  • ユーザーデータ(プロフィール画像等)が増えてストレージを圧迫しないように、ストレージを増設する
  • データベースに蓄積されるデータが大きくなるにつれて処理速度が低下しないように、ノードを増やしてシャーディングする
    • ストレージの圧迫対策でもある

OSのアップグレード1つとっても、yum upgradeとかapt dist-upgrade一発で万事OKな世界ではありません。サービスが使用しているミドルウェアやライブラリーが正常に動くか、マシンのリブートが必要か等を検証環境で入念に検証した後で、本番環境に適用する必要があります。リブートが必要な場合はサービスが止まらないように調整しないといけません。場合によってはサーバーを新設して今までのサーバーは退役させた方がいいかもしれません。

最近はクラウドサービスやコンテナ技術など便利なものがたくさんあるので、管理も随分楽になってきました。それでもメンテが完全に不要なわけではありません。むしろどれが不要になり、どれが依然として必要で、新しく何が必要になるのかをしっかり把握しておかないといけません。

もちろん、そのためにはしっかりとした投資が必要です。設備投資だけでなく、きちんと運用できる技術者への投資もです。むしろ自社でデータセンターを持っているようなところでなければ技術者への投資がほとんどです。

ありがちなこと

ところが、経営陣がこのあたりを理解していないと、「とにかく新しい機能を追加しろ!」と新機能ばかりに投資してしまいます。

最初に書いた通り、機能追加も大事な作業です。しかし一般的に、機能を追加すればバグが出ます。安定性も損なわれます。特に急いで実装した機能であれば尚更です。

そのために、一度書いたコードに対してリファクタリングが必要です。それはコードの内容を理解しやすくするために書き直す作業だったり、バグを発見しやすくするためにテストコードを追加する作業だったりします。

「リファクタリング?別に動作が変わるわけじゃないんだろ?なんでそんなものが必要なんだ?バグを発見しやすくなる?プロなら最初からバグのないコードくらい書けんでどうする!」

前半はあるあるなんじゃないでしょうか。場合によっては後半も。。。

そしてリファクタリングの時間を取れずにどんどん機能を追加して不具合が頻発。ようやく時間を取れたけどリファクタリングできないほど複雑なコードが出来上がっていた・・・なんてこともあります。

そんな状況では、優秀な人から辞めていきます。残ったのはメンテもリファクタリングもできるほどの技術力がない人ばかりかもしれません。

残った人たちではOSやミドルウェアのアップデートもできずに古いOSのまま動かし続けてセキュリティーホールが放置され、使っているクラウドやVPSのメンテ告知にも対応できずに仕方ないからサービスの一時停止案内を告知。。。

言っておきますが、これはメンテをするクラウド事業者が悪いのではなく、安定稼働のための投資をしなかった経営者が悪いのです。こんな状況では仮にクラウドのメンテがないとしても他の要因(ストレージやDB等)でいずれ詰みます。

どの程度の稼働率が必要なのかはサービスにもよるでしょうが、商用サービスであるならばなるべく高い稼働率を目指しましょう。

そのために、エンジニアや技術への投資が必要です。「うちのサービスは最先端の技術が必要なわけではないからエンジニアの技術力もそこまでいらない」という場合でも、安定稼働のための投資は必要です。安定稼働して当たり前だからこそ、しっかり投資しましょう。

0 件のコメント:

コメントを投稿