Slide 1

Slide 1 text

#RAKUSMeetup ©2021 RAKUS Co., Ltd. 新機能開発の アーキテクチャ選定 楽楽勤怠開発課 今野裕介

Slide 2

Slide 2 text

#RAKUSMeetup 今野裕介(こんのゆうすけ) ● 開発本部・第三開発部・楽楽勤怠開発課所属 ● バックエンドエンジニア ● 2020/7/1入社 ○ 前職ではレコメンドエンジンASPサービスの設計・開発・運用・ 保守を担当 ○ 現在は打刻機能をメインに新機能開発を担当 ● 趣味 ○ カメラ・城巡り

Slide 3

Slide 3 text

#RAKUSMeetup 楽楽勤怠の紹介 ● クラウド型勤怠管理サービスです ● 2020/10に初期リリース後、ほぼ毎月新機能リリース中!

Slide 4

Slide 4 text

#RAKUSMeetup ICカード打刻機能 ● 2021/2/16(火)にリリース ● 端末はPitTouchPro2を利用 ○ PCがなくても打刻が可能 ○ 工場や店舗など、PCが持ち込めない環境でも打刻が可能 ● 端末はラクスから販売したもののみ利用可能

Slide 5

Slide 5 text

#RAKUSMeetup PitTouchPro2の概要 ● 打刻(出退勤・休憩・外出)やカード登録削除が可能 ● リクエストはXHR Level2で行われている ○ 組み込みのSafariが内部で稼働している模様 ● NWに問題がある場合には打刻を再送する機能が存在する ○ 端末内部に打刻データを保存しておき、NWが再開すると再送する ● ICカードはFeliCa、Mifareに対応

Slide 6

Slide 6 text

#RAKUSMeetup PitTouchPro2外観

Slide 7

Slide 7 text

#RAKUSMeetup ICカード打刻の要件 ● PitTouchPro2端末による出勤打刻および退勤打刻ができる ● PitTouchPro2端末によるカード登録・削除ができる ○ 登録削除用に従業員照会も実施できる ● 楽楽勤怠がメンテナンス中の場合、打刻データが失われない ○ メンテ以外でも不慮の事故でデータが失われない

Slide 8

Slide 8 text

#RAKUSMeetup 打刻データの性質 ● エンドユーザーの行動ログの一つである ● データは失われてはいけない ○ 失われるとエンドユーザーは勤怠時刻申請が必要になる ○ 頻繁に失われていると楽楽勤怠への信頼性が下がる ○ データが失われないための機構が必要 ● 重複しても(大きな)問題がない ○ 同じ日時の打刻を何回繰り返しても、勤怠計算上は影響がない ○ 影響を受けるのはパフォーマンス面だけ

Slide 9

Slide 9 text

#RAKUSMeetup アーキテクチャ図 PitTouchPro2 打刻アプリ ケーション 楽楽勤怠 同期バッチ ① ④ ② ③ A B

Slide 10

Slide 10 text

#RAKUSMeetup RabbitMQ ● 打刻データの保存のために採用 ○ 社内での導入実績がある ○ 公式ドキュメントなど、情報量が豊富 ● バージョンは3.8系 ○ ErlangはZero-dependency Erlang RPM for RabbitMQの23系を採用 ● クラスター構成

Slide 11

Slide 11 text

#RAKUSMeetup Resilience4jの採用 ● Javaのフォールトトレラント用のライブラリ ● サーキットブレーカー、リトライ、流量制御、タイムアウトハンドリングなどができる ● 今回は以下を採用 ○ サーキットブレーカー ■ 打刻アプリケーション => 楽楽勤怠のAPI通信のみ(図中②) ○ リトライ ■ 楽楽勤怠API通信箇所(図中②およびB) ■ RabbitMQへのPublish(図中③)

Slide 12

Slide 12 text

#RAKUSMeetup Resilience4jの採用箇所 PitTouchPro2 打刻アプリ ケーション 楽楽勤怠 同期バッチ ① ④ ② ③ A B サーキットブレーカー+リトライ リトライのみ

Slide 13

Slide 13 text

#RAKUSMeetup やってみた感想 ● 実現すべき事自体はシンプル ● 事故った時の想定をどこまでやるかが大変 ○ RabbitMQの採用、リトライ、サーキットブレーカーの適用 ○ 異常系のテストが大変 ● 情報量の偏り ○ RabbitMQは公式ドキュメントや英語文献が豊富 ○ Resilience4jは公式のサンプルコードすら動かなくて辛い