タグ

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

  • Chrome DevToolsを用いたメルカリWebのパフォーマンス計測 - Mercari Engineering Blog

    フロントエンドチームの @urahiroshi です。Mercari Advent Calendar 2018 12日目を担当します。 今年の8月から12月にかけて,メルカリ・メルペイのフロントエンドチーム有志で「超速!Webページ速度改善ガイド」の社内輪読会を行いました。 このの中で,「推測するな,計測せよ」という言葉が紹介されていますが,今回の記事は,輪読会で学んだことのまとめとして,Chrome DevToolsを用いてメルカリWebのパフォーマンス計測と簡単な分析を行ったものです。 なお,現在メルカリWebのアーキテクチャを刷新するための開発が進んでいるため,ここで計測したパフォーマンスの値は大幅に変化していく可能性が高いです。アーキテクチャの刷新後に振り返って見られる楽しみが増えることも、この記事を書いた目的の一つです。 計測方法,環境 計測はGoogle Chrome 71.

    Chrome DevToolsを用いたメルカリWebのパフォーマンス計測 - Mercari Engineering Blog
    kiririmode
    kiririmode 2024/06/09
    Chrome DevToolsのOverview、Detailセクションを用いたパフォーマンス測定、プロファイリング
  • Goでテストのフィクスチャをいい感じに書く | メルカリエンジニアリング

    Merpay Tech Openness Month 2022の6日目の記事です。 こんにちは、Merpay Credit Design Teamでバックエンドエンジニアをしている@youxkeiです。 テストを書く際、その前提条件としてデータベースの状態をフィクスチャとして準備して、データベースにデータを投入することがよくあります。このフィクスチャはYAMLなどの外部ファイルに書かれることもありますが、この記事ではテストコード上にGoで記述する方法を考えていきます。 この記事では、データベースはリレーショナルデータベースを想定していて、具体例として架空の図書館蔵書管理システムのデータベースを使っています。 素直にモデルを使う 多くの場合、以下のようにデータベースのそれぞれのテーブルに対してモデルが定義されています。 package model import ( "time" ) type

    Goでテストのフィクスチャをいい感じに書く | メルカリエンジニアリング
    kiririmode
    kiririmode 2024/05/25
    テスト用データセット(fixture)をGoで記述する方法について解説。モデル間の関連性を明確に表現し、Fixtureパッケージを使ってコードを簡潔に記述する方法を提案。
  • マイクロサービスチーム編成のベストプラクティスとメルカリでの構想 - Mercari Engineering Blog

    今年もMercari Advent Calendar 2018 が始まりました。初日は @stanaka がお送りします。 メルカリでは創業以来開発してきたPHPのアプリケーションから(主に)Goで実装されたマイクロサービスアーキテクチャへの移行を進めています。これまでにMercari Tech Conferenceやその他のカンファレンスでMicroservice化の意義、移行の方法、基盤となるMicroservice Platformの概要などについて様々な発表をしてきました。 現在、来年からの格的なマイクロサービスアーキテクチャでの開発に向けて、これまでのサービスの施策ドリブンのチーム編成から、マイクロサービスを軸としたチーム編成に移行しようとしています。 しかし、マイクロサービスアーキテクチャを成功させるためには、各種プラットフォームの機能を揃え、それらを利用したマイクロサービス

    マイクロサービスチーム編成のベストプラクティスとメルカリでの構想 - Mercari Engineering Blog
    kiririmode
    kiririmode 2021/10/17
    MSAに取り組む組織におけるチーム構成の考え方
  • 【書き起こし】Payment distributed transaction case study – Rui Gao【Merpay Tech Fest 2021】 | メルカリエンジニアリング

    【書き起こし】Payment distributed transaction case study – Rui Gao【Merpay Tech Fest 2021】 Merpay Tech Fest 2021は、事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りで、2021年7月26日(月)からの5日間、開催しました。セッションでは、事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介していきました。 この記事は、「Payment distributed(分散)transaction case study」の書き起こしです。 Rui Gao氏:皆さん、こんにちは。日は「Payment distributed(分散)transaction case study」というテーマで発表させていただきます。 まず、簡単に自己紹介させてください

    【書き起こし】Payment distributed transaction case study – Rui Gao【Merpay Tech Fest 2021】 | メルカリエンジニアリング
    kiririmode
    kiririmode 2021/10/05
    TCC/Sagaでの整合性担保。BLのError Handlingと異常に関するFailure Handlingを区別していて、後者は3段階の自動復旧が行える。秒単位ではリトライ、分単位ではリクエストキューへ戻す、最後がリカバリバッチ
  • マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング

    この記事はMERPAY TECH OPENNESS MONTHの15日目の記事です。 こんにちは。メルペイのPayment PlatformチームでPaymentServiceの開発を担当するエンジニアの @foghost です。 メルペイではマイクロサービスのアーキテクチャで決済システムを開発しています。その中でPaymentServiceは決済トランザクション管理の基盤サービスとして、下位層のサービス(外部サービスも含め)が提供する各種決済手段を利用して、上位層のサービス(メルカリ、NFC,コード払いなど)に必要な決済フローを共通APIとして提供しています。PaymentServiceが提供する決済処理に複数のサービスを跨いでお金の動きを正確に管理する必要があるので、作り始めた頃から決済トランザクション管理を最も重要な課題として、サービスを跨いでもデータの整合性が取れる仕組みを作ってき

    マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング
    kiririmode
    kiririmode 2021/10/05
    分散トランザクションの整合性担保方法。TCC/Sagaパターンの双方を使うとともに、トランザクションはState Machineで管理。reconcileも仕組みとして準備し、不整合を検知できるようにしている
  • 【書き起こし】メルペイにおけるSLOの活用事例 – 信頼性を定義しよう – 足立 紘亮【Merpay Tech Fest 2021】 | メルカリエンジニアリング

    【書き起こし】メルペイにおけるSLOの活用事例 – 信頼性を定義しよう – 足立 紘亮【Merpay Tech Fest 2021】 Merpay Tech Fest 2021は、事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りで、2021年7月26日(月)からの5日間、開催しました。セッションでは、事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介していきました。 この記事は、「メルペイにおけるSLOの活用事例-信頼性を定義しよう」の書き起こしです。 足立紘亮氏:それでは「メルペイにおけるSLOの活用事例-信頼性を定義しよう」ということで 、SREチームの足立が発表させていただきます。よろしくお願いします。 まず、簡単に自己紹介させてください。SREチームの足立と申します。メルペイには2019年入社で、SREチームとしてサービス

    【書き起こし】メルペイにおけるSLOの活用事例 – 信頼性を定義しよう – 足立 紘亮【Merpay Tech Fest 2021】 | メルカリエンジニアリング
    kiririmode
    kiririmode 2021/10/05
    SLIを考えた上でSLOを定義する。SLOが定義できれば、アラート条件としてもburn rate等、適切なものを選択しやすくなる。
  • Cypress + TestRail による Frontend E2E テストの効率化について | メルカリエンジニアリング

    Merpay Advent Calendar 2020 の 8 日目は、メルペイフロントエンドチーム の @tanakaworld がお送りします。 2020 年後半からフロントエンドチームと QA チーム合同で、リグレッションテストの自動化に取り組んできました。E2E テストフレームワークである Cypress でマニュアルテストを自動化し、加えて TestRail を用いてテストケース管理も仕組み化することでワークフローの整備を進めています。記事では、それらの取り組みについて紹介します。 ワークフロー改善後の全体像 リグレッションテストとは 実装を変更した結果、アプリケーション全体の振る舞いに予期せぬ影響がないかどうかを確認するテストです。メルペイではリリース前 QA の最終フェーズでリグレッションテストを実施しています。Web アプリケーションを End To End (E2E)

    Cypress + TestRail による Frontend E2E テストの効率化について | メルカリエンジニアリング
    kiririmode
    kiririmode 2021/09/19
    mercariではe2eにcypressを使用。
  • メルカリ Microservices Team による Terraform 運用とその中で開発したOSSの紹介 | メルカリエンジニアリング

    SRE で Microservices を推進している @b4b4r07 です。 メルカリでは全社 (US/UK/JP) 的に Microservices に舵を切る経営指針が打ち出されており、Microservices Platform Team では Microservices として切り出すにふさわしいサービスの再編のサポートや、新規サービスの Microservices 化のサポート、およびそのスタンダードなインフラ基盤の開発などをしています。 記事ではその中で開発した Developer Productivity の向上につながる小さなツールを、メルカリでの Terraform の活用事例に交えてご紹介します。 メルカリでの Terraform 活用 冒頭に挙げたとおり、少しずついろいろなサービスが立ち上がり始めていますが、そのインフラとして主に GCP (GKE) が使われて

    メルカリ Microservices Team による Terraform 運用とその中で開発したOSSの紹介 | メルカリエンジニアリング
    kiririmode
    kiririmode 2021/03/27
    tfnotifyを使ったterraformの結果のgithub/slack通知
  • 決済サービスを閉じるときのやることリスト | メルカリエンジニアリング

    Merpay Advent Calendar 2020の20日目は、メルペイProduct EngineeringチームのVP of Engineeringを担当しているnozaqがお送りします。 2020年はメルペイEngineeringチームとして業務しながら、一方で年初からOrigami PayというQRコード決済サービスの提供終了に伴うシステム停止業務を計画・実行してきました。サービスの終わらせ方について詳しく説明されることは中々ないと思ったので、投稿では決済という外部影響が大きい種類のサービスを終了するにあたり、どのような検討がなされたのかを事例としてお伝えできればと思います。 取り組んだこと 決済サービスはお支払いを行う一般のお客さま・お支払いを受け付ける加盟店様・システム連携している金融機関様やパートナー様など多くのステークホルダーが存在します。また店頭でのお支払い方法をご

    決済サービスを閉じるときのやることリスト | メルカリエンジニアリング
    kiririmode
    kiririmode 2021/01/01
    モバイルアプリを含めたサービス停止。モバイルアプリが対象となるためfeature toggleも利用した対応
  • DevSecOpsとは何か — 導入する組織が増加している理由 | メルカリエンジニアリング

    Mercari Advent Calendar 2020 の15日目は、メルカリ Product Security チームの Gloria Chow がお送りします。 こんにちは、Product Securityチームの@gloriaです。以前、オープンソースとして公開しているTestdeckという、マイクロサービスの自動化テストのための社内ツールについて記事を書きました。 今回は、2020年のAdvent Calendarの記事として、DevSecOpsについてお話をしたいと思います。近年、耳にする機会の多い話題の一つなので既にご存じの方もいらっしゃるかもしれませんが、DevSecOpsの基的なコンセプト、注目されている理由、よくあるチャレンジとメルカリにおけるDevSecOpsの実践事例を紹介したいと思います。 DevSecOpsとは? DevSecOps以前から提唱されているDev

    DevSecOpsとは何か — 導入する組織が増加している理由 | メルカリエンジニアリング
    kiririmode
    kiririmode 2020/12/19
    最も明確な課題は、DevSecOpsチームのエンジニアは様々な技術スキルと知識に精通している必要がある点
  • 権限をQray -SREへの一時的な本番環境権限付与のしくみ- | メルカリエンジニアリング

    メルペイSREチームの @tjunです。この記事は、Merpay Tech Openness Month 2020 の19日目の記事です。 今日は、メルペイSREチームのオペレーションのために開発して利用している Qray(クレイ) というツールの話をします。 はじめに メルペイでは、Google Cloud Platform(以下GCP)を利用してサービスを構築し動かしています。 GCPには Cloud Identity and Access Management (IAM) という権限管理の仕組みがあります。IAMを適切に管理して、アカウントに最低限の権限を付与することがクラウドサービスを安全に利用するためには必要なことです。これはSREが持つ番環境に対する権限についても同様で、できるだけ番環境に対する権限を持たないようにしておきたいのですが、障害対応など番環境でのオペレーション

    権限をQray -SREへの一時的な本番環境権限付与のしくみ- | メルカリエンジニアリング
    kiririmode
    kiririmode 2020/09/12
    本番オペレーション用の権限変更と承認のシステム。時間ベースでの権限付与便利そう。
  • メルカリエンジニアリング

    「Mercari Engineering」は メルカリのエンジニアに関する情報を、 オープンに公開・共有していくためのサイトです。

    メルカリエンジニアリング
  • SpinnakerによるContinuous Delivery | メルカリエンジニアリング

    SREの@deeeetです。 新しい機能を素早くリリースしフィードバックを得てすぐにPivotの決定を行う、もしくはリスクを抑え小さな改善を継続的に行うContinuous Deliveryはソフトウェア開発において非常に重要です。 メルカリではこのContinuous DeliveryのためのPlatformにSpinnakerを採用し始めました。現在は主にkubernetes(k8s)へのコンテナアプリケーションのDeployに利用しており、既にいくつかの番アプリケーションがSpinnakerによりDeployされています。 記事ではなぜSpinnakerを採用したか、Spinnakerとは何か、実際にメルカリでどのようにSpinnakerを使っているか、について簡単な紹介をします。 kubernetes上でのDeploy問題 k8sへのコンテナイメージのDeployは非常に簡単で

    SpinnakerによるContinuous Delivery | メルカリエンジニアリング
  • バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング

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

    バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング
  • メルカリのWeb MicroservicesにおけるSLI/SLO - Mercari Engineering Blog

    Mercari Advent Calendar 2018の24日目はメルカリBackendエンジニアの@sota1235がお届けします。 現在、私はWebのシステムをリプレースしMicroservicesアーキテクチャに移行するチームで働いています。 メルカリのMicroservicesアーキテクチャでは各Microserviceチームが責任を持ってSLI/SLOを定め、運用する必要があります。 このSLI/SLOを決める過程でいくつかの学びや難しさがあったのでそれをお話しようと思います。 SLI/SLOとは SLI(Service Level Indicator)とはサービスの品質を測るための指標です。 そしてSLO(Service Level Objective)とは各SLIに対しての目標数値です。 例えばSLIを全リクエストの50xエラー以外の割合として、SLOは99.99%とする、

    メルカリのWeb MicroservicesにおけるSLI/SLO - Mercari Engineering Blog
  • Goにおける静的解析のモジュール化について - Mercari Engineering Blog

    Mercari Advent Calendar 2018 の16日目はメルペイ エキスパートチームの@tenntenn お送りします。 この記事では、Goの静的解析の新しいムーブメントであるgolang.org/x/tools/go/analysisを使ったモジュール化について解説したいと思います。 「静的解析は関係ないや」と思って、タイトルを見てブラウザのタブを閉じようと思ったかもしれませんが、ほとんどのGopherには無関係ではないと思いますので、ぐっと我慢してしばらく間お付き合いください。 静的解析のモジュール化とは Goにはgo vetやgolintなど静的解析ツールが多数あります。 静的解析ツールを用いることで、プログラムを実行せずにバグになりうる箇所を検出することができます。 実際に、コードレビューを行う際にCIで静的解析ツールを実行している方も多いかと思います。 Goは標準で

    Goにおける静的解析のモジュール化について - Mercari Engineering Blog
  • 僕たちはどうマイクロサービスのログを収集するのか | メルカリエンジニアリング

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

    僕たちはどうマイクロサービスのログを収集するのか | メルカリエンジニアリング
  • スタンドアロンAMPのススメ

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

    スタンドアロンAMPのススメ
  • Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング

    はじめに メルペイ エキスパートチームのtenntennです。 メルカリグループでは、毎週金曜日にGo Fridayという社内勉強会を開催しています。 毎週やっているとそれなりに知見が溜まってくるので、定期的に”こぼれ話”としてブログを書こうという話になりました。 今回の記事では、先日のGo Fridayで話題にあがった非公開な機能を使ったテストについて扱いたいと思います。 なお、Goにおけるテストの手法やテストしやすいコードの書き方については、GopherCon 2017でも発表があったmitchellhさんの”Advanced Testing with Go”(スライド/動画)が参考になります。テーブル駆動テストやテストヘルパーなど非常に勉強になるので、まだ見たことのない方はぜひスライドや動画をご覧ください。 TL;DR Goのテストではテスト対象とテストコードを別パッケージにできる

    Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング
  • golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた | メルカリエンジニアリング

    こんにちは、メルカリアッテのAPIチームでGoエンジニアをしている@sonatardです。 この記事は弊社ソウゾウの社員である@tenntennが運営しているgolang.tokyo #4のブログ枠として書いています。 golang.tokyo #4では、ゲストスピーカーとしてJetBrains社のSergey Ignatov氏にご登壇いただきGoglandをライブデモ形式で紹介して頂きました。 メルカリアッテではGoogle App Engine for Go (GAE/Go) を全面的に採用しており、サーバサイドエンジニアの中でもGoglandの利用者が増えています。そこでSergey Ignatov氏に紹介して頂いた機能とソウゾウ エンジニアたちが利用しているお気に入りの機能をまとめてご紹介したいと思います。 ソウゾウがGAE/Goを採用した経緯は@ttsuruokaのatte 開発

    golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた | メルカリエンジニアリング
  • 1