Help us understand the problem. What is going on with this article?

mercari.go #5 参加メモ

More than 1 year has passed since last update.

https://mercari.connpass.com/event/112831/

Go in Corporate Solutions Engineering @fivestar

PeopleProduct(人事)
AccountingProduct(会計、経理とか)
Communication&knowledge(Wikiメンテ)

PeopleProduct(人事)

Teams(人事DB)
Reviews(人事評価システム)
Benefits(インセンティブマネジメント)

Frontend / Backend
Frontend: React + Redux
Backend: Go RESTAPI

担当領域: ある程度流動的
技術領域: 一通り触る

Frontend/Backendそれぞれアーキテクトが1人
一部TechLeadのロールを兼務
プロダクト横断でアーキテクチャに責任を持つ
コードもめちゃくちゃ書く

Dev/Day

月に1度、2日に渡って技術的課題解決に注力する
リファクタリングやドキュメンと作成など
PMではなくエンジニアがオーバーシップを持つ
EngeeneringManagerも参加

Backend基本構成

Go製のAPI
インフラ
メルカリのMicroserviceプラットフォーム
MySQL

Backendアーキテクチャ
RESTAPI
EntryModel
Repository
Service
Clean Architectureぽく

RESTフレームワーク

オレオレフレームワーク
BEAR.Sunday respected
HandlerをResource単位を管理
HALフォーマットをサポート

オレオレフレームワーク

Reource志向ハンドラ
On{HttpMethod}ハンドラー
ViewModel JSON定義はこちら
resource.Base State管理

使ってるモジュール

APIRoleの仕組みを導入 -> TeamsIAM
データ暗号化基盤の導入
Slack通知の仕組みをCloudFunctionを用いて実装
Benefitesリリース

技術的課題

ORM導入せずSQLをベタ書き
カラム追加時など、ソースコードの変更箇所が多いため、効率的にスキーマ変更が多い
テストの書き方が統一されていない
testifyが導入された...testingパッケージで十分だと思っている
モックどうするか
バックエンドも肥大化しつつある
アプリケーションドメインごとにコードをわけたい
Goのスペシャリスト不在、本体側の人たちと交流したい

俺たちのmicroserviceはまだ始まったばかり @kokukuma

マイクロサービス化の現状

プラットフォームが共通機能の準備

gatewayサービス、テンプレートサービス、プロダクションレディチェックリスト
モニタリング、エラーレポーティング、Oncall対応

バックエンドチームが既存機能のマイクロサービス化を実施

API単位で進められている
MercariAPIの互換性を保ちつつ、既存ロジックを分割...

サービスについて

GCPに置かれている
DBにつなぐ必要があるサービスはSakura(石狩)に置かれてる。
現状、Client(APIの種類)と、DBは変更されていない

チームについて

1サービスにバックエンドエンジニアが1,2人
QA、Client、SREは含まれていない。まだFeatureチームにはなっていない
物理的な距離は近い

開発、運用プロセスについて

開発、デプロイは各サービスで独立している
QAやリリースはAPI単位で実行している状況
運用プロセスは実質まで未経験、準備はしているという感じ。

コード/データについて

コードは、各チームにもっている
共通して使用するPackageはある
marcariのDBに関しては1テーブルには1オーナー

サービスの数増えすぎてしまう問題

1つのAPIで、10−20テーブルを利用する
最初からすべてを分割すると...
mercari DBをつなぐマイクロサービスを作った -> Legacy db service

Legacy db serviceとは

mercariのDBに対するCRUDを提供

一時的対処 -> 分散モノリスを助長する危険性がある
一時的なものにするために...
アクセス出来るテーブル/テーブルを制限
シンプルなCRUDのみ提供
API単位でマイクロサービス化を進めたために、一気に数10サービスリリースする必要が出てきた
もし、データ側からサービスを1つづつ作っていったら、LegacyDBはいらなかったかも。

問題点と今後

サービスのQAがうまく回っていない
* QA環境が安定していない
* 低コストでQA環境を準備出来ない

Keep watching and extending features of gRPC @kazegusuri

https://github.com/grpc/grpc-go
https://github.com/grpc/proposal
https://grpc.io/docs/

mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away