サーバー負荷分散のノウハウをメルカリでも活かす
メルカリではサーバー、ネットワークなどのインフラの運用と同時にバックエンド部分の開発も担当しています。
メルカリのサービスが始まって1年以上が経ちました。ユーザーの取引数が増えるにつれて、サーバーの負荷も伸びています。私が入社したのは、2014年8月ですが、その時点から比べても伸びがすごい。負荷に応じてサーバーを増強するとともに、増強しやすい仕組みをつくることが大切だと思っています。同時に、負荷分散の仕組みもしっかり設計しなければいけません。
サービスインの当初はアプリを早くリリースすることに集中し、サーバーの対応は次の課題だったと聞いています。負荷が増えるにつれて、サーバーの分散、データベースの分割などを行い、現在のメルカリのサーバー構成は早くも第3世代を迎えています。サーバー増強のプロセスはWebサービス企業の一般的な流れに沿うものですが、その展開のスピードが速いのがメルカリの特徴です。
もちろん、当初からサービスの成長を見込んでサーバーに厚めの手当てをしておく、という考え方もあったかと思います。しかし、小さなスタートアップですから、最初から大規模なサーバーリソースを確保することは、経営的な視点でみるとベストではないでしょう。常にコストとパフォーマンスを考えながら、柔軟に発展させていくことのほうが大切です。
負荷分散では、汎用的な分散型メモリキャッシュシステム、memcachedを活用しています。データとオブジェクトをメモリ内にキャッシュすることで、DBからの読み出しを低減させる仕組みで、Webサービスではよく使われるものです。
私も前職のミクシィでmemcachedサーバー構築などに取り組み、一度、サーバーの大規模障害が起きたときには、その解析を通してmemcached自体のバグを突き止めたこともあります。
私はミクシィでは「たんぽぽグループ」で仕事をしていました。開発工程の改善やパフォーマンスチューニング、アルゴリズムの改善といった共通課題を抽出し、それを解決する専任のエンジニアリング・チームでした。ミクシィのものづくりの思想を最もよく体現する部署でした。
ミクシィには7年間いましたから、Webサービス運用についてここで得たノウハウは計り知れません。自分のエンジニアとしての成長もそこで得られました。あらためて感謝すると同時に、それが今の仕事にも活かされていることを嬉しく思っています。
あえて専用サーバーを選ぶという決断
メルカリのサーバーは、今ほとんどが国内データセンターにおいた専用サーバーです。最初はクラウドサーバーも使っていたのですが、今は高性能が必要とする箇所を専用サーバーに切り替えようとしています。DBサーバーは最初から専用サーバーでしたが、今は他のサーバーも順次専用サーバーに切替中です。
昨今の傾向として、クラウド活用の方がコスト的にもパフォーマンス的にもリーズナブルである、という考え方が強いと思いますが、私は必ずしもそうは思わない。
クラウドでは物理サーバー上で複数の仮想サーバーを立ち上げて利用するサーバー仮想化技術を使いますが、柔軟なサーバー運用が可能である一方で、仮想化のオーバーヘッドから生じる性能の低下は否めません。運用側からみるとスペック通りのパフォーマンスが必ずしも得られないことがあるのです。これは大規模Webサービスを運用したことのあるエンジニアなら、みな気づいていることだと思います。
今は専用サーバーの価格も以前に比べ大幅に安くなっていますし、費用あたりの性能も高くなっている。運用の手間自体はそう変わらないので、コストパフォーマンスを検討した結果、メルカリでは専用サーバー活用という方針に踏み切りました。
ただし専用サーバーの場合はクラウドと違い、不必要となった時に簡単に捨てることはできないので、今後のさらなるサービス規模拡大時に無駄とならないように転用先もある程度検討しておく必要はあります。
もともとメルカリのインフラチームにはそういう思想があり、ちょうど私が入社した頃に大規模な切り替えを実施しました。
もちろん、サーバー技術も急速に進歩しています。クラウド技術も然り。今は専用サーバーに収めているものを、またクラウドに預けるという逆の流れがあるかもしれない。大事なのは、技術の発展を見越しながら、柔軟に設計しておくことだと思っています。
最前線で技術に触れるからこそ、いつまでもスペシャリストでいられる
メルカリに入社してサーバー周りのソースコードを拝見して、ものすごくきれいなので驚きました。個人的な経験からPHPにはあまりいい印象をもっていなかったのですが、コードは言語ではなく書く人によって大きく左右されるんだということを実感しました。最初のコードがきれいだと、後々の拡張やメンテナンスはずっと容易になります。
私は5人いるバックエンドのチームの中でも年齢的にはベテランです。ただ、サーバー技術は年々進化しているし、今私たちが使っている技術もここ5年以内に出たものばかり。ハードウェアもネットワークの性能も日々向上しているから、そこに付いていけないと、単に年を食っているだけでは自慢になりません。
常に最前線で技術に触れていなくてはならないし、逆にそれができればいつまでもスペシャリストでいられると考えています。
良いスタートアップの雰囲気を体験できるのは嬉しい
メルカリに来てすぐ気付いたことは、エンジニアがサーバーサイドもクライアントサイドも全体を見ていて、縦割り組織の弊害がないことでした。社内は活気に溢れ、みんな自分たちのサービスを愛している。ミクシィの初期のころの雰囲気と似ているなと思いました。そんなスタートアップの雰囲気を、この年齢になってもう一度体験できるというのは嬉しいですね。
インフラのエンジニアは、例えばサーバーの負荷のグラフを見ながら、その小さな凸凹に障害の予兆を感じ取ったり、その原因を究明できることが必要です。未知の状況に陥ったとき、原因を解明するための冷静な調査力や、仮説構築や検証するノウハウも欠かせません。結果的に障害の原因を究明できたときの快感が、私たちを生き生きとさせ、社内に活気を生むのだと思います。
また、同時にこれからは柔軟に無理なくサービスを成長させる仕組みをつくるフェーズでもあると思っています。サーバーが安定して動き続けるためのノウハウの共有、作業手順の標準化や自動化も課題です。そうやって、サーバーサイドからメルカリのサービスを支えていきたいです。
メルカリのエンジニア一同から、CodeIQユーザーに挑戦問題!
メルカリの第一線で活躍するエンジニア集団からの出題です。
腕に覚えあるエンジニアの皆さんは、ぜひ挑戦を!
サーバソフトウェアの設定ファイル設計
問題はこちら⇒与えられた要件を満たすHTTPサーバの設定ファイルを設計しよう!
株式会社メルカリ
森本 茂樹氏
奈良工業高等専門学校を卒業後、大阪のソフトハウスを経て、ヤフーに勤務。2007年にミクシィに入社し、社内でも優れた技術力を持つメンバーを集めた「たんぽぽグループ」のコアメンバーとして活躍。2014年8月にメルカリに入社。
自分の書いたコードを誰かに評価されたいエンジニアは、けっこう多い?
ITエンジニアのための実務スキル評価サービス『CodeIQ』で出題されている「コード銀行」問題に挑戦すると、あなたのコードが評価されます。
評価(1)出題者からの評価 ⇒評価フィードバック例を見る
- 企業ではたらくという観点からあなたのコードをチェックします
- フィードバックされた観点をふまえてコードを書くと世の中の企業にとって「いいコード」が書けるようになります
評価(2)企業からの評価 ⇒評価フィードバック例を見る
- 「あなたと一緒にはたらきたい」という企業からスカウトが届きます
- あなたのコードが社会でどこまで通用するか、リアルな評価が得られます
興味を持った方はこちらからチャレンジを!