zalora php to_go
TRANSCRIPT
![Page 1: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/1.jpg)
迁移PHP电商⺴⽹网站⾄至GO的节奏
!Zalora South East Asia 架构师 翁伟
![Page 2: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/2.jpg)
Zalora South East Asia
• 2012年初成立
• 东南亚时尚电商
• 新加坡(总部)⻢马来西亚 印尼 香港 越南 泰国 菲律宾 文莱
• 约1000名员工(IT部門约40人)
![Page 3: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/3.jpg)
8月中开始尝试迁移
![Page 4: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/4.jpg)
11月初试上线
![Page 5: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/5.jpg)
目前。。。
• 第一版被rollback
• 部分推倒重来,积极准备第二版重新上线
![Page 6: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/6.jpg)
今天
• 谈谈在此折腾过程中的经验
![Page 7: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/7.jpg)
原有网站架构• 经典LAMP
• 前端网站(Alice)负责商品显示
• Memcached / Solr
• 后端网站(Bob)负责购物⻋车、订单处理等
• MySQL
![Page 8: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/8.jpg)
为何迁移?• 调⽤用memcached非常快,但solr...
• PHP的同步运行模式注定会成为瓶颈
• 射手网对此也有分享:https://bitbucket.org/PinIdea/fcgi_ext/
• 程序员(我!)太闲了
![Page 9: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/9.jpg)
• 第一版仅是试验性项目
![Page 10: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/10.jpg)
• 据说百度很简单,两个⻚页面
• Zalora的前端网站也就是比百度复杂一倍,有四个⻚页面
• 商品目录
• 商品详情
• 购物⻋车
• 支付
![Page 11: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/11.jpg)
实验项⺫⽬目计划
• 把这“四个⻚页面”全部用GO改写了~
• 先把“一个⻚页面”用GO来实现
• nginx分发不同⻚页面至PHP / GO
![Page 12: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/12.jpg)
nginx Alice
memcache
solrAll URLs
BOB
ZRS
Tracking (GA / Webtrekk / etc)
worker
![Page 13: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/13.jpg)
Aliceproduct
cart..
catalog
nginx
Tracking (GA / Webtrekk / etc)
Eve(GO)
memcache
solr
BOB
ZRS
worker
![Page 14: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/14.jpg)
一些前提
![Page 15: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/15.jpg)
数据兼容
• GO对PHP序列化、反序列化支持
• https://github.com/Wuvist/gophpserialize
• https://github.com/Wuvist/gophpserialize/pull/1
![Page 16: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/16.jpg)
![Page 17: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/17.jpg)
⻛风险控制• 新旧两套系统并存,互不影响
• 新版本无需修改任何现有代码
• 独立的新部署
• nginx控制切换
• 随时上线、随时rollback
![Page 18: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/18.jpg)
产品团队的需求
• 商品分类⻚页面浏览体验需改善!
• PM直接说:“我们要AJAX...”
![Page 19: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/19.jpg)
看起来很美
• 有节奏的改进网站
• 改善用户体验,满足产品团队需求
• 实现架构迁移,让技术团队不要太闲
![Page 20: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/20.jpg)
激进的计划
• 原PHP(Alice),拆分为:
• AngularJS (Eve) 前端 MVVM
• GO (Costa) 后端API
![Page 21: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/21.jpg)
去PHP化
• 上AngularJS,前端界面全部用AngularJS渲染
• GO仅提供rest API服务
![Page 22: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/22.jpg)
![Page 23: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/23.jpg)
• 一切都很美好,上线了!
• 直到我膝盖中了一箭
• 直到我尝试分享网站链接去Facebook
![Page 24: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/24.jpg)
OpenGraph
• 用户分享网站链接去Facebook时,Facebook获得的链接信息(title / text / picture)全部都错了
![Page 25: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/25.jpg)
• AngularJS + Go API的架构完全无法处理此情况
• Eve (AngularJS) 阵亡
![Page 26: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/26.jpg)
其他问题
• AngularJS?可以用jQuery么?
• PHP也可以编译的,跟GO一样快~
![Page 27: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/27.jpg)
Costa (GO) 威武!
![Page 28: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/28.jpg)
第二版
• PHP + GO,预期12月上旬上线
• 无AngularJS
![Page 29: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/29.jpg)
经验
• “慢慢来,比较快”
• 去PHP化是不对的~
• 最重要的是团队整体的共识
• 经过折腾⼩小伙伴们都对Go的潜力有了充分认识
![Page 30: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/30.jpg)
• 成立新部門,对后端模块进行迁移
![Page 31: Zalora php to_go](https://reader033.vdocuments.us/reader033/viewer/2022060120/5592e1891a28ab1d138b46da/html5/thumbnails/31.jpg)
Go可以做的事情很多
• GroupCache (去Memcached)
• 购物⻋车
• 订单处理
• 触发CDN⻚页⾯面过期