『ラフールサーベイ』のシステム構成
株式会社ラフールでSREをやっている伊藤です。弊社の技術的な取り組みを理解してもらうために今後不定期ですが技術的な事を書いていこうかと思います。
※SREとは、Site Reliability Engineer(サイト信頼性エンジニア)の略称で、サービスやインフラの信頼性を支えているエンジニア。
今回は第1回目なので、弊社のメインサービスである『ラフールサーベイ』のシステム構成について紹介させていただきます。
その前に私の簡単な自己紹介です。
経歴等はWantedlyのプロフィールに記載していますが、新卒でSIerに入社してからずっとインフラ畑を歩きつつ、30歳頃からエンジニアリングマネージャー的なこともやってきました。株式会社ラフールには2020年5月にジョインし、現在はSREとして『ラフールサーベイ』のインフラ全般を担当しています。
おまけですが、最近ではインフラエンジニアながらプライベートの時間でAIの勉強をしており、世界的に有名なデータ分析コンペティションのサイトであるKaggleで「Kaggle Competiton Expert」の称号をゲットしております。(Kaggle Masterに早くなりたい・・・)
自己紹介はここまでとして、ここからは本題である『ラフールサーベイ』のシステム構成について公開できる範囲で紹介し、SREとして今後取り組んでいこうと考えているポイントにも触れていきます。
まずはインフラとなるクラウドサービスについてですが、こちらはAWS(Amazon Web Service)を使っています。現在、世の中には様々なクラウドサービスがあり、私もこれまで色々なクラウドサービスに触れてきましたが、その中でも群を抜いてAWSは素晴らしいです。なぜならば、AWSそのものが多くの機能を提供していますし、多くのSaaSやツールがAWSに対応しているので、使い方の幅が大変広いです。そのおかげで、サービスへの新機能の追加やインフラ面の強化のような場合に、自分で一から実装することなく、AWSの機能や周辺サービスを上手く使うことで、短期間かつ高い信頼性を持った形で実装することが可能となります。リソースが限られている我々のようなベンチャー企業では無駄な作業は命取りになりかねないので、「車輪の再発明」はせずに「巨人の肩の上に立つ」ことを意識する必要があります。現状はまだまだAWSを使い倒している状況ではないですが、今後更にAWSの研究をし、サービスに取り込んでいきたいです。
サーバーについては、開発環境はDockerコンテナベースですが、それ以外の環境についてはまだEC2ベースの構成です。本番環境をDockerコンテナベースに置き換えるには色々と考慮が必要で、一筋縄には行きません。しかし、Dockerコンテナのメリットを享受するために、中長期的な技術戦略として本番環境のDockerコンテナ化を進めていきたいです。
WebアプリケーションはRuby on Railsで開発されており、ソースコードはGitHubで管理しています。デプロイはデプロイ専用サーバからCapistrano経由で行っています。CI/CDという観点では現状の方式はやや弱いので、今後はCircleCIやAWS Codeシリーズ等のCIツールを導入し、先ほど触れた本番環境のDockerコンテナ化とあわせて、弊社の開発プロセスにCI/CDの世界観を取り込んでいきたいです。
また、Webアプリケーションは現状大きなモノリシックなアプリケーションとなっています。モノリシックにはモノリシックなりの良さはありますが、今後のサービス拡大を考えた際にそのことが開発スピードのボトルネックになる可能性があります。ですので、開発チームと連携し、徐々にマイクロサービスに切り出していく流れを進めていきたいです。マイクロサービス化することで、技術選択の自由度が上がったり、デプロイのハードルが下がるので、開発のスピードアップに大きく寄与すると考えています。
今回は第1回ということで、弊社のメインサービスである『ラフールサーベイ』のシステム構成について簡単ですが紹介し、SREとして今後取り組んでいこうと考えているポイントについて触れさせていただきました。
SREとしては、いかにサービスを安定運用できるか、いかに開発者が気持ち良く開発できるかを目指して、日々改善を積み重ねております!
今後、弊社や私自身が取り組んでいる技術を中心とした様々な情報を発信していきたいと考えておりますので、よろしくお願いします!