はやいもので、エンジニアになって3年が経とうとしています。
思い返してみれば、困難の連続で、
必死に現場のタスクにかじりつきながら仕事をした結果、
今はフリーランスエンジニアとして仕事ができているように思います。
そんな自分が今、エンジニアとして足りないスキルは何かについて書き残しておきます。
サーバーの負荷を意識した実装ができない
今の自分に一番足りないスキルは、サーバーの負荷を意識した実装ができないことです。
ちょうど、昨日もリリースだったのですが、今回は「ユーザー情報をCSVファイルに出力する」という機能を開発しました。
「ああ、なんだ、DBからデータを引っ張ってきて、CSVファイルに書き出すだけでしょ?」
と思われるかもしれませんが、
ユーザー数は、何千万件、他のテーブルの情報もひっぱってくるという感じで、データ量としては相当なもの
開発段階で、本番と同じ環境にするために、
本番のデータを開発環境に移行するだけでも数日かかるという感じでした。
また、開発しているサービスを複数のクライアントが使用しますので、
プロセスを同時に実行すると、どれだけサーバーに負荷がかかるのか
警報はとんでこないのか、
もっと軽くすることはできないのか
などなど、いろいろとクライアントから突っ込まれ、とても大変なリリースでした。
実際にリリース作業中にサーバーの負荷が上がってしまい、警報を飛ばしてしまいました。(大問題)
あやうくリリース作業は中止して、切り戻しになるところでしたが、
深夜帯に再テストしたところ、警報が上がった原因は、たまたまいろいろなプロセスが重なったことが原因かもしれないというところに帰結したので、
なんとかリリースを終えることになりました。
いやあ、大変だった…
インフラを苦手としているエンジニアは多い
これは自分に限った話ではないですが、
結構、インフラに弱いエンジニアは多い印象です。
ミドルウェアの理解、
サーバー監視、
ログの追い方、
AWSの理解など、
このあたり、自分はかなり弱いと再認識しました。
やはりベテランクラスになると、このあたりがしっかりと理解して対応できるので、
クライアントも信頼して仕事を頼んでいるのだなぁと感じます。
もっとインフラについて勉強していこうと思った次第です。
インフラの知識もつけていこう
サーバーになるべく負荷をかけない実装を意識していこうと思いました。
なるべくDBやNoSQLにアクセスしないように、使用している技術の理解はもちろん、キャッシュの理解、また負荷の確認方法、プロセスが終了するまでにかかる時間の計測などなど、
もっと学習していかないとなと思う今日この頃でございます。