Edited at

mercari.go #5 参加メモ

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/