PHPからgoへの移行で分かったこと
機材トラブルで開始が遅れる
2019/12/1 11:50
https://www.youtube.com/watch?v=utzlTnioIzw
自己紹介
最近はメディアに力を入れている
メディアグループ
新宿移転、190名収容できる勉強会スペースあります
松屋自販機で24h行うどん食べられるいいのかわからないしくみ
機械学習システム
LIMIA
アプリを起動すると記事が見られる普通のメディアサービス
移行前のシステム構成
EC2のうえにgpmがのっている
ストレージはMySQL, Dynamoとか
なぜ移行するのか?
Fuel PHPの更新が芳しくないから
開発が活発なLaravelにいこうとしたけど
コンテナ化を考えていたので得意そうなGoにAPIをいくつかのせかえた
技術選定
gRPCにした
NLB経由でgoにアクセス
ハマリポイント
go, phpの両方からmemcacheを触っている
キャッシュを待っている
memcache clientのライブラリ違うので、別nodeに取りに行く
phpでキャッシュを消すが、goのプロセスは状態を保持し続けるので反映されない
どうしたか?
memcacheへGatewayするgolangのECSサービスを作ってゴリ押し解決
MySQL/memcacheへのアクセスをgoに移行したい
goやめるか全部やるかの2択になった
PHPerしかいなかったのでGo勉強した
文法を自習
システム構成座学で1h 2week
10時間ぐらい勉強すると書こうと思えばかける
テストがコケる
PHPUnitで結合テストを書いてる
DBまでアクセスする
後ろに前述のgolangのマイサーがないのでこける
テスト用にESCサービスとか立てたくない
どうした
docker composeで開発環境を作ったのでjenkinsで動かそうとした
Jenkinsの鍵管理でハマった
はやくてよくわからなかったkadoyau.icon
多重にsshするときの問題?
推薦システムの移行もした
Pythonで書いていたのをgolan化してしまおうとしている
記事の特徴ベクトルをつくって、距離が近いユーザーに配信
記事の単語の名刺をDynamoにぶちこみむと、word2vecとかでvector化。単語ごとにvectorができるので平均を取った
ユーザのvectorは最近見た記事の記事から同様に作成した
キャッシュの持ち方
PHPはリクエスト単位(staticでも)
goはstaticで描くと永続化されるので意図と違って死ぬ
Goにクラスがないので戸惑った
並列数制限
PHPでバッチをsystem()かなんかで並列化していた
pthreadsみたいにしておかないと勝手が違ってハマる
コンテナサイズが1/10になった
つかってないものも含まれていたからかも
goコンパイルエラーになってくれて嬉しい
新しいのでモチベーションが上がる
改めてわかったPHPの良さ
標準関数が充実
goにないshuffleとかexplodeとか自前で描くの面倒
FWが充実
ginは使っても使わなくても…みたいな感じ
Laravelいいよね
採用が辛い
gopherがいない
PHPの1/100
グリーはPHPerばっかり
見つかったても、「なんとかPayからオファーいただきました」と断られてしまう
まとめ
WebはPHPで書いたほうが早い
学習システムはPythonで書いたほうが早い
安定的なシステムならgolanが早い
この発表をなんでGoConではなさずPHPConなのかというと、諦めてちょっと戻そうかなと思っているから
Chatworkみたいに5年間頑張る気力が持てない感じ
懇親会とかで教えてほしい
We are hiring