SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
移PHP电商⺴⽹网站

⾄至GO的节奏
!

Zalora South East Asia 架构师 翁伟
Zalora South East Asia
•

2012年初成立

•

东南亚时尚电商
•

新加坡(总部)⻢马来西亚 印尼 香港 越南 泰国
菲律宾 文莱

•

约1000名员工(IT部

约40人)
8月中

始尝试

移
11月初试上线
目前。。。

•

第一版被rollback

•

部分推倒重来,积

准备第二版重新上线
今天

•

谈谈在此折腾过程中的经验
原有网站架构
•

经典LAMP

•

前端网站(Alice)负责商品显示
•

•

Memcached / Solr

后端网站(Bob)负责购物⻋车、订单处理等
•

MySQL
为何迁移?
•

调⽤用memcached非常快,但solr...

•

PHP的同步运行模式注定会成为瓶颈
•

射手网对此也有分享:https://bitbucket.org/
PinIdea/fcgi_ext/

•

程序员(我!)太闲了
•

第一版仅是试验性项目
•

据说百度很简单,

•

Zalora的前端网站也就是比百度 杂一倍,有四个⻚页面
•

商品目录

•

商品详情

•

购物⻋车

•

支付

个⻚页面
实验项⺫⽬目计划
•

把这“四个⻚页面”全部用GO改写了∼

•

先把“一个⻚页面”用GO来实现

•

nginx分发不同⻚页面至PHP / GO
worker
memcache
nginx All URLs

Alice

solr
ZRS
BOB

Tracking (GA / Webtrekk / etc)
worker

product

cart..

Alice

memcache
solr

nginx

catalog

Eve

(GO)

ZRS
BOB

Tracking (GA / Webtrekk / etc)
一些前提
数据兼容
•

GO对PHP序列化、反序列化支持
•

https://github.com/Wuvist/gophpserialize

•

https://github.com/Wuvist/gophpserialize/pull/1
⻛风险控制
•

新旧

套系统并存,互不影响

•
•

•

新版本无需修改任何现有代码
独立的新部署

nginx控制切换
•

随时上线、随时rollback
产品团队的需求

•

商品分类⻚页面浏览体验需改善!
•

PM直接说:“我们要AJAX...”
看起来很美
•

有节奏的改进网站

•

改善用户体验,满足产品团队需求

•

实现架构迁移,让技术团队不要太闲
激进的计
•

原PHP(Alice),拆分为:
•

AngularJS (Eve) 前端 MVVM

•

GO (Costa) 后端API
去PHP化

•

上AngularJS,前端界面全部用AngularJS 染

•

GO仅提供rest API服务
•

一切都很美好,上线了!

•

直到我膝盖中了一

•

直到我尝试分享网站链接去Facebook
OpenGraph

•

用户分享网站链接去Facebook时,Facebook获
得的链接信息(title / text / picture)全部都错了
•

AngularJS + Go API的架构完全无法处理此情况

•

Eve (AngularJS) 阵亡
其他问题

•

AngularJS?可以用jQuery么?

•

PHP也可以编译的,跟GO一样快∼
Costa (GO) 威武!
第二版

•

PHP + GO,预期12月上旬上线

•

无AngularJS
经验
•

“慢慢来,比较快”
•

去PHP化是不对的∼

•

最重要的是团队整体的共识

•

经过折腾⼩小伙伴们都对Go的潜力有了充分认识
•

成立新部

,对后端模块进行

移
Go可以做的事情很多
•

GroupCache (去Memcached)

•

购物⻋车

•

订单处理

•

触发CDN⻚页⾯面过期
Q&A

•

想来新加坡从事GO 发?

•

发送英⽂文简历⾄至:weng.wei@zalora.com

Contenu connexe

Plus de Weng Wei

Migrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to GoMigrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to GoWeng Wei
 
About Caching
About CachingAbout Caching
About CachingWeng Wei
 
Metaprogramming Go
Metaprogramming GoMetaprogramming Go
Metaprogramming GoWeng Wei
 
Why use Go for web development?
Why use Go for web development?Why use Go for web development?
Why use Go for web development?Weng Wei
 
Go for web
Go for webGo for web
Go for webWeng Wei
 
Go for web
Go for webGo for web
Go for webWeng Wei
 
Python to go
Python to goPython to go
Python to goWeng Wei
 
A byte of git
A byte of gitA byte of git
A byte of gitWeng Wei
 
My understanding of Git
My understanding of GitMy understanding of Git
My understanding of GitWeng Wei
 
Inside Zend Framework
Inside Zend FrameworkInside Zend Framework
Inside Zend FrameworkWeng Wei
 

Plus de Weng Wei (11)

Migrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to GoMigrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to Go
 
About Caching
About CachingAbout Caching
About Caching
 
Metaprogramming Go
Metaprogramming GoMetaprogramming Go
Metaprogramming Go
 
Why use Go for web development?
Why use Go for web development?Why use Go for web development?
Why use Go for web development?
 
Go for web
Go for webGo for web
Go for web
 
Go for web
Go for webGo for web
Go for web
 
Python to go
Python to goPython to go
Python to go
 
A byte of git
A byte of gitA byte of git
A byte of git
 
My understanding of Git
My understanding of GitMy understanding of Git
My understanding of Git
 
Sharding
ShardingSharding
Sharding
 
Inside Zend Framework
Inside Zend FrameworkInside Zend Framework
Inside Zend Framework
 

Zalora php to_go