読者です 読者をやめる 読者になる 読者になる

Mercari Engineering Blog

メルカリのエンジニアブログです。技術情報を日々発信していきます。

監視だけじゃない!デプロイにMackerelを使う話

SREチームの @siroken3 です。

以前、メルカリでリリース手段としてChatOpsを採用していることを本ブログで紹介しました。今回は内部で使っている技術の一部を紹介したいと思います。

tech.mercari.com

tl;dr

  • メルカリではデプロイにAnsible使ってる
  • 毎日デプロイしつつサーバが増加/入れ替え激しいと心が削れる
  • MackerelのAPIとAnsibleを組み合わせたらハッピーになった
続きを読む

PHPカンファレンス2016で「Crowiの歩き方」という話をしてきました

サーバサイドエンジニアの @suzuki です。同僚の @Hiraku さんが「PHPカンファレンス2016でComposerプラグインの話をしてきました」という記事を書いていたので、負けじと書いてみたりしています。

似通った内容になってしまうのですが、2016年11月3日に開催された「PHPカンファレンス2016」で「Crowiの歩き方」という発表をしてきました。

phpcon.php.gr.jp

発表時の資料はこちらになります。

資料内にもありますが、Crowi というのは Node.js ベースの Wiki アプリケーションです。Markdown でページを記述できるので、イマドキのエンジニアには気持ち良く使えます。

また、ディレクトリ構造のように「/」を使った階層構造が簡単に作れるため、例えば「個人メモ」と「チーム共有情報」の領域を容易に分けることができます。

site.crowi.wiki

ソースコードは GitHub で公開されています。

github.com

今回の資料は、PHP ばかりやっていた私が、初めて Node.js ベースのアプリである Crowi に触れたときに、「あれはどこにあるのか?」や「これはどうやって直せばいいのか?」ということを試行錯誤しながら学んでいった内容を元にしています。

同じように初めて Crowi に触れる PHPer のみなさんが「この情報があれば最初の一歩は踏み出せる」という資料にしたつもりです。これが Crowi のソースコード・リーディングの手助けになると嬉しいです。

「PHPer のみなさんが」とは言っていますが、資料の一部で「Crowi が利用しているライブラリ」と「PHP のライブラリ」と対比させている程度ですので、他の言語が得意な方でも、それほど違和感なく読んで頂けるとは思っています。

Crowi を使ってみて「ちょっとここいじりたいなぁ」と思ったときに参考にしてみてください。そして、みなさんからの素敵な改修や新機能の pull request をお待ちしています!

また、Crowi のメイン開発者である @sotarok と、新米開発者である @suzuki が在籍しているメルカリでも素敵なエンジニアのみなさんからの応募をお待ちしています。合わせてこちらもよろしくお願いします!(かなり強引な締め)

www.mercari.com

ハイパフォーマンスGaurun〜メルカリの大規模プッシュ配信を支えるミドルウェア〜

SREチームのcubicdaiyaです。

今回は本ブログでも何度か紹介しているGaurunを利用したメルカリのプッシュ配信基盤とGaurunのパフォーマンスを最大化する方法について紹介します。

github.com

改めて紹介するとGaurunはスマホアプリ向けのプッシュ通知サーバです。APNsやGCMへのプッシュ通知処理をHTTP + JSONベースのAPIでラップして大量のプッシュ通知を素早く送信することができるのが特徴です。

メルカリのプッシュ配信基盤

メルカリのプッシュ配信基盤はnginxによるL7ロードバランサーとGaurunで構成されています。

f:id:cubicdaiya:20161108085250p:plain

APIサーバ(e.g. 商品の購入や発送等のイベント通知)やジョブワーカ、バッチ(e.g. キャンペーン等による一斉配信)からはGaurunが提供するHTTP + JSONベースのAPIを利用してiOSやAndroidの端末へのプッシュ通知に必要な情報(端末の種類、トークン等)を送ります。Gaurunは送られたリクエストボディを元にAPNsやGCMのプロトコルに合わせたリクエストを生成し、プッシュ通知を行います。

プッシュ通知処理をAPIサーバやバッチサーバで行わずにGaurunに中継して行うのは以下の理由からです。

プッシュ通知処理によるレイテンシの最小化

Gaurunはリクエストを受け取ったらクライアントに対して即座にレスポンスを返し、プッシュ通知自体は非同期で行うのでクライアント側のプッシュ通知処理で発生するレイテンシを最小化することができます。特にAPIサーバではユーザに素早くレスポンスを返す必要があるのでレイテンシを最小化することは非常に重要です。

一斉プッシュ配信のスループット向上

プッシュ通知のようにネットワークレイテンシが大きい処理を一斉に行う場合、単体のバッチプログラムだけで高いスループットを出すのには限界があります。なので、バッチプログラムではプッシュ通知に必要なデータをGaurunにキューイングするだけにしてレイテンシの大きい実際のプッシュ通知処理はすべてGaurunが行うようにしています。(Gaurunはある意味メッセージキューとジョブワーカーを内包したHTTPサーバとも言えます)

そして前段に配置したnginxによるL7ロードバランサでキューイングリクエストを複数のGaurunに分散させることでプッシュ通知のスループットをさらに向上させています。

続きを読む

PHPカンファレンス2016でComposerプラグインの話をしてきました

サーバーサイドエンジニアの中野(@Hiraku)です。久しぶりのブログ投稿になります。 タイトルの通りなのですが、2016年11月3日(木)の文化の日、東京都大田区産業プラザPiOでPHPカンファレンスが開催されました。

phpcon.php.gr.jp

私も「Composerプラグインを作ってみよう」というタイトルで、発表させていただきました。登壇資料はこちらになります。

当日の録画もすでにYouTubeで公開されていますので、Composerプラグインに興味が湧いてきた方はご覧いただければ幸いです。


PHP Conference2016 Track1 (2) Composerプラグインの作り方

言いたかったこと

Composerプラグインネタといえば、今年のPHPカンファレンス関西でも登壇しています。ただ、このときは基調講演というのもあり、技術の話よりもエモ成分を多めに作っていたため、肝心のComposerプラグインの作り方についての話が全くできていませんでした。

tech.mercari.com

東京のカンファレンスでは特に枠を気にせず、言いたいことを言おうというのが趣旨でした。 Composerのプラグインに対するサポート拡充は、stable版の目玉とも言うべき機能です。現在、scriptsの内容はほぼ全てComposerプラグイン化することができるようになっています。

そのため、MakefileやPhingが担っていた仕事を一部ずつComposerプラグインに切り出すことが可能になっています。 この辺はいろんな派閥があると思いますが、今後は少なからずComposerの機能を活用するようなライブラリやツールが増えていくのではないかと予測しています。

メルカリのCRMツールをKaizenした話

こんにちは、こんばんは。

サーバーサイドエンジニア(社内ではAPIエンジニアとも呼称します)の@bravewoodと申します。一部の人からはウッディと呼ばれていて気に入っております。 キャリア初期にウノウラボに大変な憧れを抱いていた身としては、ウノウの流れをくむメルカリでこうしてBlogを書くことができ感動しきりです。

さて、本日はCRMツールについてお話しします。技術的な話は少なめで、CRM周りの開発やPlanningについてざっくりとお話しします。

APIエンジニアとは

まず、メルカリ社内においてAPIエンジニアとは、商品や取引などの各種データや機能を各クライアントから呼び出すための「API」を開発することを主としたエンジニアを指します。 クライアントにはiOSやAndroidのアプリとWeb、その他複数のサブシステムがあり、各担当のエンジニアと密に連携を取り、高速かつ安定したAPIを開発・維持することが役目です。 私はこれまで主に、プロモーションやUS向けの機能の開発、CRMツールの開発、Web版の開発などを担当してきました。

今日はそのうち、内製CRMツールについてPostします。

続きを読む