新浪微博 LAMP 優化之路
PHP NG 主要作者
每天20憶pv 50億 hits
400台前端機器
2012年3月
使用 apache + php
17w 行代碼導致很難維護
- 性能優化
- 架構優化
- 基礎優化
- 遠程優化
Yaf c base framework 類似 phalcon 只實現基本功能 不需要 ORM
Weibo 擴展
- Weibo conf
- Weibo Utils
棄用 Smarty
結構優化 -解耦
- Pagelate
- Bigpipe
soa 的形式
結構優化 - Yar rpc framewrok
第一個 php和 rpc 並行的框架
CBigpipe 加速
前端 PHP 後端 C
升級 PHP 5.4
LAMP => LNMP
踩了一些坑
使用 Zend Optimizer Plus (O+) 替換 apcache
快於7% 到 10%
性能優化 Yac
主要是無鎖共享 使用 CRC 校驗資料使否出錯的問題
移動微博
移動佔到 70%以上
服務器 cpu idel 5%
PHP 異步調用
jsond
L0 和 L1 兩種類型的快取,分成本機和全域兩種
為何使用無鎖? key 包含 CRC ,使用CRC跟值校驗 降低錯誤率
專案管理
本職 PM
學生症候群
寫書經驗
領導力
冒險心 跳脫盒子 嘗試
管理力
一致性 遵循原則 避免意外
- PM = 團隊的 API
- 協助團隊看到全貌以便規劃調度
- 統一方向與做事方法
總結
專案管理幫忙聚焦
最小戰鬥單位的概念
whoscall & mongodb
講者是 whoscall cto
使用 mongodb 的經驗
What does Gogolook do?
Line whoscall
Caller-ID Service
介紹一下 mongodb 的基本性能
1. mongos
2. config server
3. mongod
issue
0th gae -> aws
Pass to laaS
No operation issue in GAE
MongoDB Production Notes
Nginx + AWS Auto-Scalling
The 1st issue
Page Faults 很高
Index are in Memorry
需要大量的 Memory
刪除沒必要的 index
升級 instance (scale-up)
The 2nd issue
資料量變大導致 DiskIO 問題
需要更改 AWS 的設定
The 3rd issue
Lock rate 提高
MongoDB concurrency
一個 DB 只放 一個 collection
其他方案
非即時需要丟到 Queue 處理
等 MongoDB 更新 document-lock的功能
The 4th issue
shard 間資料希望能平均
由 config server 控制
三台 config server 之間的時間差異導致 balance 掛點因而loading 不平均。
v2.6 可以 set time
shard 時間不同步會導致交易時間不一致
Object id 有使用到 timestamp 產生資料
因此如果將時間調到過去的時間會導致 Object id 碰撞的問題
Conclusion
- Index size fit in Memory
- Disk IO
- Database as Collection (< 2.8)
- Time sync distributed system
你還會選擇 MongoDB嗎? Redis elestic Search
災後還原的方案
PHP Extension 開發實務 - 補齊 PHP 遺失的 $PUT 與 $DELETE (FirchTsai)
介紹一下 RESTful
$PUT
$DELETE
違反了 RFC 2616 不應該實作到 PHP裡
php://input
處理 mulipart
RFC 2388 mulipart 是什麼?
別忘了 $_FILES
EPV
介紹Extension 的優點和架構
主要是 SAPI 讓 server 與 php 溝通
- 官方 Zend Extension API
- 神秘版 Zend Extension API (for PHP4) 用來來知道有這個 API
- 終極版 Zend Extension API == 直接看原始碼
API 文件說明極少
PHP_GINIT_FUNCTION PHP_GSHUTDOWN_FUNCTION
PHP_MINIT_FUNCTION PHP_MSHUTDOWN_FUNCTION
PHP_RINIT_FUNCTION PHP_RSHUTDOWN_FUNCTION
PHP-FPM 直接將 model 掛載到身上因此不會多次呼叫 init 和 shutdown。
config.m4 編譯環境
config.w32
php_epv.h 標頭檔
epc.c 主要檔案
編譯工具 1. phpize 2. configure 3. make
Phalcon 進行式 (SDpower)
Phalcon Developer Tools
講一些Phalcon 基礎大部分都用過了
快速使用加密解密
不可逆加密
都是在 service.php 設定
Building Powerful command-line application with PHP (c9s)
主要是介紹 CLIFramework
Features
參考 GIT 的命令架構
可以研究一下 zsh
實戰 HHVM Extension (Ricky)
介紹 HHVM
Hack lang = 強型態的 PHP 官方的文件 goo.gl/PPB64m
HHVM Extension requirement
config.cmake
fibionacci.php
hphpize cmake make && make install
PHP檔案只能有一個並且要用 ext 開頭
HNI(HHVM Native Interface) 讓 Hack 和 C++ 混用 類型互相對應
RTFSC == Read The Fxck Source Code
HHVM 密技
JIT::VMRegAnchor