2019/07/11

テクノロジー

マイナビで内製している独自サービスSMEWとは?構成を紹介します!

この記事の目次

    SMEW(スミュゥー)は、日本語で「ミコアイサ」というカモ科の鳥類の名称です。

    本記事ではSMEWと名付けられた、マイナビの独自インフラサービスを紹介します。

    はじめに

    SMEWとは、Simple ManagEd Websiteの略で、LP(ランディングページ)などの比較的シンプルな構成のWebサイトを短い期間で公開するためのサービスです。

    従来は、Webサイトを構築する際、Webサーバーやデータベースサーバーの構築から始まり、ネットワークの設定をした上でコンテンツの作成や配置をするという手順を踏んでいたため、どうしても時間がかかっていました。
    これに対し、SMEWの基本設計は、Webサーバーやデータベースサーバーをあらかじめ用意しておき、Webサイトを作りたいといった社内からの要望に対して「すでに用意されている環境」と「コンテンツを配置する場所」だけを提供するというものです。

    このSMEWはシステム統括本部ITソリューション部で内製しており、すでにマイナビが管理する一部のサイトで利用されています。
    今回はその構成について紹介したいと思います。

    システムの構成

    このサービスは、短期間でリリースできるということの他に、可搬性と可用性にも主眼をおいて設計しました。

    Webサイト成長していった場合、このサービスの構成では不十分になってくることがあり、その時にコンテンツをできるだけそのまま別のWebサーバーに移植できるよう、可搬性を重要視しました。
    また、可用性については、ひとつのWebサーバーで複数のサイトをホストすると、Webサーバーの再起動がすべてのサイトに影響するなどメンテナンス性に欠けます。そのため、すべてのWebサーバーが独立して動いている必要がありました。

    この両方を実現するため、DockerコンテナでWebサーバーを稼動させ、コンテンツをDockerコンテナとは別のNASに配置するようにしました。
    Webサーバーが稼働するDockerコンテナは、すべてのサイトで全く同じコンテナが動いており、違うのはNASに配置されたコンテンツだけという状態です。
    これによりサイトごとにメンテナンスできる上に、環境に依存しないコンテンツしか配置できないという状態を実現しました。

    システムの冗長化

    前項で触れた可用性は冗長構成によっても実現されています。

    サービス全体の前段にあるロードバランサーが、2台のリバースプロキシうちどちらかにアクセスを振り分けます。2台あるリバースプロキシは片方がダウンしていてももう片方がアクセスを捌くため、設定変更やメンテナンス時にもダウンタイムなしで運用できます。

    同様にひとつのサイトに対してコンテナも2つ割り当てられます。これもリバースプロキシからどちらかに割り振られ、片方からのレスポンスがない場合は自動的にもう片方にアクセスを振り直します。

    データベースサーバーに関してはデータの一貫性を保つためにシングルマスター構成になっています。常にスレーブサーバーへレプリケーションしており、データベースの障害が発生した場合にはスレーブをマスターに昇格させできるだけ短いダウンタイムでWebサイトを継続できるようになっています。

    ユーザーからの見たサービス

    これまで説明してきたように、SMEWは比較的堅牢な構成をしていますが、利用者から見ると単純なサービスに見えるのも特徴のひとつです。
    SMEWの利用申請をするとFTPアカウントとURLが発行されます。FTPを使ってコンテンツを配置したあと、発行されたURLにアクセスすると先ほど配置したコンテンツが見られます。
    仮想マシンの数やデータベースの構成を考える必要がなくなり、コンテンツの作成に集中できるようになります。

    まとめ

    • コンテナを利用したWebサーバーを提供するサービスをシステム統括本部ITソリューション部で内製しています
    • リバースプロキシの設定とコンテナの立ち上げとFTPアカウントの発行という3つの作業でWebサイトを利用し始められるため、従来のWebサーバーよりも格段早く利用できます
    • 利用者は考慮しなくても冗長構成の取られたWebサーバーが利用でき、コンテンツに集中できます

    この記事を読んで、マイナビのサービスをより深く知ってもらい、成功や成長のきっかけを縁の下で手助けするマイナビのエンジニアに興味を持っていただけたら幸いです。

    ※本記事は2019年07月時点の情報です。

    著者:マイナビエンジニアブログ編集部