ネットワークプログラミングの最大の勉強方法
昨日の話の続きみたいな感じですが、ネットワークの基幹部分で使われるプログラムのお話しの続きを。。
当社のインターネットと社内ネットワークの境界部分では、基本的に全てプロキシが仲介するようにしてあります。直接インターネット側から社内の各種サーバに接続させないようにするのと、社内からインターネットに出ていく際にもある程度管理するためです。
さらに、プロキシが稼働しているサーバとインターネットルーターとの間にも、組み込みLinuxで作った自作ルーターが存在しています。まあ、こちらはほとんどLinuxの機能を使ったものですが、HDDレスで故障しにくいというのと、その気になればキャプチャを取るなどがしやすくなる点、また、VLANをかなり独自に使っているので、そのあたりも汎用機より扱いやすい点などがあります(汎用機より断然安い、というのが大きいかも?)。
さて、プロキシは、現在以下のものがあります。
HTTP , IMAP , DNS , FTP , POP3 , SMTP
さらにこれらを稼働監視するマネージャーもいます。この中で、IMAPプロキシは種田君作ですが、それ以外は全て私が作ったものです。
プロキシの他にも、DHCPサーバはもちろんProDHCPを使っていますし、DHCPv6もProDHCPv6を使っています。不正接続対策のIntraGuardian2も動かしています。
これらは、プログラムに問題があると社内の仕事に影響が出てしまうプログラムです。
他にもジョブ管理システムや施設予約システムなど、自分たちで作ったシステムはあるのですが、ネットワークプログラムの重要なポイントは「問題があると即業務が止まる」という点でしょう。
特に、今どきの仕事では、電子メールシステムは電話やFAX以上に仕事への影響が大きく、さらに、それらが正常に動くためにDNSやDHCPも重要です。WEBも使えないと影響が大きいものです。
私は以前から、ネットワークプログラミングが好きなメンバーに「これらのプロキシはより良いものを作って入れ替えていいよ」と話してきました。実際にそれを実行できたのは種田君だけで、入れ替えたというよりIMAPのプロキシがなかったので作ってくれた、という感じです。
「なぜ誰も手を出さないのか」は簡単で、「問題を起こしたときが怖いから」でしょう。実際、社内のネットワークが不調になると、他の部署からもクレームがきます。以前は全く電子メールを使わなかった会長でさえ「電子メールが異常というのはありえん!」と雷を落とすくらいです。
しかし、これこそが、ネットワークの基幹で使われるようなシステムを手がけられるようになるかどうかの分かれ目だと私は思っています。
繰り返しになりますが、
・開発したソフトウェアに問題が限りなく少ないこと
・開発したソフトウェアの動作確認をしつこいくらいに行うこと
・ソフトウェアを動作させるOSやハードウェアまで含めた安定性・性能に気を配っていること
・ソースコードがメンテナンスしやすく、解析や対応が迅速に行えること
・投げ出さないこと
・常により良くしようと手をかけること
・客先にも積極的に駆けつけること
・パートナーさん、お客さんと良好な関係を築くこと
・製品に愛着を持つこと
これができるようになるための試練の場が自社のネットワーク環境なのです。自社とはいえ業務に影響が大きい部分で、自分のプログラムを動かし、運用することができないようでは、製品など作れるわけがありません。
もちろん、失敗を恐れていては何も始まりませんので、まずは自社で失敗して痛い目にあえば良いのです。そこであまりにも失敗ばかりしていたり、復旧に手間取ってばかりいると信用を失うので、それも良い勉強になるでしょう。
会社の規模が大きくなるほど、ネットワークの基幹部分を社員といえども触れなくなっていきます。悪用を防ぐためなどで、あえて社外の業者に委託する会社もたくさんあります。
こんなことを書く気になったのも、実は今日、DNSの不調に気づき、改良をしたりしていたからなのでした。。ネットワークシステムは、とにかく実運用することで問題を発見し、対策していくことがとても大切です。自分で考えたテストケースなどでは全く歯が立たないのがインターネットです。飛び交うパケットがルール違反・プロトコル違反などは日常茶飯事で、それでいちいちシステムが落ちるようでは使い物になりません。自社でも自宅でも、自分がある程度任せてもらえる環境があるなら、そこで自分のプログラムを動かしてみることが、ネットワークプログラミングの最高の学習方法でしょう。作るだけなら誰でもできます。本当に信頼できるものを作り、運用できるかどうかが重要なのです。