LoginSignup
6
6

More than 1 year has passed since last update.

Laravel Octaneで「最寄り駅検索」を30ms以下で応答させる高速化法

Last updated at Posted at 2022-04-03

最寄りの駅を検索して返却するAPIサービス【NeaREST API】を公開してみたのでご紹介します。
※以前zennに投稿した内容と同じです

  • 商用利用無料
  • 認証制限なし
  • 高速応答
  • 最大検索件数20件

概要・デモ

以下ページにAPIドキュメントと仕様がありますのでご確認ください。

また、簡単なデモとして今いる位置から最も近い駅を検索するアプリを公開していますのでスマートフォンでお試しください。

以下のようなJSONを返却します。

{
    "meta": {
        "status": "success"
    },
    "data": [
        {
            "station_id": 9930101,
            "station_name": "都庁前",
            "pref": "東京都",
            "post": "1600023",
            "address": "新宿区西新宿2-8-1",
            "location": [
                139.69257,
                35.690551
            ],
            "distance": 148
        },
        // 以降続く…

作った動機

最寄り駅を検索するAPIはすでに存在し、以下のようなものが挙げられます。

  • NAVITIME API
  • 駅すぱあとWebService
  • HeartRails

この中で無料で使えるのは一番最後のHeartRails Express 路線/駅名/最寄駅データサービス 様だけ。
実質的に無料で使う場合のスタンダードであり、このサービスがなくなると無料なサービスはなくなってしまいます。

その他にも選択肢をもたせるのは非常に大切な事だと思い、今回開発して公開しました。

仕組み

構成・技術スタックは以下の通りです。

メインシステム

メインシステムはLaravel 9を用いました。

個人事業主の大学生とという身分なもので素早い開発とメンテナンスのしやすさを鑑み無難なLaravelに。
PHPのバージョンは開発環境・本番サーバーともに8.1系です。
(最初Lumenでやろうと思ったのですがもう非推奨なんですね)

データベース

今回、他サービスとの干渉防止と可用性の担保・高速処理を目指したく、駅情報データベースを個人的に推しているDBaaS【MongoDB Atlas】を利用しました。

その名の通りドキュメント志向データベースのMongoDBをホスティングするサービスで、共用メモリ500MBのClusterを無料で使えておすすめです。

DBaaSを使うことでデータベースの保守管理コストの軽減を図りました。
駅情報データベースは 駅データ.jp様 の最新データを独自に再フォーマットして格納しています。

応答速度30msへの高速化

今回開発するに当たって高速化という点にも重きを置きました。
Screenshot_20220401_171722.jpg

地理空間インデックス

MongoDBに保存している駅情報の位置情報に地理空間インデックスを付与し、効率的かつ最適なロジックで球面モデルを使用した最寄りの駅を検索する ことができた(つもり)

少し古いですが以下情報などを参考にしました

Laravel Octane

普通に開発して実装した時点でも応答速度は50ms程度と高速なのですが更に早くした意欲が出てしまい、Laravelを高速なミドルウェアで動かせるパッケージ「Laravel Octane」も活用しました。

導入手順

結果、abテストで50ms→29msの高速化を実現しました。
実際のところ、Apacheのリバースプロキシを使っているため実際は40ms程度まで落ちるのですがそれでも十分早くなっていると思います。

以上、ざっと紹介させていただきました。ぜひ使っていただけると幸いです!
※紹介スライド

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6