ホーム

スタッフブログ

2021年10月29日

開発手記(5-2)サーバー増強・改修概要

こんにちは。

システムチーム プログラマー / マネージャーのAです。

前回に続き、サーバー増強に関する話です。

今回は改修の中身について話をします。

 

 

たまったツケを返す仕事

品の無い表現になってしまいますが

今回の改修は、たまったツケを返すような内容でした。

 

まず前提として、

サーバーやミドルウェアの状態は、

ユーザーにとって、基本的に関係の無いものです。

 

どのサーバーで動いていようが

どの言語のプログラムで動いていようが、

ユーザーからすればどうでもいい。望み通り動けばいい。

 

デキテルで言えば

お客さまへの利益の還元が重要であって、

他の概念や機能は、その数値を増やすための手段でしかない。

商用システムは、プログラマーの自己満足を体現するものではない。

 

だから、

アクセス数やCV数と、関係が薄い部分は後回しになる。

自分はマネージャー兼エンジニアですが、

この発想で自然だし、この発想であるべきだと思います。

 

システムへの愛があるのでバランスは難しい。

でも、基本的にはこの発想であるべきです。

 

ただし

後回しにすることによる、

システムへの負債の蓄積が無視できなくなってきた。

負債を返す必要が出てきた。

 

情勢的には

担当者は自分しかいなかったですし、

責任者の移行も控えていましたから、

システムへの負債の完済を決心しました。

 

その完済の様子を、5段階に分けてお話しします。

 

 

①ロードアベレージ値の削減

2021年6月頃、

デキテルに繋がらなくなる現象が発生しました。

原因は

処理待ちが大量に発生していたこと。

 

基準として「ロードアベレージ」という値がありますが、

推奨値は8 ~ 10未満に対して、

その頃のロードアベレージが「10 – 12」。

凶悪な量のプロセスが、処理を待っていました。

 

当時、何とか対応をして「2 – 3」まで下げました。

ちなみに今の数値は「0.5 – 0.8」。更に下がっています。

 

 

② 公開サーバーの追加

マーケチームの尽力があり、

幸いなことに、契約者さまの数は年々増えています。

同時に、公開画面を管理するサーバーの負荷も年々増えています。

 

公開画面そのものの負荷を減らすことは難しく、

サーバーを増やす、物量的な対応を取るしかなかった。

サーバーを分けるという概念を

デキテルにインストールする改修でした。

 

ちなみに、

契約者さまの数がいくら増えたとしても、

直ぐにサーバーを追加できる仕組みにしてあります。

公開画面に関しては永遠に大丈夫です。

 

 

③ ミドルウェアの最新化

デキテルに関連するミドルウェアを全て最新化しました。

今のデキテルは、最新のPHP8に対応しています。

本改修中で、最難関の開発でした。

とにかく、時間内に収めることが大変だった。

 

「PHP8とPHP5系の違いは?」

とよく聞かれますが

「なんとなく書いたコード」が動くか否か だと思います。

 

例えばPHP8では

カウント出来ない変数の count() => Fatal Error !

非static 関数の static 呼び出し => Fatal Error!

未定義の定数の呼び出し => Fatal Error!

string型を使った四則演算 => Fatal Error!

という感じ。厳しいですね。

最速で、最も安全なリライト方法を四六時中考えていました。

「何とか工夫出来ないか・・・」と。

 

もし、

思考停止して、愚直に、全て対応した場合、

プロジェクトは確実に破綻していました。

見積りに収まるわけがない。遅延確定だったと思います。

 

 

④ ボトルネックの解消

デキテルには、速度面での小さなボトルネックが多くありましたが、

それらの最適化も行いました。

 

例えば、

編集画面TOPに関してはSQL発行を数百回削減しています。

1つ1つは微小なコードだったので、根気の必要な作業でした。

 

あとは時間との兼ね合い。

・ボトルネック解消に必要な時間

・解消される事で、ユーザーに与えられる時間

の勘定は、常に行っていました。

 

 

⑤ 編集機能サーバー移転

間違いなく、過去最大の改修です。

システムを全部持って引っ越したんだから、当然。

 

悩ましかったのは、その引っ越し先(サーバー)。

 

CPU, メモリ, リージョン, OS, 利用ミドルウェア, 解放ポート…

選択肢は無数にあるのに、誰も正解を定義してくれない。

「何がデキテルにとって正解なんだろう?」

ずっと、頭の中から離れない、難しい問いでした。

 

 

ダウンタイム0で改修しきった

今回の改修を通して、

何よりも価値があるのは「見積り通り完了した」こと

次点で、「ダウンタイム0で改修しきった」ことだと思います

 

ダウンタイムとは「システムを止める時間」のこと。

サイトにアクセスしたとき、

「メンテナンス中です」的な文言を見たことがあると思います。その時間です。

 

先述の通り

今回の改修は

ユーザーにとっては効果の分かり辛い改修ですし、

コスト・リスク・リターン面で、改修に関して負い目があった。

だから、ダウンタイムを出したくなかった。

 

物凄くテクニカルで、

話すことは沢山あるんですが、

技術的な要素が多く入ってるので、

次の記事で内容を詳しく書きます。

次→https://syde.jp/w/archives/11550.html

 

求人バナー

このページの上部へ戻る