创业公司的技术演进路径
杨德升@周伯通招聘
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
关于「周伯通招聘」
• 始于 2011 年,垂直于互联网行业的招聘社区
• 网站、iPhone App、Android App
• 网站最高日 UV 百万级
• 工程师团队少而精(1 人 – 2 人 - 8 人)
• 全部托管于阿里云
• 后端技术栈:PHP、NodeJS、Docker
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
服务器架构的演进路径
单台
自托管服务器
单台云服务器
+
云服务拆分
服务器负载均
衡
+
数据库读写分
离
前后端分离
+
RESTful API、
App 上线
V1:单台自托管服务器
V1:单台自托管服务器
优势:
• 聊胜于无(绝大部分公司)
劣势:
• 此处省略 1w 字
V2:单台云服务器 + 云服务拆分
V2:云服务器 + 云服务拆分
优势:
• 再也不用管理文件
• 极易升级(架构、硬件)
• 自带安全防卫(DDos、XXS、
SQL 注入、etc.)
• 零运维、价格低
劣势:
• 单台服务器职责过多
• 存在单点
• 有流量上限
V3:高可用(负载均衡 + 数据库读写分离)
V3:高可用(负载均衡 + 数据库读写分离)
优势:
• 无单点
• 服务器职责明确
• 极易水平扩容
劣势:
• PHP 后端与 Web 前端高度
耦合
V4:前后端分离
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
自动化部署之前
本地开发环境 测试环境 生产环境
版本库
update
commit
update(自动) update(手动)
Phing
• 官网:
• 使用 XML 文件或 PHP 类文件配置编译部署
• 非侵入式
• 跨平台(Windows、Linux、Mac)
• 易扩展
• 支持 PHP 5 以上
自动化部署程序的 5 个要求
1.可自动化
2.部署过程不影响线上产品
3.支持多台服务器
4.支持快速回滚
5.支持集成测试
项目目录结构
部署程序的执行步骤
1. 检出最新代码
2. 代码压缩打包
3. 上传代码包至第一台服务器(scp 命令)
4. SSH 至第一台服务器
5. 代码解压缩
6. 执行 Composer 依赖
7. 执行 Gulp 前端编译
8. 修改 current/rollback 软连接至最新代码
9. 对每一台服务器执行步骤 3 - 8
自动化部署
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
为什么前后端分离?
• 前端工程师沦为切图工程师
• 后端工程师需要套页面
• 前后端联调效率低下
• 前端可发挥的作用受限
前后端分离的方法
前后端分离后的结果
• 前端对 Web 逻辑负责(UI、交互、控制逻辑、渲染逻辑)
• 后端对 API 负责(业务逻辑、数据格式、服务稳定)
• 前后端独立部署、独立维护
疑虑一:性能损耗是否可接受?
• SPA(单页面应用)天然性能高
• API 为内网调用,速度快
• NodeJS 非阻塞式执行
• NodeJS 端 Batch 操作,减少浏览器端请求数量
疑虑二:如何解决 SEO 问题?
• 前后端模板共享
• 首屏为 NodeJS 服务器端渲染
• 此后为 React 浏览器端渲染
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
什么是 Docker?
• 开源的「容器」引擎
• “虚拟化”的极致(几乎无性能开销)
• 容器完全采用沙箱机制
• 容器间通过 link 或 volume 发生交互
为什么引入 Docker?
• 极速搭建完全一致的开发、生产环境
• 自动化构建、测试、部署,且几乎无需调试
• 每次部署都是一个全新的系统环境
• 微服务架构
• 用「空间、CPU」换「调试时间、可能犯错的成本」
「周伯通」目前的进展
• 在 Docker Hub 上发布两个镜像:PHP56 和 Gearmand
• 实践 Thin Container(单进程、无状态)
• 使用 Docker Compose 搭建开发环境,并开源配置文件
• 使用第三方 Docker 系统部署线上环境(DaoCloud 或 Tutum)
容器划分(Thin Container)
1. Nginx
2. PHP FPM
3. NodeJS
4. MySQL
5. Redis
6. Crond 定时任务
7. Gearmand 消息队列
8. Supervisord 管理的 Gearman Consumer
Docker Compose 搭建开发环境
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则
技术选型的三原则
1. 优先使用开源技术
2. 优先使用第三方服务
3. 技术和架构够用即可
目录
• 关于「周伯通招聘」
• 服务器架构的演进路径
• 自动化部署
• 前后端分离
• Docker 化
• 技术选型的三原则