タグ

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

  • Terraform CIでのコード実行制限 | メルカリエンジニアリング

    記事は2022年5月19日に公開された記事の翻訳版です。 この記事は、Security Tech Blog シリーズ: Spring Cleaning for Security の一部で、Security EngineeringチームのMaximilian Frank(@max-frank)がお届けします。 背景 メルカリでは、複数のチームで多数のマイクロサービスを開発しています。また、コードだけでなく、サービスの実行に必要なインフラのオーナーシップは、それぞれのチームが持っています。開発者がインフラのオーナーシップを持てるように、HashiCorp Terraform を使用してインフラをコードとして定義していて、開発者は、Platform Infra Teamが提供するTerraformネイティブリソースまたはカスタムモジュールを使用して、サービスに必要なインフラを構成できます。こ

    Terraform CIでのコード実行制限 | メルカリエンジニアリング
    wata88
    wata88 2023/06/21
  • OAuth2の次に来ると言われる認可プロトコルGNAPとはなにか | メルカリエンジニアリング

    Merpay Advant Calendar 2020、23日目の記事は、趣味で認証認可をやっている @nerocrux が送りいたします。 最近 GNAP という認可プロトコルのワーキンググループドラフトが出ていて頑張って細かく読みましたので、(次回はいい加減に仕事でやってることについてお話しますが)今回はその GNAP について紹介させてください。 GNAP とはなにか? GNAP は Grant Negotiation and Authorization Protocol の略で、認可のプロトコルです。Justin Richerさんという方を中心に策定しています。作者によると、GNAP の発音は げなっぷ になります。 認可(Authorization)プロトコルと言えば、OAuth 2.0 (RFC6749) が広く知られ、運用されています。GNAP は OAuth 2 の後継とし

    OAuth2の次に来ると言われる認可プロトコルGNAPとはなにか | メルカリエンジニアリング
  • 「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。稿は Merpay Tech Openness Month の11日目の記事です。 「プログラミング言語Go完全入門」の期間限定公開のお知らせでも書いたように、メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに8回開催し100人以上の方に参加していただきました。 また、Gopher道場の動画や資料はGopher道場 自習室として誰でも利用できるようになっており、現時点で300名以上の方が利用されています。 Gopher道場の資料のベースになっている「プログラミング言語Go完全入門」は、2020年7月31日までの限定公開になっていましたが、日より公開期限を撤廃し、完全公開することになりました。 また、日8月31日から始まる「Online Summer Int

    「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング
    wata88
    wata88 2020/09/01
  • どのようにPlatformチームの組織変更をしたか | メルカリエンジニアリング

    Platform チームの@deeeeeeeetです. Platform チームは2年前にMercariがMicroservicesの移行を始めたときに一緒に立ち上げられたチームです.Platform チームはMicroservicesを動かすための基盤や開発や運用のためのツールセットなど提供しています.立ち上げ時は自分を含めて2-3人で始まったチームですが2年が経ち10人を超えるチームにまで成長しました. チームのメンバーが増えるほど1チームとして動くには限界がきており,またMicroservices化が進めば進むほどチームの負う責任範囲も広くなりCognitive load (認知負荷) も高くなっていました.これらの課題を解決するために組織変更を行い,Platform チームを複数の専門性に特化したチームに分割しました. 記事ではチームのデザイン,チームが分離しても独立性を保ちつつ

    どのようにPlatformチームの組織変更をしたか | メルカリエンジニアリング
  • 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移行 | メルカリエンジニアリング
    wata88
    wata88 2020/06/02
    k8sやる上でこれが出来ないとついていけないって思ったところ
  • マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング

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

    マイクロサービスにおける決済トランザクション管理 | メルカリエンジニアリング
  • Apache Avro に入門した | メルカリエンジニアリング

    この記事は MERPAY TECH OPENNESS MONTH の 1 日目の記事です。 メルペイでソフトウェアエンジニアやっている @syu_cream です。 メルペイバックエンドシステムにおけるデータ・ログ収集と活用を促進するためのシステム DataPlatform仕事をしています。 記事ではこの DataPlatform で用いているデータフォーマット Apache Avro について、簡単な紹介とメルペイにおける導入背景、そして利用事例を示していきます。 ビッグデータ処理基盤においてフォーマット選定は頭を悩まされる課題かと思います。 ログフォーマット選定やスキーマ管理について、少しでもなにか得られるものがあれば幸いです。 Apache Avro の簡単な紹介 Apache Avro はデータがバイナリエンコードされる、軽量で柔軟なデータフォーマットです。 筆者としては B

    Apache Avro に入門した | メルカリエンジニアリング
    wata88
    wata88 2019/05/29
    avroに対してprotobufとmsgpackを挙げるのは???だけど、相互変換を楽にしたいのはわかりすぎる
  • バッチプログラムの運用と監視について検討しよう | メルカリエンジニアリング

    こんにちは。メルペイでバックエンドソフトウェアエンジニアをしている id:koemu です。 バッチプログラムのお話、今回は運用・監視についてお話したいと思います。当社はすべての業務が24時間行われていますので、システムがオンラインのときに動作するバッチプログラムについてのみ議論します。 過去の記事はこちらにあります。 運用に備えて バッチプログラムの運用について、「プリモーテム」「実行管理」そして「ログ管理」の3点について述べていきます。 プリモーテム ポストモーテムという言葉を聞いたことがある方はいらっしゃるかと思います。ポストモーテムとは、GoogleのSREの15章*1によれば、障害などの失敗を振り返り、今後に活かすプロセスの総称と捉えることができます。 さて、プリモーテム(プリモータム)とは何でしょうか。この言葉は、私が最近読んだThe Manager’s Path*2*3で使

    バッチプログラムの運用と監視について検討しよう | メルカリエンジニアリング
  • バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング

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

    バッチ処理の採用と設計を考えてみよう | メルカリエンジニアリング
  • 僕たちはどうマイクロサービスのログを収集するのか | メルカリエンジニアリング

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

    僕たちはどうマイクロサービスのログを収集するのか | メルカリエンジニアリング
  • Docker × Android エミュレータで、自動テスト(Appium)を並列化・爆速にする環境を作ったお話 | メルカリエンジニアリング

    Docker × Android エミュレータで、自動テスト(Appium)を並列化・爆速にする環境を作ったお話 これは Mercari Advent Calendar 2018 10日目の記事です。 こんにちは、メルカリの自動化&品質保証グループ(Automation & QA Group:通称AQA) の 根 征 です。 私は普段、テスト自動化・CI / CD 改善・その他社内の生産性を上げるための自動化を行っています。 今回は、Android・Appium の自動テストを 20~30台のエミュレータで並列実行できる 環境を作成したので、その試行錯誤についてお話したいと思います。 これまでの Android 自動テスト環境とその課題 Docker-Android クラウドでどう実行させたか 仮想マシンの入れ子(Nested Virtualization) を有効にする ベアメタルイン

    Docker × Android エミュレータで、自動テスト(Appium)を並列化・爆速にする環境を作ったお話 | メルカリエンジニアリング
    wata88
    wata88 2018/12/10
    safariで開くとwantedlyにリダイレクトされるんやけど、おれだけ?
  • エンジニアリングマネージャーとソフトウェア設計者に共通するスキルを考えてみた - Mercari Engineering Blog

    @hidenorigotoです。現在はメルカリJPのBackendチーム全体のマネジメントをしています。以前のキャリアではマネジメントもやっていましたが、どちらかと言えば1人のエンジニアとして、ソフトウェアの設計と数多く向き合ってきました。その過程で、良い設計を生み出す設計者は、どのようなスキルを持っているものなのかと疑問を持ち、アレコレ考えることがありました。 今、メルカリでマネージャーとして仕事をする中で、この疑問は次のように形を変えました。 「マネジメントが上手いマネージャーはどのようなスキルをもっているのだろうか。」 そして、私の中で1つの仮説が浮かびあがってきました。それは、「良いソフトウェア設計者」と、「良いエンジニアリングマネージャー」には、仕事をより良く遂行するためのコアなスキルとして共通する部分がある、というものです。 ソフトウェア設計者の仕事 ソフトウェア設計は、1つの

    エンジニアリングマネージャーとソフトウェア設計者に共通するスキルを考えてみた - Mercari Engineering Blog
  • マイクロサービスチーム編成のベストプラクティスとメルカリでの構想 - Mercari Engineering Blog

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

    マイクロサービスチーム編成のベストプラクティスとメルカリでの構想 - Mercari Engineering Blog
  • プロダクトのリリース前から新ダッシュボード「Looker」の導入に踏み切ったわけ | メルカリエンジニアリング

    こんにちは。メルペイのデータアナリストチームです。 メルペイはプロダクトの開発フェーズにあり、リリースに向けて全社で頑張っています。 「プロダクトがないのに、データ分析?」と思う方もいらっしゃるはずなので、メルペイのデータアナリストの業務と、力を入れているダッシュボードツール「Looker」の活用について紹介させて頂きます。 Lookerの公式ページはこちら プロダクトがないフェーズでの仕事 Lookerの話をする前に、まずは私達の状況を簡単に説明します。 分析チームを抱える企業は沢山ありますが、「プロダクトができる前から活動しているケース」は少ないと思います。 そういった意味では、私達のチームは他の会社と比べてユニークなポジションになっています。 一言で言えば「事業を作るための分析」を行っています。 メルペイの事業が成り立つには「良いプロダクト」を作り、「ステークホルダーとの関係」を築き

    プロダクトのリリース前から新ダッシュボード「Looker」の導入に踏み切ったわけ | メルカリエンジニアリング
  • 分散ファイルシステムはブロックチェーンの夢を見るか | メルカリエンジニアリング

    今年からメルカリでもMercari Advent Calendar 2017と称してAdvent Calendarを始めることとなりました。 初日は id:stanaka / @stanaka がロンドンよりお届けします。 分散ファイルシステムという言葉を聞くと、トラウマを刺激され、うっと頭を抱える人も多いかと思います。私もその一人で、以前にPBクラスまではいかずとも数TBのHDDを数百台並べたシステムのお守りをしたことがあり、日々壊れ続けるHDDに負荷に悲鳴を上げるメタデータDBなどネタには困らない状況でした。そういう時にAWS S3を触ると、「ああ、これは天国だ..」ともはや過去には戻れない思いをしたものです。 最近では分散ファイルシステムを運用しているところもめっきり減っていて*1もう過去の分野かな、と思っていたのですが、ここ数年で「ブロックチェーン x 分散ファイルシステム」という

    分散ファイルシステムはブロックチェーンの夢を見るか | メルカリエンジニアリング
    wata88
    wata88 2017/12/03
    面白い
  • 主要データベースの増え続けるdisk容量の対応事例 | メルカリエンジニアリング

    こんにちは、SRE の @masartzです。 今回は最近取り組んだ、メルカリの主要データベースの容量削減のお話をしようと思います。 TL;DR 主要データベースの容量を20%以上削減しました どういう状況だったか? 何をしたか? メルカリでは2017年11月現在、出品数は1日100万件を超えています。 なので、単純に日々多くのデータが増えていっています。 そのためデータベースのスケーリングは常に検討し、取り組まなければならない課題です。 今回扱ったデータベースはいくつかあるデータベースの中で商品テーブルを持つ、メルカリの主要データベースになります。 増え続けるデータに対応するための、テーブル分割を変則的な形で対応したのでその過程を紹介します。 前提:データベース分割方法 メルカリのデータベースには 会員情報や商品情報など、基要素となるデータから、通知やお知らせメッセージなど付加的な機能

    主要データベースの増え続けるdisk容量の対応事例 | メルカリエンジニアリング
    wata88
    wata88 2017/11/30
    移行中の考慮ポイントがすごく勉強になった
  • CDN切り替え作業における、Web版メルカリの個人情報流出の原因につきまして - Mercari Engineering Blog

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

    CDN切り替え作業における、Web版メルカリの個人情報流出の原因につきまして - Mercari Engineering Blog
    wata88
    wata88 2017/06/23
    なるほどなーっとなる
  • 3つのnginxをうまく使い分けよう〜nginx、OpenResty、Tengine〜

    OpenRestyはnginxのほかにngx_luaをはじめとするCで書かれた各種サードパーティモジュールとngx_luaのAPIを利用したrestyモジュール、そしてLua/LuaJITで構成されています。 OpenRestyに含まれているnginx自体は家のnginxと基同じなので、別にOpenRestyを利用しなくても自分でngx_luaを組み込んだり、サーバ上にrestyモジュールを配布することで似たような環境を構築することは可能ですが、OpenRestyであれば主要なモジュールやライブラリが./configure、make、make installの一連の流れですべてゴソッとインストールされますし、OpenRestyのconfigureスクリプトはnginxのconfigureスクリプトを継承したものなのでnginxのconfigureオプションをほぼそのまま利用することもで

    3つのnginxをうまく使い分けよう〜nginx、OpenResty、Tengine〜
    wata88
    wata88 2016/05/26
  • 大人のスタートアップは大人のリリースができる。そう、ChatOpsならね。 | メルカリエンジニアリング

    このブログをご覧のみなさま初めまして。@siroken3です。メルカリではインフラチームに所属しており、リリースの仕組み構築を担当しています。 メルカリのリリースについて メルカリではカスタマーサポートから受け取る改善要望、プロダクトとしてまだやれてないことなど多くのタスクがあり現在も継続して開発とリリースが行われています。 Issue管理はRedmine、ソースコードのリポジトリはGitHub privateを使用しています。Pull Request(以下PR)でのコードレビューを実施、masterブランチへマージされたものをリリースするのが基的なフローです。 一方、1年前まではリリース頻度は週1回のリリース日を決めて実施していましたが、この1年で大きく変わりました。現在では日版とUS版を合わせて10回〜30回/日の頻度でリリースしています。この記事では大きく変わったメルカリのリリー

    大人のスタートアップは大人のリリースができる。そう、ChatOpsならね。 | メルカリエンジニアリング
  • 1