大阪オフィスの移転を機に、生活リズムも絶賛見直し中の @kawanamiyuu です。
今回は昨年度から取り組んでいる、通称「かみせんプロジェクト」の今期の成果(の一部)についてご紹介します。
かみせんプロジェクトとは
かみせんプロジェクトとは「開発の未来に先手を打つプロジェクト」の略称で、2017 年度に取り組みが始まりました。
ミッション
『継続的に新しいことに取り組み、組織要望に対して迅速にトレンド技術で応えることができるようになる』
目標
具体的には以下の実現のための技術検証や知見獲得を、社内システムのマイクロサービス化を題材に行っています。
- ソフトウェア規模に比例した開発効率低下の軽減
- 無停止デプロイ、不具合発生率低下などの高可用性の実現
- 現行ソフトウェアからの段階的な移行の実現
社内システムのマイクロサービス化
社内システムの概要
かみせんプロジェクト開始前
- すべての機能がモノリシックなアプリケーションとして提供されている
2018 年 9 月現在
- モノリシックなアプリケーションから、一部の機能をマイクロサービスとして切り出した
- マイクロサービスは AWS 上でコンテナとして動作している
マイクロサービスの結果整合性
マイクロサービス化を進めるとバックエンドで複数のサービスが協調して動作することになり、これまではデータベースのトランザクション機能により担保されていたデータの一貫性について別のアプローチが必要になります。
かみせんプロジェクトの今期の取り組みの 1 つとして、マイクロサービスの結果整合性について調査や技術検証を行いました。
課題感
- 複数に分割されたサービス間のデータの一貫性をどのように保てばよいか
- データ不整合が生じた場合、どのようにリカバリーすればよいか
検証内容
- ある機能を 2 つのサービス (図中の
project-service
とfunction-service
) として切り出す- モノリシックなアプリケーションを、複数(社内での利用実績がない、あるいは少ない)の言語やフレームワークを利用して分割することも技術検証の一環
- あるリソースを新規登録する際に、従来 1 トランザクションで行っていた処理 (SQL) の一部を、今回切り出したサービスの API 呼び出しに置き換える
- データの整合性はリトライ処理で担保する
検証結果(得られた知見)
サービスの分割は難しい
- 大前提としてサービスをまたぐトランザクションが発生しないようにサービスを分割すべき
- 今回のように同一トランザクションでデータ更新をしたい処理であれば、サービス同士が疎結合ではないということであり、そもそもサービス分割の粒度が正しくない可能性が高い
- ドメインの知識が乏しい状態では適切なドメイン境界を認識することはきわめて難しい
- ドメインの知識が増えた中盤になってから分割し直すことも、別の意味で難易度が高そう
- 自動テストなど品質担保の仕組みや、作り直しに対する組織の理解の度合いで実現可能性が大きく変わる
結果整合性の担保は難しい
- 今回のようにリトライ(有限回数)で整合性を担保する場合、すべて失敗する可能性もゼロではなく、最終的にログなどから手動リカバリーできる仕組みを考えておく必要がある
- 今回は時間の都合で検証していないが、メッセージキューを利用したイベントソーシングなアーキテクチャも検討したい
- 分散トランザクション(二相コミットなど)の手法を使う選択肢もあるが、システムの複雑さや難易度が一気に増加しそうで現実的ではなさそう
最後に
- マイクロサービスの分割や結果整合性に関する知見は、情報としては世の中にありますが、実際に自分の手を動かして検証することで、改めてその課題感を実感するとともに、現実のサービス開発にマイクロサービスアーキテクチャを適用する難しさも明らかになりました
- ラクスでは現在、HR(人事労務)領域を対象した新サービスの開発に取り組んでおり、この「かみせんプロジェクト」で得られた知見が現実のプロジェクトで活かされようとしています。例えば
ラクスでは現状に満足せず開発の未来に先手を打っていける仲間、HRTech に興味があるエンジニアを募集しています!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
forms.gleイベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください! rakus.connpass.com