meetup_20210608_kintai.pdf
by
Yusuke Konno(Rakus)
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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は公式のサンプルコードすら動かなくて辛い