Submit Search
Upload
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
•
0 likes
•
588 views
K
Kenjiro Kubota
Follow
PHPConference2018スポンサーセッション
Read less
Read more
Technology
Report
Share
Report
Share
1 of 38
Download now
Download to read offline
Recommended
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
Kenjiro Kubota
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
Kenjiro Kubota
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
Kenjiro Kubota
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
Kenjiro Kubota
PepperとWatson音声関連API
PepperとWatson音声関連API
Forex Robotics Co., Ltd.
IBM Bluemix + Watson(MS) + Eagle Eye で行う 表情認識システム
IBM Bluemix + Watson(MS) + Eagle Eye で行う 表情認識システム
Masayoshi Ootsuka
Pepperで翻訳ソフトを作ってみた
Pepperで翻訳ソフトを作ってみた
Forex Robotics Co., Ltd.
SoftLayerで始めるデジタルマーケティング
SoftLayerで始めるデジタルマーケティング
Kohei Nishikawa
Recommended
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
Kenjiro Kubota
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
Kenjiro Kubota
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
Kenjiro Kubota
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
Kenjiro Kubota
PepperとWatson音声関連API
PepperとWatson音声関連API
Forex Robotics Co., Ltd.
IBM Bluemix + Watson(MS) + Eagle Eye で行う 表情認識システム
IBM Bluemix + Watson(MS) + Eagle Eye で行う 表情認識システム
Masayoshi Ootsuka
Pepperで翻訳ソフトを作ってみた
Pepperで翻訳ソフトを作ってみた
Forex Robotics Co., Ltd.
SoftLayerで始めるデジタルマーケティング
SoftLayerで始めるデジタルマーケティング
Kohei Nishikawa
Mobilitydev2019 10 31_slideshare
Mobilitydev2019 10 31_slideshare
Tier_IV
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
Kenjiro Kubota
Self-Driving System with IoT
Self-Driving System with IoT
Tier_IV
GovTechを加速させるAWS
GovTechを加速させるAWS
TomomiTakei
FukuokaDec09
FukuokaDec09
tengu
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
Tier_IV
若手勉強会プレゼン 鈴木俊也 Arch for Startup
若手勉強会プレゼン 鈴木俊也 Arch for Startup
Jun Sato
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
Yukio Saito
自動運転技術を活用した運転技能教習システムのご紹介
自動運転技術を活用した運転技能教習システムのご紹介
Tier_IV
Twilio API 勉強会 Vol.4
Twilio API 勉強会 Vol.4
Joohoun Song
Gartner summit 2016
Gartner summit 2016
アシアル株式会社
業務アプリを安全に効率的に開発・運用するためのポイント
業務アプリを安全に効率的に開発・運用するためのポイント
アシアル株式会社
RLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメント
Itsuki Sakitsu
SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携
API Meetup
Go + Pulsar WebSocket APIの利用事例 #pulsarjp
Go + Pulsar WebSocket APIの利用事例 #pulsarjp
Yahoo!デベロッパーネットワーク
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
Masayuki Abe
スマートスピーカーのアプリ・スキルを作ってみた〜エンジニア編
スマートスピーカーのアプリ・スキルを作ってみた〜エンジニア編
Jiro Hiraiwa
Cordova×業務システム:失敗しないモバイル開発の秘訣
Cordova×業務システム:失敗しないモバイル開発の秘訣
アシアル株式会社
Onlab presentation 072412
Onlab presentation 072412
Hiro Maeda
事例で学ぶHTML5スマフォアプリ開発セミナー
事例で学ぶHTML5スマフォアプリ開発セミナー
Monaca
高いUXをハイブリッド開発で実現するためのポイント
高いUXをハイブリッド開発で実現するためのポイント
Monaca
スマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイント
Masakazu Muraoka
More Related Content
What's hot
Mobilitydev2019 10 31_slideshare
Mobilitydev2019 10 31_slideshare
Tier_IV
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
Kenjiro Kubota
Self-Driving System with IoT
Self-Driving System with IoT
Tier_IV
GovTechを加速させるAWS
GovTechを加速させるAWS
TomomiTakei
FukuokaDec09
FukuokaDec09
tengu
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
Tier_IV
若手勉強会プレゼン 鈴木俊也 Arch for Startup
若手勉強会プレゼン 鈴木俊也 Arch for Startup
Jun Sato
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
Yukio Saito
自動運転技術を活用した運転技能教習システムのご紹介
自動運転技術を活用した運転技能教習システムのご紹介
Tier_IV
Twilio API 勉強会 Vol.4
Twilio API 勉強会 Vol.4
Joohoun Song
What's hot
(10)
Mobilitydev2019 10 31_slideshare
Mobilitydev2019 10 31_slideshare
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
Self-Driving System with IoT
Self-Driving System with IoT
GovTechを加速させるAWS
GovTechを加速させるAWS
FukuokaDec09
FukuokaDec09
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
若手勉強会プレゼン 鈴木俊也 Arch for Startup
若手勉強会プレゼン 鈴木俊也 Arch for Startup
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
自動運転技術を活用した運転技能教習システムのご紹介
自動運転技術を活用した運転技能教習システムのご紹介
Twilio API 勉強会 Vol.4
Twilio API 勉強会 Vol.4
Similar to PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
Gartner summit 2016
Gartner summit 2016
アシアル株式会社
業務アプリを安全に効率的に開発・運用するためのポイント
業務アプリを安全に効率的に開発・運用するためのポイント
アシアル株式会社
RLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメント
Itsuki Sakitsu
SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携
API Meetup
Go + Pulsar WebSocket APIの利用事例 #pulsarjp
Go + Pulsar WebSocket APIの利用事例 #pulsarjp
Yahoo!デベロッパーネットワーク
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
Masayuki Abe
スマートスピーカーのアプリ・スキルを作ってみた〜エンジニア編
スマートスピーカーのアプリ・スキルを作ってみた〜エンジニア編
Jiro Hiraiwa
Cordova×業務システム:失敗しないモバイル開発の秘訣
Cordova×業務システム:失敗しないモバイル開発の秘訣
アシアル株式会社
Onlab presentation 072412
Onlab presentation 072412
Hiro Maeda
事例で学ぶHTML5スマフォアプリ開発セミナー
事例で学ぶHTML5スマフォアプリ開発セミナー
Monaca
高いUXをハイブリッド開発で実現するためのポイント
高いUXをハイブリッド開発で実現するためのポイント
Monaca
スマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイント
Masakazu Muraoka
2016年度コーポレートフェローシップ活動報告(山本さん)
2016年度コーポレートフェローシップ活動報告(山本さん)
Code for Japan
Example using LattePanda
Example using LattePanda
Hirokazu Egashira
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
kitsugi
Smfl20201001
Smfl20201001
三井住友ファイナンス&リース デジタル開発室
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Masakazu Muraoka
ドローン向けソフトウェア事業
ドローン向けソフトウェア事業
Masayuki Isobe
初めてのWebプログラミング講座
初めてのWebプログラミング講座
DIVE INTO CODE Corp.
javascriptの基礎
javascriptの基礎
Masayuki Abe
Similar to PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
(20)
Gartner summit 2016
Gartner summit 2016
業務アプリを安全に効率的に開発・運用するためのポイント
業務アプリを安全に効率的に開発・運用するためのポイント
RLSにおけるプロダクト:プロジェクトマネジメント
RLSにおけるプロダクト:プロジェクトマネジメント
SMBのバックオフィス業務を最適化するAPI連携
SMBのバックオフィス業務を最適化するAPI連携
Go + Pulsar WebSocket APIの利用事例 #pulsarjp
Go + Pulsar WebSocket APIの利用事例 #pulsarjp
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
スマートスピーカーのアプリ・スキルを作ってみた〜エンジニア編
スマートスピーカーのアプリ・スキルを作ってみた〜エンジニア編
Cordova×業務システム:失敗しないモバイル開発の秘訣
Cordova×業務システム:失敗しないモバイル開発の秘訣
Onlab presentation 072412
Onlab presentation 072412
事例で学ぶHTML5スマフォアプリ開発セミナー
事例で学ぶHTML5スマフォアプリ開発セミナー
高いUXをハイブリッド開発で実現するためのポイント
高いUXをハイブリッド開発で実現するためのポイント
スマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイント
2016年度コーポレートフェローシップ活動報告(山本さん)
2016年度コーポレートフェローシップ活動報告(山本さん)
Example using LattePanda
Example using LattePanda
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
Smfl20201001
Smfl20201001
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
ドローン向けソフトウェア事業
ドローン向けソフトウェア事業
初めてのWebプログラミング講座
初めてのWebプログラミング講座
javascriptの基礎
javascriptの基礎
More from Kenjiro Kubota
gRPC入門
gRPC入門
Kenjiro Kubota
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
Kenjiro Kubota
introducing vue-wait-component
introducing vue-wait-component
Kenjiro Kubota
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
Kenjiro Kubota
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
Kenjiro Kubota
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
Kenjiro Kubota
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
Kenjiro Kubota
Introducing hhvm hack-async
Introducing hhvm hack-async
Kenjiro Kubota
Responsableを使ったadr実装
Responsableを使ったadr実装
Kenjiro Kubota
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
Kenjiro Kubota
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
Kenjiro Kubota
Laravel aspectで関心の分離
Laravel aspectで関心の分離
Kenjiro Kubota
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
More from Kenjiro Kubota
(15)
gRPC入門
gRPC入門
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
introducing vue-wait-component
introducing vue-wait-component
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
Introducing hhvm hack-async
Introducing hhvm hack-async
Responsableを使ったadr実装
Responsableを使ったadr実装
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
Laravel aspectで関心の分離
Laravel aspectで関心の分離
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
1.
PHP,Go,Elasticsearchによる、 @cosmeを5倍速くする取り組み istyle.inc KenjiroKubota @PHPConference2018
2.
Profile. ~ 2015/08 istyle.inc テクノロジー本部
R&D 部技術開発部 チーフエンジニア 久保田 賢二朗 ● PHP(Laravel/Phalcon) ● JavaScript(Vue.js/Svelte) ● Golang ● HHVM/Hack kenjiro kubota
3.
PR. 株式会社アイスタイル istyle Inc. インターネットのコスメ情報ポータルサイト 「@cosme(アットコスメ)」 の開発・運営 コスメだけではなくビューティ全般、日本だけではなく世界で"Beauty"に係る人や 企業、個人事業主が活躍できるプラットフォームを作る。 アイスタイルは、「Beauty×IT」の世界ナンバーワンを目指します。
4.
PR.
5.
@cosmeのスマートフォン版 一部ページの速度改善
6.
弊社が掲げているテーマ「1sec」
7.
Webページの表示速度を1秒台にする とはいえ明確な基準がない ● First Contentful
Paint? ● First Meaningful Paint? ● Speed Index? また、いざ速度改善することになると以下の制約が発生 ● CSS、JavaScriptはあらゆるページに適応されているので変更してほしくない ● 運用が大変になるので↑の分離もやらないでほしい ⇒ とにかくサーバーからのレスポンスを速くしよう
8.
弊社における課題
9.
> モノリシックなアプリケーション 様々なサービスを一つのアプリケーションで構成しているため、巨大なコードになってい る。 > 10年以上運用されているレガシーな環境 コード量が膨大かつ、運用されている中での実行環境やフレームワークのバージョンアッ プが困難 >
仕様が不透明 コードを読み解かないとわからない仕様が多い。
10.
どうやって速度改善するか?
11.
機能を切り出してアプリケーションを分ける マイクロサービスアーキテクチャをヒントに「商品」という単位でサー ビスを切り分け アプリケーションも新たに刷新。まずはモノリシックなアプリケーショ ンを分離させる。 ランキング・ブランド・サロン・クーポンetc 商品ページ・クチコミ
12.
現行で動いてるシステムの仕様をそのままに 新規アプリケーションでフルスクラッチ メリット ● 全く別の実行環境を用意できるので一気にバージョンアップが可能 ● 技術選定に幅がある ●
負のコード(設計)に触れることがない デメリット ● 同じ仕様のものを再開発しなければならない(そもそも仕様がわからない) ⇒ SQLやコードを読み解きながらそのページに必要な処理をひたすら追う
13.
特定のパスへのアクセスはサーバーの向き先を変更 /product/prodcut_id/{id}/top
14.
アプリケーションの構成 フロント API データ
15.
Phalconとは ● PHPフレームワーク ● Zephir/C拡張で記述されていてオーバーヘッドが少ない ●
PSR-0/4準拠 ● DIコンテナ標準搭載 ● PHPフレームワークで実行速度が最速の部類 弊社ではLaravelの事例が多いが、今回は実行速度を優先 それでいてPHPライブラリや知見を生かせるPhalconを採用
16.
goaとは ● GolangのREST-API向けフレームワーク ● Design(Req/Resの定義)からSwagger.jsonを生成できる ●
Golangの為、実行速度は速い 弊社のGolang採用事例でも過去何回かgoaは導入されている フロントとAPI間の開発において、SwaggerUIを実装ベースで 更新できるため今回も採用
17.
Elasticsearchとは ● Elastic社が開発しているオープンソースの全文検索エンジン ● 同社のKibanaという可視化ツールが利用できる ●
高いスケーラビリティ ● 検索速度や分析柔軟性が高い こちらも弊社では多く採用しています。 高速な検索、スケーラビリティの高さから採用
18.
データの同期
19.
既存のデータベースからのデータ移行
20.
メッセージングシステムを利用して更新を検知
21.
定期的に移行バッチも実行してデータを同期 ● 全件同期できるほどのデータ量であれば毎日全件更新 ● データが多い場合は毎時で直近1-2時間内に作成・更新されたデータを同期
22.
データの構造に変更が発生した場合 インデックスA Alias インデックスB Alias
23.
Phalconとgoa
24.
REST APIへの実行が直列だとレイテンシが無駄
25.
GuzzlePromiseで並列実行... UseCase
26.
事前に並列取得し、 各レスポンスをシングルトンオブジェクトで保持 UseCaseB UseCaseA UseCaseC 並列取得 個別取得
27.
アノテーションにより事前取得
28.
29.
リグレッション テスト
30.
もちろん従来のアプリケーションと同じ仕様になっている ようにしなければならない。 ● DOMを抽出し、内容を比較 ⇒ h1タグに出力された文字列が一致しているか ⇒
htmlのタグのsrcやhrefなどの値が一致しているか ⇒ listタグのn番目の要素は同一か ⇒ レスポンスのステータスコードの比較 etc...
31.
数万ページに対して実施し、表示される要素に変化がない ことを確認 ● 非同期で生成されるDOMは検知できない ⇒ 現状非同期で処理している箇所が少ないので現在は手動 確認(増えたらbehat等を検討) ●
現在でもアップデートを続けて、設定・定義ファイルを読み 込ませて実行できるためどんなサイトにも利用できる ● 需要があればOSS化したい
32.
改善結果
33.
1.1sec 0.2 sec
34.
まとめ
35.
・ロードバランサーを利用して一部ページから切り替え レガシーなシステムのまま改善するのは大変です。新しい技術の導 入も難しいため、ページ単位でシステムを移行していく。 ・画面に必要なデータは高速なデータベースに移す 同じデータベースを使うことも良いかもしれませんが、CQRSの考え 方をヒントにクエリを分離し、ページに読み出すデータは別途速い データベースに移すことも検討してみてください。 ・リグレッションテストは大事 仕様を変更できる場合はよいですが、そのままの仕様で移行すると なると同一性の担保が大切です。
36.
オンプレからAWSへ移行
37.
38.
thanks:)
Download now