見出し画像

Yahooのインターンに行ってCassandraとバックエンドが面白かった話

こんにちは、@fukino010です。
8月の2週間Yahoo JapanのNoSQLチームでインターンさせていただいたので自分への記録も兼ねてそれについて書きます!
技術記事ではないのでQiitaではなくnoteに書いてみます。

インターン概要

参加したのはYahoo Japan NoSQLチームでの2週間のインターンで、NoSQLの一種であるApache Cassandra 4.0 (リリース前)の新機能の性能検証をし、結果をOSSコミュニティにフィードバックするというのが最終目標でした。
https://about.yahoo.co.jp/hr/internship/1957/

リレーショナルデータベース(RDB)のMySQLなどは完全に一貫性を保持する必要のあるデータ(金融情報、残高)などに使用されます。
一方NoSQLのCassandraはある程度一貫性を保ちつつ大量のデータを入れるために使用するもので、キャッシュ(Webの閲覧履歴など)とかに使用されるようです。

参加前のスキルセット&参加のきっかけ

大学では普段複雑系アルゴリズムの研究をしていて、趣味はチャットBotとかWebアプリ作成、APIとかに触ること、競プロといった感じで
NoSQLどころか元々のスキルセットにバックエンドのバの字もありませんでした。
かろうじてかつて学部時代、授業で友人達とデータベースを使って航空機の航路検索Webアプリを作成したことがありましたが、そちらはRDBを使用したのでCassandraどころかNoSQLの知識0で飛び込みました。
(流石に怖かったのでデータベースの教科書とTutorial pointでちょっと予習したけど分野が未開の地すぎて大して勉強できないまま突入(^^;))

まるっきりの別分野からこのインターンに応募した理由はコンピュータサイエンスを専攻していて一度もバックエンドを触ってないのは良くないと考えたことと、フロントエンドをやりすぎてバックエンドを敬遠していましたが「本当にバックエンドは私に合わないものなのかな?将来の道として可能性あるのかな?」と思い一度しっかり勉強してみたいと思ったからです。

インターン選考

確かエントリーシート→コーディングテストと簡単な数学のWebテスト
→面接だったと思います。

インターンスタート!

NoSQLチームのインターンは私とKさん(仮)でチームからCassandra百戦練磨のメンターさんが1人ついてくださいました。インターンの2週間中は私とKさんが作業してる側でずっとメンターさんが一緒にお仕事していてくださるので分からなくなったらすぐ聞けるという非常にありがたい環境でした。

インターン1日目〜2日目ぐらい

最初はメンターさんがNoSQLの基礎からCassandraについての知識、使い方について授業をしてくださいます。
自分で予習していた時は基礎知識が無さすぎて中々概念を飲み込めなかったのですが、メンターさんのわかりやすい授業のおかげでかなり楽に理解することが出来ました。
ある程度基礎知識を教えていただいたところでMacBook Proのローカル環境でCassandraを動かしながら解説を聞きました。

インターン3日目〜5日目ぐらい

性能検証のための試験環境構築をしていきます。
結論から言うとこの試験環境構築に物凄い手こずりました。
試験環境にはハイスペックなVMを15台ぐらい用意していただき、Cassandra4.0のソースコードからパッケージを作成して各サーバーにインストールしていきます。

開発途中のコードの難しさ

Cassandra4.0は開発途中(そろそろcode freezeかもしれない)のコードなのでエラー無しで動く保証が無いです。パッケージを作成するためのbuildがエラーを吐くわ吐くわでパッケージが作れない問題に直面します。
私は今までOSSやライブラリを使ったりする際ほぼ完成されたものしか使って来なかったので、 Cassandraレベルのプログラムで「公式が大幅に間違っている可能性があるものを動かす」というのは初めてでした
無論自分が間違って自分で産んだエラーを直すのはしょっちゅうなのですが、普段使わない→どこが間違っているのか見当がつかないということで解決に2日ぐらい使いました。(南無...)

インターン6日目ぐらい

作成したパッケージを使って試験用にCassandraクラスターを2つ作成します。
Cassandraは分散データベースなので複数のノードが連携して動くのですが、ここでも結構手こずりまして残り1個が入らなかったり再起動したら余計なファイルが残ってて動かなくなったりと難しかったです。普段複数のサーバーを連携させて一つのアプリケーションを動かすという経験をあまりしていなかったので、分散システムの難しさと面白さがありました。
また手作業で環境構築してると4台目ぐらいからミスり始めるので自動化必須ということも学べました。
手順が構築できた後はもう一人のインターン生のKさんが自動化してくれました。(ありがとう!)

インターン7日目〜9日目ぐらい

クラスターに負荷をかけて性能試験をしました。
メンターさんに用意していただいた可視化ツールに新機能の試験に有用そうな要素を追加したりしながら試験データを取っていきます。
試験を始めてからクラスターのStreamingが中々動いてくれなかったり、新機能を動かすとテストツールが新機能に対応していなくて使えなくなったりとトラブルの連続でした。いや、リリース前のコードって難しいですね。
悔しいのですが予定していた分の試験を全て終えることが出来なかったです。
ただ、メンターさんにアドバイスを頂きながら不具合の原因を探って直していく過程や限られた時間で目標を達成するためにどうするかKさんとも一緒に考えたりするのは普段一人で研究している時にはやらないことなので学ぶことが多かったです。

10日目

最後にデータベースチームの方々や人事の方など社員の方々の前で成果発表をさせて頂きました。
個人的には最終目標である全てのテスト実施やOSSへのフィードバックを達成できなかったことなどもあり「ううん...(><)」と思っていたのですが、
リリース前のコードのデバッグなど達成できた部分まででかなり評価していただきとても嬉しかったです。(いや悔しいんですけどね!)

社内環境

とても良いです。インターン生はMacBook Pro15インチスペック盛り盛りのとモニタを貸してもらえました。
オフィスもすごく綺麗で椅子とか机とか色々な形のがありましたし(よくIT系の企業で見かける机の高さを変えられるやつとかもありました)、芝生エリアとかあって面白かったです。
ご飯も朝昼晩やっているので最後の3日ぐらい三食全て会社で食べてました←

タイトルなしのコラージュ (1)

社食美味しいです。
社内でのサークル?も運動系、文化系色々あるようで夜食堂の一部エリアで集まってるのはもしかしてそういうのかな楽しそう...と遠くから眺めてました。

あとデータベース部門の別のチームのインターン生の方々と一緒に中華料理屋さん(写真撮り忘れた)とビルに入ってる美味しいところにも連れて行ってもらいました。

画像4

1on1&他のチームの社員の方との交流

インターン中希望すると興味のある分野のエンジニアさんと1on1でお話を聞くことができます。私は将来の分野を決められていないこともあったのでバックエンドとフロントエンドのエンジニアさん一人ずつと1on1させていただきました。

また、NoSQLだけでなくOracleデータベースチームの社員の方からもお話を聞くことができNoSQLの外側からも知識が補強されて良い感じでした。

懇親会

最後終わった後に他のチームのインターン生も一緒に懇親会をしていただきました。ケーキとかクイズ優勝者に分けてもらったパフェとか美味しかったです!
( '༥' )ŧ‹”ŧ‹”

タイトルなしのコラージュ


ノベルティのトートバッグ&ボールペン&
メンターさんから頂いたDatastaxTシャツ

画像1

まとめ -分散データベース面白かった

このインターンで学ばせていただいたことは上に書いていないことも含めて凄く沢山あるんですが、一番大きかったのはバックエンド面白い!という点です。
正直このインターンに参加させていただく前は凄く狭量な考え方で失礼なんですが、「バックエンドってサーバーセンターでせっせとセッティングとかするお仕事かな...」とか思っていて今回のインターンでそれが180度変わりました。

インターンの課題をするにあたってデータベースの知識はもちろんなんですが、ネットワークとかOSとかCS全般の知識を広く持っていないと問題が解決できなくて、とても広く深く考えなければいけないことが多いです。
つまるところ、エンジニアの知識と技術力がかなり反映される仕事でやりがいを強く感じました。

未だに将来何をやるか決められていないのですが(←早く決めなさいという感じですよね、でも欲を言えば人生で2、3個挑戦したいです)バックエンドについても真剣に考えてみようと思っていて、分散データベースを動かすのが面白かったので自分でもデータベース&Cassandraについて勉強を続けようと思っています。
出来なかった部分が本当に悔しいのでミニチュアCassandraクラスターをラズパイか何かで作って自分で実験するつもりです。

他にもリリース前のOSSのコード触れて楽しかったとか色々あるんですが語り続けると切りがないのでこの辺で止めておきます笑

お礼

Yahoo Japanは社内環境も素晴らしいですし、運営しているサービスが大きいのこともあり使わせていただけるリソースやプロジェクトの規模が大きくエンジニアにとって素晴らしい環境だと思います。後強いエンジニアさん沢山だと思うんですけど教えてもらえるときとても優しいです...もう2週間ぐらい居たかった...

(あとRDBの知識もあったからこそ対比でNoSQL理解できたところがあるので授業って大事ですね。先生ありがとうございました。)

インターンを組んでくださった人事の方々を始め1on1や説明会をしてくださった社員の方々、データベースチームの皆様、一緒に作業してくれたKさん、夜ご飯一緒に食べてくださった方、そして誰よりもお忙しい中付きっ切りで教えてくださったメンターさん、コーディングしてる時も雑談してる時もとても楽しい2週間でした!ありがとうございました!

後日

Cassandraのパッチとpull requestを作ってCassandraコミュニティに投げた。
果たしてmergeされる日は来るのか...





この記事が気に入ったらサポートをしてみませんか?