SlideShare a Scribd company logo
JAVA 能做到的,
我大 PHP 也可以!
展開改寫線上服務之旅!
Harry
About Me
● Harry
● 104 Corp - Backend Engineer
● PHP, Laravel
● 爬山、拍照
Outline
● 為何需要替換 JAVA
● 該如何選擇框架及語言
● 上線服務不中斷
● Laravel 測試環境壓測數據
● Laravel Octane 壓測數據
● 壓測結果評估
● Laravel 線上數據
● 問題集錦
● 結論
為何需要替換 JAVA
● 非主流框架,可交流資訊較少
● 不像 Spring 很好的處理 Hibernate
等 DB 溝通程式
● 不像 Spring 妥善處理 DI
● 如同黑盒子一般,無法更改
● 不能 transaction
● 偶爾會突然拿不到資料
該如何選擇框架及語言
● 效能需能與原服務匹配
○ Request 數量
○ Latency
● 團隊能力
○ PHP
○ Laravel
● 維運成本 & 學習成本
考慮重點
Performance
Latency
最終決定
● 團隊成員熟悉PHP、Laravel
● 減少學習成本
● 公司其他團隊亦有使用Laravel 作為 API Server 的案例
● Laravel Octane 近乎無痛的升級
上線服務不中斷
確認架構可運行
DB
Request
批次翻寫 API
getAccount
getEmail
getName
getCellphone
getAddress
.
.
createAccount
updateAccount
deleteAccount
.
.
.
V1 V2
金絲雀部署
DB
getAccount 30%
getAccount 70%
Request
Laravel Octane 怎麼上?
DB
Request
Laravel 測試環境壓測數據
壓測環境及方式
● 機器規格
○ JAVA Karaf
■ Server = 1 / CPU = 2 core / RAM = 4GB
○ PHP Laravel
■ Server = 1 / CPU = 2 core / RAM = 4GB
● 壓測方式
○ Apache Benchmark
○ ab -c 100 -n 5000 http://{domain}/getAccount/{userid}
Server - CPU & Memory
DB - CPU
JAVA Laravel
DB - Questions
JAVA Laravel
DB - Preparement Connections
JAVA Laravel
Request 平均執行時間
Request 錯誤數量
完成所需的時間分佈 (越少越好)
Laravel Octane
測試環境壓測數據
Laravel Octane - Swoole
壓測環境及方式
● 機器同一台
○ Server = 1 / CPU = 2 core / RAM = 4GB
● 壓測對象
○ Worker = 1
○ Worker = 2 (default)
○ Worker = 4
○ Worker = 25 (Apache mpm)
● 壓測方式
○ Apache Benchmark
○ ab -c 100 -n 5000 http://{domain}/getAccount/{userid}
Server - CPU & Memory
Server - Worker CPU
Server - Memory
DB - CPU
Workers01 Workers02
Workers04 Workers25
DB - Questions
Workers01 Workers02
Workers04 Workers25
DB - Preparement Connections
Workers01 Workers02
Workers04 Workers25
Request 平均執行時間
完成所需的時間分佈 (越少越好)
壓測結果評估
平均執行時間
99% Requests 完成的時間
CPU Usage
Laravel 線上數據
線上環境及數據來源
● 機器規格
○ JAVA Karaf
■ Server 6台 / CPU 4 core / RAM 16GB
○ PHP Laravel
■ Server 4台 / CPU 8 core / RAM 8GB
● API 數據
○ GET /getAccount/{userid}
● 數據來源
○ PHP 的量約是 JAVA 的 2 倍
■ JAVA Karaf >> 20210413 1500~1600
■ PHP Laravel >> 20210802 1500~1600
Response Time大於特定時間的比較
問題集錦
資料處理問題
address
Old
address
New
1.舊資料表
cellphone=0
2.預設資料處理
null
編碼格式問題
Content-Type:
application/json;
charset=utf-8
1.Header : Content Type
u4f60u597d
2.Json Encode
你好
導流問題
/getAccount/{userid}
/getAccount/{userid}
/getAccounts
/getAccounts
套件衝突
imagick
gmagick
V.S
Conclusion
評估影響範疇
可行性測試
上線流程規劃
退版計畫
快一起清掉
改不動的服務吧!
~QA Time~

More Related Content

What's hot

JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
Kazuyoshi Tsuchiya
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
Yuya Rin
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
mganeko
 
OpenStack Trove 技術解説
OpenStack Trove 技術解説OpenStack Trove 技術解説
OpenStack Trove 技術解説
Toru Makabe
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
bleis tift
 
OpenStack Summit 2016 Barcelona NFV関連報告
OpenStack Summit 2016 Barcelona NFV関連報告OpenStack Summit 2016 Barcelona NFV関連報告
OpenStack Summit 2016 Barcelona NFV関連報告
kimura50
 
DNSのRFCの歩き方
DNSのRFCの歩き方DNSのRFCの歩き方
DNSのRFCの歩き方
Takashi Takizawa
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
Kouhei Sutou
 
The Integration of Laravel with Swoole
The Integration of Laravel with SwooleThe Integration of Laravel with Swoole
The Integration of Laravel with Swoole
Albert Chen
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析
euphoricwavism
 
Demystifying Oak Search
Demystifying Oak SearchDemystifying Oak Search
Demystifying Oak Search
Justin Edelson
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
do_aki
 
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたHive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
Recruit Technologies
 
リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法
モノビット エンジン
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!デベロッパーネットワーク
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
 
Hadoop and Kerberos
Hadoop and KerberosHadoop and Kerberos
Hadoop and Kerberos
Yuta Imai
 

What's hot (20)

JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
OpenStack Trove 技術解説
OpenStack Trove 技術解説OpenStack Trove 技術解説
OpenStack Trove 技術解説
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
 
OpenStack Summit 2016 Barcelona NFV関連報告
OpenStack Summit 2016 Barcelona NFV関連報告OpenStack Summit 2016 Barcelona NFV関連報告
OpenStack Summit 2016 Barcelona NFV関連報告
 
DNSのRFCの歩き方
DNSのRFCの歩き方DNSのRFCの歩き方
DNSのRFCの歩き方
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
The Integration of Laravel with Swoole
The Integration of Laravel with SwooleThe Integration of Laravel with Swoole
The Integration of Laravel with Swoole
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析
 
Demystifying Oak Search
Demystifying Oak SearchDemystifying Oak Search
Demystifying Oak Search
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみたHive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
 
リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
 
Hadoop and Kerberos
Hadoop and KerberosHadoop and Kerberos
Hadoop and Kerberos
 

Similar to 2021.laravelconf.tw.slides5

開發環境建置
開發環境建置開發環境建置
開發環境建置
Shengyou Fan
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
Shengyou Fan
 
Laravel - 簡介與環境設定
Laravel - 簡介與環境設定Laravel - 簡介與環境設定
Laravel - 簡介與環境設定
Vincent Chi
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
俊仁 陳
 
Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片
Shengyou Fan
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
Shengyou Fan
 
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
Shengyou Fan
 

Similar to 2021.laravelconf.tw.slides5 (7)

開發環境建置
開發環境建置開發環境建置
開發環境建置
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
 
Laravel - 簡介與環境設定
Laravel - 簡介與環境設定Laravel - 簡介與環境設定
Laravel - 簡介與環境設定
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
 
Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
 

More from LiviaLiaoFontech

2021laravelconftwslides12
2021laravelconftwslides122021laravelconftwslides12
2021laravelconftwslides12
LiviaLiaoFontech
 
2021laravelconftwslides11
2021laravelconftwslides112021laravelconftwslides11
2021laravelconftwslides11
LiviaLiaoFontech
 
2021laravelconftwslides10
2021laravelconftwslides102021laravelconftwslides10
2021laravelconftwslides10
LiviaLiaoFontech
 
2021laravelconftwslides9
2021laravelconftwslides92021laravelconftwslides9
2021laravelconftwslides9
LiviaLiaoFontech
 
2021laravelconftwslides8
2021laravelconftwslides82021laravelconftwslides8
2021laravelconftwslides8
LiviaLiaoFontech
 
2021laravelconftwslides6
2021laravelconftwslides62021laravelconftwslides6
2021laravelconftwslides6
LiviaLiaoFontech
 
2021laravelconftwslides4
2021laravelconftwslides42021laravelconftwslides4
2021laravelconftwslides4
LiviaLiaoFontech
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
LiviaLiaoFontech
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides22021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
LiviaLiaoFontech
 

More from LiviaLiaoFontech (9)

2021laravelconftwslides12
2021laravelconftwslides122021laravelconftwslides12
2021laravelconftwslides12
 
2021laravelconftwslides11
2021laravelconftwslides112021laravelconftwslides11
2021laravelconftwslides11
 
2021laravelconftwslides10
2021laravelconftwslides102021laravelconftwslides10
2021laravelconftwslides10
 
2021laravelconftwslides9
2021laravelconftwslides92021laravelconftwslides9
2021laravelconftwslides9
 
2021laravelconftwslides8
2021laravelconftwslides82021laravelconftwslides8
2021laravelconftwslides8
 
2021laravelconftwslides6
2021laravelconftwslides62021laravelconftwslides6
2021laravelconftwslides6
 
2021laravelconftwslides4
2021laravelconftwslides42021laravelconftwslides4
2021laravelconftwslides4
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides22021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
 

2021.laravelconf.tw.slides5