ブックマーク / engineering.mercari.com (19)

  • Merpay & Mercoin Tech Fest 2023 セッション書き起こしまとめ | メルカリエンジニアリング

    Merpay & Mercoin Tech Fest 2023は、事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りで、2023年8月22日(火)からの3日間、開催しました。セッションでは、事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介していきました。 今回、より多くの方に知ってもらい役立ててもらうため、Merpay & Mercoin Tech Fest 2023の全セッションを書き起こした記事を用意しました。セッションがたくさんあるので、その記事リンクまとめを作成したのが記事です。お役に立てば幸いです。 ▼Merpay & Mercoin Tech Fest 2023 書き起こし一覧 ※各記事にYoutubeのセッション動画が埋め込まれています。 Author Session Title Keynote Shun

    Merpay & Mercoin Tech Fest 2023 セッション書き起こしまとめ | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2023/10/28
    発表まとめ。わいわい
  • ページネーションのバグを解消した話 | メルカリエンジニアリング

    この記事は、Merpay Tech Openness Month 2023 の3日目の記事です。 こんにちは。メルペイBackendエンジニアの@yushi0010です。 私が所属するPartner Platformチームでは社内向け管理ツールを開発しています。この記事では、そのツール内でのページネーションで起きたバグを解消した話を紹介します。 概要 今回のページネーションを利用していた管理ツールの検索ページでは、あるテーブルが持つカラムに対して条件を指定し、その条件に合うレコードを取得して一覧表示する機能がありました。しかし、ある特定の条件下でどれだけ次ページに遷移するボタンをクリックしてもページ遷移が行われないというバグが発生しました。 バグが起きた状況 どのようにしてページ遷移が行われなくなったのかを説明するために、その時の状況を共有します。 まず、検索の対象とするテーブルは以下のよ

    ページネーションのバグを解消した話 | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2023/06/11
    WHERE句のstatus1とstatus2は大小比較でええんかな。
  • CUEを使用したKubernetesマニフェスト管理 - メルカリエンジニアリング

    この記事は、Developer Productivity Engineering Campブログシリーズの一環として、Platform DX Teamの@micnncimがお届けします。 はじめに メルカリでは社内エンジニアの多くがマイクロサービスを開発に携わっているため、Platform Developer Experience(DX)チームは、Platform Engineeringをもって、エンジニアがビジネスロジックなどのバックエンド開発に集中できるよう、さまざまな社内プロダクトを提供しています(その概要については、前回の記事「Developer Experience at Mercari」で紹介しています) この記事では、私たちが開発してきたCUEによるKubernetesマニフェストの抽象化について紹介します。 これはKubernetesマニフェストの構成に関する多くの問題を解

    CUEを使用したKubernetesマニフェスト管理 - メルカリエンジニアリング
    tmatsuu
    tmatsuu 2022/12/04
    CUEを使用したk8sマニフェスト管理、参考にさせていただく
  • Elasticsearch運用ノウハウ | メルカリエンジニアリング

    こんにちは、メルカリMicroservices SREチームの藤(@jimo1001)です。 私は現在、Embedded SRE として サーチインフラチームに入り活動しています。このサーチインフラチームは、Elasticsearchを使用した検索基盤を管理し、様々なマイクロサービスに検索機能を提供するチームです。この検索基盤は非常に巨大なプラットフォームで、メルカリ全体のマシンリソースの高い割合を占めており、メルカリの検索を支える非常に重要なものです。私の Embedded SRE としてのミッションは検索基盤の信頼性の向上と自動化を推進することです。 今回は、メルカリの検索基盤で利用している Elasticsearch における運用のノウハウを紹介したいと思います。 Elasticsearch とは Elasticsearch は、Elastic社が開発する Apache Lucen

    Elasticsearch運用ノウハウ | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2022/03/12
    わいわい
  • 🪙 eコマースにおけるNFTの将来性 | メルカリエンジニアリング

    こんにちは! Advanced TechnologyチームのPramendraです。 Advanced Technologyチームは、世界中のビジネスおよびテクノロジーの動向を調査しています。 今回、皆さんに再び新しいレポートをお届けできるのを嬉しく思います。前回は即時配送:自律走行型配送ロボットに関するレポートをお届けしました。 ご存知ですか NFT時価総額がたった2年で10倍になりました。 NFTとは NFTは非代替性トークン(non-fungible token)の略であり、ブロックチェーンプラットフォームの技術を用いたデジタル資産です。「非代替性」は唯一無二、つまりは代替不可能という意味であり、データの複製や改ざんができません。故に、データは相互に交換することができず、オークションマーケットにファイル(例:デジタルアートワーク)をアップロードすることでNFTを発行できます。画像ファ

    🪙 eコマースにおけるNFTの将来性 | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2021/12/25
    最近の動向としてはまとまっているのかな。私自身はまだ懐疑的ですがね。
  • Mercari Microservices PlatformにおけるKubernetes Cluster移行 | メルカリエンジニアリング

    Microservices Platform Teamの@deeeeeeetと@dragon3です. Microservices Platform TeamではGoogle Kubernetes Engine(GKE)をメインのコンポーネントとして利用し,その上にメルカリとメルペイのMicroservicesを動かすための基盤を構築しています.メルカリのMicroservices化のプロジェクト自体は2年ほど前から始めており,GKEも当時に構築したものを今日まで運用し続けてきました. この2年間でGKEからは多くの機能がリリースされました.その中のほとんどはそのまま有効にすることができますが,中にはClusterを作り直す必要があるものもあります.例えばRoutes-based ClusterをVPC-native Clusterに,Zonal ClusterをRegional Clust

    Mercari Microservices PlatformにおけるKubernetes Cluster移行 | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2020/06/06
    Cluster自体をephemeralに。なるほど。
  • Google Kubernetes Engine上のGoアプリケーションでのHTTPリクエストを行う方法 | メルカリエンジニアリング

    この記事はMERPAY TECH OPENNESS MONTHの最後の記事です。 こんにちは、メルペイのバックエンドエンジニアの@gia.nguyenです。 私は第3回のGopher道場を卒業してから2018年12月に入社しました。 他の記事にも記載されましたが、メルペイのバックエンドは、Google Kubernetes Engine(以下、GKE)を使用して、マイクロサービスアーキテクチャを採用した多数のマイクロサービスから構成されています。マイクロサービスは主にGo言語を使って、開発しています。マイクロサービス間のコミュニケーションはgRPCでやり取りしていますが、外部サービスに対してはほとんどHTTPで通信を行っています。記事はGKE上のGoアプリケーションでHTTPリクエストを投げる際、いくつか工夫した点を紹介したいと思います。 TL;DR httptraceはデバッグに役立つ

    Google Kubernetes Engine上のGoアプリケーションでのHTTPリクエストを行う方法 | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2019/06/25
    知見。HTTP/2を使えば自然とDNS問い合わせが減りそうな気もするけど、現実にはそうでもないんかな。
  • mercari.go #7を開催しました | メルカリエンジニアリング

    はじめに こんにちは、mercari.go オーガナイザーの@morikuniです。 3月26日にメルカリ主催のGo勉強会 mercari.go #7 を開催しました。 この記事では、当日の各発表を簡単に紹介しようと思います。 Aggressive API caching with tag-based invalidation 1つめのセッションは @akkie による「Aggressive API caching with tag-based invalidation」です。 タグベースのキャッシュの無効化処理について話しました。 Goはにんげんよりもマルチタスクがとくいなのか? 2つめのセッションは @codechaitu による「Goはにんげんよりもマルチタスクがとくいなのか?」です。 GoroutineやWaitGroupの使い方を紹介しました。 Data Abstraction

    mercari.go #7を開催しました | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2019/04/07
    tag-based invalidation、どうやって実現してるのかとソースコード覗いてみたら、GET時もタグを全部指定するるのね。なるほど。
  • バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング

    こんにちは。メルペイで、決済・振込申請のバックエンドソフトウェアエンジニアをしている id:koemu です。 今日は、バッチ処理を行う理由について、考察を深めて設計に活かしていく話をしたいと思います。 はじめに バッチ処理とは、ある決まったタイミングで1つのプログラムが複数のデータを 一括処理 することを指します。この反対の言葉として、オンライン処理があります。オンライン処理とは、お客様の操作を初めとしたイベントをもとに 逐次処理 されるものです。OLTP(Online Transaction Processing)とも言います。 エントリでは、バッチ処理を採用するにあたり、どういったユースケースが適切なのかを整理して、今後のソフトウェアの設計の指針にできることを目指しています。今回は、「バッチ処理を採用するとき」と「バッチ処理の設計」の2つについて取り上げます。 バッチ処理を採用する

    バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2019/03/03
    いいね。Jenkins/Sidekiqなどのミドルウェアはどこまで面倒見てくれるのかをきちんと把握しておくべし。
  • 僕たちはどうマイクロサービスのログを収集するのか | メルカリエンジニアリング

    Mercari Advent Calendar 2018 の14日目はメルペイ DataPlatform チームの @syu_cream がお送りします。 記事では表題の通り、メルカリとメルペイにおける、マイクロサービスのログ収集に関する課題と取り組みについて記載します。 メルカリとメルペイでは、現在クライアントアプリやサーバサイドのログを効率的に収集してサービスの他機能で活用するための基盤の開発を共同で行っています。 メルカリ・メルペイ間では、一部提供するサービスの差異やデータ管理のポリシーの都合によりインフラ構成が異なる部分はありますが、少なくとも思想や設計、実装は共有しています。 これの具体的な内容については、今回の Advent Calendar の 3 日目の記事に掲載しています。 記事では、サービスを提供するサーバサイドアプリケーションから、この構成図における “A Ser

    僕たちはどうマイクロサービスのログを収集するのか | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2019/01/03
    選択肢ありがたや。アプリからRampへ送信なるほどやはりそうか。
  • GCPでStreamなデータパイプライン始めました - Mercari Engineering Blog

    こんにちは、はじめまして。メルカリでデータエンジニアをしている、しゅう (@shoe116)です。Mercari Advent Calendar 2018の3日目を担当することになりました。 メルカリではデータの活用が盛んな一方で、実はデータ処理を専門にやるエンジニアが最近まで存在しておらず、そんなこんなで僕がSREチームにデータエンジニア第1号としてjoinしました(実はこのあたりはメルペイのが少し先んじていて、あっちにはすでにデータプラットフォームチームがあって、僕は今彼らと一緒に並んでコードを書いている)。今日は僕らがGoogle Cloud Platform(以下GCP)に作っている、メルカリ(とメルペイ)の新しいログ収集基盤について簡単に紹介しようと思います。 メルカリの既存ログ収集基盤について 「新しいログ収集基盤を紹介しようと思います」と書いた数行後にこの章を持ってくるのは自

    GCPでStreamなデータパイプライン始めました - Mercari Engineering Blog
    tmatsuu
    tmatsuu 2018/12/30
    ふむ。pub/subへの投げ込みはfluentdではなくpub/sub client libraryだろうか。
  • pvpool〜メルカリの商品閲覧数カウントアップの裏側〜 | メルカリエンジニアリング

    メルカリでは出品されている商品の閲覧数を「出品した商品」の一覧や「いいね!した商品」の一覧画面から見ることができます。以下は「いいね!した商品」の一覧画面です。(開発版アプリの画面になります) 赤い枠で囲まれている部分がそれぞれの商品の閲覧数になります。今回紹介する閲覧数のカウントアップのバックエンドはGoで開発されています。 データベース上の商品閲覧数のカウントアップ メルカリでは日々大量のリクエストを処理していますが、そういった中でもデータベースへのアクセスはINSERTやUPDATE等の書き込み処理よりもSELECTによる読み込み処理が圧倒的多数を占めます。(メルカリでは、データベースには主にMySQLを利用していますが、サービスやリージョンによってはGCPが提供しているCloud DatastoreやCloud Spannerを利用している箇所もあります) 商品が閲覧される時に実行

    pvpool〜メルカリの商品閲覧数カウントアップの裏側〜 | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2018/03/03
    数秒以内にリアルタイム反映となるとアクセスログベースでは遅いか。POSTしてるのがitem_idsなのでまとめて閲覧数を定期的に投げてる感じか。
  • 自動交渉AIから見る"AI同士がつながる世界"

    Mercari Advent Calendar 2017の7日目です。 今回は、まだあまり知られていないAI同士の交渉についてメルカリでインターンをしている@keita0qがお話しします。 自動交渉とは 自動交渉とはマルチエージェントシステムモデルの一つであり、AI同士がそれぞれの合理性に従って合意形成を行うことを指します。 自動交渉において重要な構成要素は以下の4つです。 1. 交渉の目的 交渉の目的となる結果は、合意(Agreement)です。 交渉に参加するエージェントはその社会において個人的、社会的に満足の行く合意形成を行うために交渉します。 2. 交渉に参加するエージェント 二者の場合は二者間交渉、複数の場合はマルチパーティー交渉と呼ばれます。 各エージェントは3、4で述べるプロトコル、戦略を実装している必要があります。 3. 交渉プロトコル 交渉を行う場合にエージェントが相互に

    自動交渉AIから見る"AI同士がつながる世界"
    tmatsuu
    tmatsuu 2017/12/12
    興味深い。現実には効用値の算出がとても難しいんじゃないかと思うがどうなんだろ。
  • 「hbstudy#75 SRE大全:メルカリ編」で登壇しました | メルカリエンジニアリング

    こんにちは。SREの @kazeburo です。8月17日に株式会社ハートビーツ様が主催する「hbstudy#75」において、メルカリSREの取り組みについての発表をしてきましたので、資料を公開します。 hbstudyでは、SRE大全というテーマで、#74において先日発売となりました「SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム」の翻訳者の発表があり、また#76にてXFLAG スタジオのSREによる発表が予定されています。 発表内容 トークの時間が2時間ありましたので、前半、後半にわけて資料を作成しました。内容も多く盛り込んでおります。 メルカリがSREを採用した理由 メルカリSREチームの紹介 OnCall/運用当番について 先日のCDN変更での個人情報漏洩について PHPアプリケーションの最適化 セキュリティの取り組み(パスワード

    「hbstudy#75 SRE大全:メルカリ編」で登壇しました | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2017/08/23
    css/js/fontのキャッシュが無効なのはSet-Cookieをつけてるからかな。Varnishなのでuriがassetsならリクエストヘッダーから削除すれば解決しそう。IPレピュテーション使うの思いつかなかった。なるほど真似よう。
  • CDN切り替え作業における、Web版メルカリの個人情報流出の原因につきまして - Mercari Engineering Blog

    日コーポレートサイトでお知らせした通り、Web版のメルカリにおいて一部のお客さまの個人情報が他者から閲覧できる状態になっていたことが判明しました。原因はすでに判明して修正が完了しております。また、個人情報を閲覧された可能性のあるお客さまには、メルカリ事務局より、メルカリ内の個別メッセージにてご連絡させていただきました。 お客さまの大切な個人情報をお預かりしているにも関わらず、このような事態に至り、深くお詫びを申し上げます。 エントリでは技術的観点から詳細をお伝えさせていただきます。 2017年6月27日 CDNのキャッシュの動作について、CDNプロバイダと仕様について確認し検証を行いました。その結果一部記述に実際と異なる箇所があり、加筆修正いたしました。 概要 メルカリWeb版のコンテンツキャッシュをしているCDNのプロバイダ切り替えを行いました。 その際来キャッシュされるべきでない

    CDN切り替え作業における、Web版メルカリの個人情報流出の原因につきまして - Mercari Engineering Blog
    tmatsuu
    tmatsuu 2017/06/23
    CDNサービスを名乗っていてもサービスによって本当にバラバラでビックリした経験は自分もある。ドキュメントとヒアリングが必須。5種類ぐらい使ったことあるけど全部違った。結構厳しいよね
  • スタンドアロンAMPのススメ

    こんにちわ、@t32kです。先日、3/18に大阪で開催されたFRONTEND CONFERENCE 2017に登壇してきました。また弊社メルカリは懇親会スポンサーでした。今回は『スタンドアロンAMPのススメ』というタイトルで講演した内容をシェアしたい思います。 私が所属しているソウゾウ社ではメルカリアッテというクラシファイドサービスを作っています。メルカリは配送システムを介して売買しますが、こちらは直接会って手渡しでモノの売り買いができます。もちろん、手数料や配送料はかかりませんので、よろしかったら使ってみてください。私はそこのWeb担当で、サイトのAMP実装について話します。 今日のアジェンダです。 AMPのメリット 表現力について テンプレート分散について 構造化データについて まとめ といった内容でやっていきたいと思います。 AMPとは? まずはAMPとは何か説明します。AMPとは

    スタンドアロンAMPのススメ
    tmatsuu
    tmatsuu 2017/04/07
    「AMPドキュメントが表示されると更新リクエストされ」がよくわからなかったので原文読んだ。要はstale-while-revalidate実装。なるほど。現在のキャッシュ時間はHTMLは15秒、その他画像などは1分。
  • AMP Conf 2017へ行ってきました #AMPConf | メルカリエンジニアリング

    こんにちは、Software Engineerの @yui_tang です。 3月7-8日にニューヨークにて開催されたAMP Conf 2017に参加してきましたので、そのレポートを書きたいと思います。 メルカリでのAMPの取り組み まずは、現在までのメルカリにおけるAMP(Accelerated Mobile Pages)の取り組みについて簡単にお話します。 2016年7月にメルカリのWebサイトの一部に導入を開始し、現在AMPページには数万PV/日のアクセスがあります。 メルカリ内の商品毎のページが全てAMP対応しているため、そのページ数は相当数に上ります。 流入経路ですが、現在元ページにlink rel="amphtml"を設定しているのみで、メルカリのサービス内にAMPページへのリンクは露出していません。 よって全てが検索流入となっており、事実上ランディング用のページとして機能して

    AMP Conf 2017へ行ってきました #AMPConf | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2017/04/01
    amp-state、なんでだよ感ある。
  • nginxによるTCPロードバランサー | メルカリエンジニアリング

    SREチームの@cubicdaiyaです。今回はnginxによるTCPレイヤーでのロードバランスについて解説します。 ロードバランサーとしてのnginx nginxはHTTPやTCP、UDP等の複数のレイヤーでロードバランサーとして稼働させることができます。(TCPロードバランサーは1.9.0以降、UDPロードバランサーは1.9.13以降で利用可能です) また、ngx_http_ssl_module や ngx_stream_ssl_module を利用することでそれぞれのレイヤーでTLSを有効化することも可能です。 TCPロードバランサー用のモジュールを有効にする HTTPレイヤーでロードバランスするためのモジュールはデフォルトで組み込まれますが、TCP(とUDP)レイヤーでロードバランスするにはnginxのconfigureスクリプトに--with-stream(あるいは --with

    nginxによるTCPロードバランサー | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2016/09/14
    良い知見。メモ
  • cachectld〜無駄なページキャッシュの削除を自動化〜 | メルカリエンジニアリング

    原稿の執筆が一段落して心に余裕が出てきた@cubicdaiyaです。 今回はサーバを運用しているとありがちなページキャッシュに関する問題とメルカリのアプローチについて解説します。 Fluentdによるログ転送 話は変わりますが、メルカリの各サーバ上ではプログラムが吐いたログデータをKibanaやNorikraといった各種コンポーネントに転送するためにFluentdが稼働しています。各ログデータは原則単一のファイルに追記されてFluentdのtailプラグインによって各所に転送されていきます。 ログデータのサイズはまちまちで、1日で数GB程度のログデータもあれば数十GB以上のログデータもあります。 ページキャッシュと巨大なログファイル 各サーバに吐かれるログデータのサイズはサーバに搭載されているメモリのサイズと比べると1日分だけでもかなりの量になります。そして、このように絶えず書き込まれる巨

    cachectld〜無駄なページキャッシュの削除を自動化〜 | メルカリエンジニアリング
    tmatsuu
    tmatsuu 2015/07/19
    ほほう
  • 1