F@N Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・nex8・viidleのエンジニア・技術ブログ

ミニSSP作ってきたん

02月18日〜02月22日までファンコミュニケーションズで1週間のインターンでお世話になりました福田です.

何やったん?

ミニSSP作りました. githubにコードあげてます.興味あったらどうぞ

1日目

SSPとDSPがどんなものかを教えていただきました.正直,教えていただくまでSSPがなんなのかいまいち理解できていませんでした. 「SSPってなんなん?」って人はぜひ参加して見てください.理解できると思います.

その後,どの言語で作るかを決定しました.私はgolangで開発しようと決めました.

なんでgolang選んだん?

選んだ理由としては3つです.

  • コンパイル言語だから実行速度がそこそこ速い
  • ビルド後一つの実行ファイルにできて扱いやすい
  • 最近流行ってる

言語を選んだ後は仕様書を渡されて開発に入りました.初日は開発環境を揃えて,少しgolangのコードを書きました. 仕様書に関しては他のインターン生が上げてくれているので省略します.

1日目の感想として

  • 現状エラー無視しているのでどうにかしたい

2日目

本格的にgolangで開発してました.困ったこととして,golangでの数値->文字列, 文字列->数値の処理で結構悩みました.
単純には変換してくれないんですね....勉強になりました. この日から新たにdockerを使い始めました.理由としては開発効率をあげるためです.dockerの可搬性を利用して,サーバと開発環境との差異をなくせるようにしていました.

2日目の感想として

  • docker使うと可搬性が上がる
  • goの型変換辛い
  • goのjson辛い

3日目

静的言語の辛いところや,golangの恩恵にあやかりながら7割くらい実装できました.
サーバにデプロイして実際に動かしてみたところ,まぁまぁできている.エラーも所々でているが,とりあえずレスポンスは帰ってきている状態でした.
実際に大量のアクセス負荷もやってみました.ツールはvegetaを使いました.

3日目の感想として

  • docker使うと可搬性が上がる
  • gitのコミット100超えた

4日目

この日は,ほぼリファクタリングしてました.リソースを効率よく使うためにcadvisorも入れてみましたが,特にメモリ容量も1G超えることなく,よく捌けてたんじゃないかなと思ってます.golangのおかげですね.

4日目の感想として

  • git難しい
  • docker難しい
  • goroutine難しい
  • cadvisor入れるとコンテナ単位でリソースを見てくれる

5日目

綺麗とは到底言い難いコードのリファクタリングをやりました.golangで捌ける量を超えているような気がしたので,golangの前にnginxを置くように改修していました.結果できず....悔しい.
ちなみにnginxを前に起きたかった理由はgolangでリクエストを受けきれなくなった時に適切に返したかったからです. vegetaでリクエスト量を増やしていくとステータスコード0のタイムアウトが目立つようになってきました.そこでnginxで受けてgolangに流すことができればとりあえずタイムアウトは減らすことができるのではないかと考えてnginxを前に置くように変更してました.

感想

めっちゃ良かったです.
プロの方にレビューをもらいながら,作業する経験はなかなかできないので,技術の向上になったのではないかと考えています.
スタンディングデスクめっちゃ良かったです. 5日間という短い間でしたが,ありがとうございました.