おはようございます、パコです😊
最近、AIと一緒に業務システムの開発を進めています。
設計。
プログラム。
データベース。
サーバー。
ネットワーク。
以前は機械や電気の設計が中心でしたが、最近はソフトウェアやサーバーのことまで考えるようになりました。
そんな中、ふと思ったことがあります。
「このシステム、パソコンを再起動したらどうなるんや?」
普段は問題なく動いている。
でも、電源を切って、もう一度入れたら?
今日は、そんな話です。
動いている時は問題がない
システムを開発していると、まずは必要な機能が動くことを確認します。
画面が表示される。
データを入力できる。
保存できる。
必要な処理が実行される。
これらが正常に動けば、ひとまず安心します。
でも、それは現在の環境で動いていることを確認しただけなんですよね。
では、一度電源を切ったら?
OSが再起動したら?
ネットワークが一時的に切れたら?
その後、元の状態へ戻れるのでしょうか。
再起動したら、動かなくなった?
例えば、サーバー上で複数のサービスを動かしているとします。
データベース。
業務アプリケーション。
メール。
定期処理。
こうしたものが、それぞれ連携して動いています。
ところが、OSを再起動すると、サービスによって起動するタイミングが違うことがあります。
ネットワークの準備ができる前に、アプリケーションが起動しようとする。
データベースの準備が終わる前に、別のサービスが接続しようとする。
その結果、起動に失敗する。
「さっきまで動いてたやん!」
となるわけです(笑)
これは、単にプログラムが間違っているという話ではありません。
起動する順番や、準備が整うまで待つ仕組みも関係しています。
電源が入ったことと、使えることは違う
例えば、パソコンの電源が入った。
OSも起動した。
でも、必要なサービスが動いていなければ、仕事には使えません。
逆に、サービスのプロセスが起動していても、必要な通信やデータベース接続ができていない場合があります。
だから、確認するべきことは一つではありません。
OSが起動したか。
ネットワークが使えるか。
必要なサービスが起動したか。
サービス同士が正常に通信できるか。
実際に利用者が必要な操作をできるか。
「起動した」と「使える」は、別の確認なんですよね。
自動起動だけでは解決しない
そこで考えるのが、自動起動の仕組みです。
OSが起動したら、必要なサービスも自動的に起動する。
これなら、毎回人間が操作しなくても済みます。
でも、単純に自動起動を設定すればいいというわけではありません。
例えば、ネットワークの準備が終わっていないのに、メールサービスが特定のIPアドレスで待ち受けようとしたら?
そのIPアドレスがまだ使える状態になっていなければ、起動に失敗する可能性があります。
だから、単に起動するだけでなく、
「必要な条件が揃ってから起動する」
という考え方が必要になります。
AIと一緒に原因を調べる
こうした問題を調べる時にも、AIを活用しています。
まず、何が起きたのかを確認します。
どのサービスが起動したのか。
どのサービスが起動しなかったのか。
どんなエラーが出ているのか。
起動した順番はどうなっているのか。
ログを確認しながら、一つずつ原因を絞り込んでいきます。
ただし、AIが示した原因をそのまま確定するわけではありません。
実際のログや設定を確認する。
必要なら再現試験を行う。
そして、確認できた事実と、まだ推測の段階にあるものを分けます。
これは、製造業の設備トラブルを調べる時と似ています。
機械設備でも、同じことを考える
私は長年、設備設計や自動化に携わってきました。
機械設備でも、電源を入れれば何でも動いていいわけではありません。
例えば、設備を起動する時。
安全装置が正常か。
必要なエア圧が確保されているか。
センサーが正しい状態か。
原点復帰が必要か。
こうした条件を確認してから、動作を開始することがあります。
条件が揃っていないのに動き始めたら、危険な場合もあります。
だから、動かす前に何を確認するのかを設計します。
考えてみれば、サーバーも似ています。
もちろん、機械の安全制御とサーバーの起動制御は同じものではありません。
でも、必要な条件が揃ってから動作を開始するという考え方には、共通する部分があります。
復旧できることも、設計の一部
今回、改めて感じたことがあります。
システムを作る時、どうしても正常に動いている状態を中心に考えがちです。
でも、実際の運用では、トラブルが起きることもあります。
停電。
OSの更新。
ネットワーク障害。
サービスの異常停止。
そんな時に、どうやって元の状態へ戻すのか。
そこまで考えておく必要があります。
そして、復旧方法が分かっているだけではなく、実際に使えることも確認しておきたい。
「壊れないこと」だけでなく、「問題が起きても戻せること」。
これも、システムの品質の一つだと思っています。
勝手に復旧させればいいわけでもない
ただし、ここには注意点があります。
何でも自動的に再起動すればいい、というわけではありません。
例えば、重要な処理の途中でサービスが停止した場合。
そのまま再実行すると、同じ処理が二重に行われる可能性があります。
データの整合性に問題が出る場合もあります。
だから、自動復旧させる範囲と、人間の確認が必要な範囲を分けることも大切です。
これは、機械設備でも同じです。
異常停止した設備が、原因を確認しないまま勝手に再始動したら困りますよね。
「自動で戻せること」と「自動で戻してよいこと」は別。
ここも設計する必要があります。
使う人が困らないシステムへ
私がものづくりで大切にしているのは、使う人が困らない設計です。
正常に動くこと。
間違えにくいこと。
保守しやすいこと。
そして、トラブルが起きた時に対応しやすいこと。
最近は、AIと一緒にソフトウェアを開発するようになりましたが、この考え方は変わりません。
システムが動いている時だけでなく、止まった時のことまで考える。
再起動した後に、必要な機能が使える状態へ戻ることを確認する。
戻れなければ、原因を調べられるようにする。
そんな仕組みを作っていきたいと思います。
動いているだけでは足りない。止まった後に、どう戻るかまで考える。
これも、AIと一緒にものづくりをする上で、大切なことだと感じています😊
編集後記
最近、AIと一緒にシステム開発をしていると、色々なことを考えるようになりました。
以前なら、機械設備の起動条件やインターロックを考えていたのに、今はサーバーの起動順序やネットワークの準備状態を考えています。
使う技術は違いますが、根っこにある考え方は似ていますね。
それにしても、システムが正常に動いている時には、なかなか再起動後のことまで気が回らないものです。
でも、実際に運用するなら、避けて通れない問題です。
さて、今回もまた一つ、考えることが増えました。
……AIで仕事を効率化しているはずなのに、確認することがどんどん増えている気がします(笑)
まあ、それも含めて、ものづくりの面白さなんでしょうね😊
AIを学び、AIと共に考え、AIと共に創り上げる。
