LinkedInのPlayフレームワーク
はじめに
私たちはサポートとコンサルティング・サービスを提供し、彼らがPlayの拡張性を活用して独自のニーズに合わせてチューニングできるよう支援しました。
リンクトインについて
LinkedInは、インターネット上で世界最大のプロフェッショナル・ネットワークを運営する株式公開企業で、200以上の国と地域に1億6,000万人以上の会員を持つ。
同社はLightbendの顧客であり、コアとなるソーシャルネットワークグラフやその他の重要な製品コンポーネントにScalaを使用している。 また、クラスタ管理ソリューションのNorbertや分散パブリッシュ・サブスクライブシステムのKafkaなど、Scalaをベースにしたオープンソースプロジェクトもリリースしている。 Scalaは、ライトベンドの主力製品であるライトベンド・プラットフォームの一部です。 最近、LinkedInはライトベンド・プラットフォームの利用を拡大し、Playウェブフレームワークを追加した。
課題
LinkedInは、従来のJavaウェブフレームワークで課題に直面した。 例えば、こうだ:
- 変更、リロード、テストに時間がかかりすぎ、開発者の時間を浪費する。
- ステートフルなスレッド単位のリクエストフレームワークはパフォーマンスが低く、拡張が難しいため、クラウドのリソースを浪費する。
LinkedInは、Ruby on Railsやnode.jsなど、Java以外のプラットフォームも使用している。 しかし、サーバーサイドのコードのほとんどはJavaで書かれているため、Java開発者向けの強力でモダンなUIフレームワークが必要だった。
ソリューション
同社は、NashTech Platform SolutionのコンポーネントであるPlayに注目した。 Playは、開発者の生産性に焦点を当てたJVMのためのモダンなフレームワークである。 JavaとScalaの両方をサポートしており、顧客は状況に応じて最適な言語を選択できる。 同社は、Java APIを使用してJava仮想マシンにリアクティブ・アプリケーションを導入し、開発者が迅速に導入できるようシンプルにしている。
リンクトインがプレイを展開する場所
LinkedInは、UI開発のフロントエンドサーバーとしてPlayを使用している。 例を挙げよう:
- LinkedInの顧客が投票やアンケートを作成し、投票できるアプリケーション。
LinkedInは、サイトの新機能を開発するにつれて、Playをより広く採用することを期待している。
LinkedInはまた、バックエンド・サービスの基盤技術としてPlayを調査している。 同社は、サービス・アーキテクチャ全体をRESTful JSONに移行している最中で、このプロセスを支援するためにPlayを検討している。
迅速なコードとテストサイクル
開発者にとって、Playのキラー機能は、ブラウザで「リロード」を押したときにアプリケーションを動的に再コンパイルする機能だ。 LinkedInの開発者はエディターで変更を保存し、ブラウザに切り替えてリロードを押す。 コンパイルエラーがあれば、ブラウザに表示される。 ビルドが成功すれば、新しいページが表示される。
このシンプルな機能により、開発者がウェブ・アプリケーションを適切に仕上げるために費やす時間を、数え切れないほど節約できる。
デベロッパーがリロードを押したときに素早く動作するように、Playは洗練されたインクリメンタル・コンパイルのテクニックを使って、変更されたクラスだけをリビルドする。
カスタム資産タイプに拡張可能
プレイのホットリロード機能は、新しいアセットタイプをサポートするために拡張することができます。
LinkedInにはApache Avroを使ったRESTフレームワークがある。 Javaクラスは、宣言的なデータモデルとエンドポイント記述から生成される。
LinkedInは、Playを使ってこれらのRESTサーバーを構築するためのインフラを構築した。 スキーマを変更した後、LinkedInの開発者はブラウザでリロードを押すだけで、Javaクラスが再生成され、アプリが再構築される。 エラーは即座にブラウザに表示される。
これにより、開発者は変更を加えるたびに2、3分の時間を節約できる。
モジュールシステムによって、新しい種類のテンプレートを追加することができる。 LinkedInはDustテンプレートをサポートするPlayモジュールを実装した。 いつものPlayのように、Dustテンプレートはホットロードできる。
非同期、ステートレスのスケーラビリティ
プレーは、スケーラビリティに関して2つの大きな勝利をもたらす。
非同期リクエストをサポートしているので、リクエストの進行中にスレッドを拘束する必要がない。 アプリサーバーが外部サービスやデータベースで待機している間、リクエストを中断し、結果が利用可能になった時点で再開することができる。 これにより、未処理のリクエストに必要なメモリが大幅に削減される(通常、スレッドプラットフォームはリクエストサービスコードよりもはるかに多くのメモリを使用する)。
LinkedInの統合プロセスの一環として、非同期リクエスト処理のためのPlayのJava APIが改善され、その変更がPlayのメインラインコードベースとNashTechプラットフォームソリューションに組み込まれました。
つまり、サーバー側のセッション状態に依存しない。 その代わりに、セッションステートはクッキーに保持され、そのためリク エストを受け取ったどのサーバーノードでも利用可能である。
ステートレス・アーキテクチャでは、アプリケーション・サーバーを増やすのと同じくらい簡単に容量を追加できる。 Playはデフォルトでこれを正しく実行し、スケーラビリティの問題を引き起こすセッション・アフィニティなどの複雑さを回避する。
柔軟性
LinkedInは、Playが箱から出してすぐに適切なアーキテクチャを備えているため、将来のフレームワークのリリースへの移行を妨げる可能性のある大規模なカスタム修正について心配する必要がなかった。
Playには拡張ポイントが定義されているので、これらのカスタマイズはコアフレームワークへのパッチではなく、外部モジュールにすることができる。 Apache AvroスキーマとDustテンプレートのサポートはモジュールとして実装された。
結果
Playは、LinkedInのニーズを満たす適切な技術的アーキテクチャを持っている:
- ホットリロード
- 非同期かつステートレス
- モジュールで拡張可能
ナッシュテックは、この未加工の技術を動きの速い企業で実用化する。 ナッシュテック・プラットフォーム・ソリューションは、リンクトインに長期サポートリリースを提供し、バグフィックスと機能強化を行います。 NashTechの広範な製品サポートにより、LinkedInはPlayフレームワークに迅速に拡張機能を追加し、上流のメンテナとコアフレームワークの調整を行うことができました。
NashTechと協力することで、LinkedInは、将来性があり、保守可能で、サポートされたプラットフォームの上で、開発者の時間を節約し、サーバーリソースを節約することができるようになりました。
NashTechによって、リンクトインはフレームワークの機能に影響を与えることができ、メインストリーム製品に組み込むことができるようになった。 LinkedInは、NashTechプラットフォーム・ソリューションの将来のリリースにバグ修正と機能強化が含まれることを確信しており、古いバージョンに取り残されることはありません。
「私たちは、Playを非同期でホット・リロード可能なAPIを備えた、クリーンなアーキテクチャのUIフレームワークだと考えています」。
ディーン・トンプソン、プリンシパル・アーキテクト
ケーススタディをもっと読む
THE OUTがプレミアムレンタカー業界をどのように破壊するか
ベトナムのナッシュテック開発チームと緊密に協力し合うことで、高品質でデジタルファーストの高級レンタカーサービスを構築することができた。 将来を見据えて、THE OUTは製品ロードマップに注力し、旅行代理店やコンシェルジュ・パートナーを含むB2B顧客へのサービスを拡大し、そのための新しいポータルを構築している。
特注のデスク予約システムでハイブリッド勤務を実現:内部の視点
ナッシュテックの社内デスク予約ソフトウェアがどのように職場の効率化を促進し、高い精度で稼働率を測定したかをご覧ください。
オーストラリアで設立された広告・メディア費ビジネスは、ナッシュテックの支援により、いかにして駆け出しのビジネスから世界的な大企業へと成長したのか?
オーストラリアで設立された広告・メディア支出企業は、現在世界的な事業展開をしており、ナッシュテックがその成長を支えていることを知っている。
あなたのプロジェクトについて話しましょう
- トピックス