Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

29
服务化与体系化 解决大量定制小项目开发困境 腾讯/广告平台产品部/互动广告研发中心 周健 Version: 2.1

Transcript of Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

Page 1: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

服务化与体系化 解决大量定制小项目开发困境

腾讯/广告平台产品部/互动广告研发中心 周健

Version: 2.1

Page 2: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

项目背景

解决方案与实践

效果对比与RIO分析

举例介绍

历程与启示

Page 3: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

项目的背景

项目量:不断增加的活动开发项目,人力无法随之同比例增长

复杂度:广告主的要求越来越高,往往伴随富媒体广告、社交广告等多种形式

高性能:随着活动规模的增长,弱海量服务的需求随之增加

复用性:三地开发组、外包的开发框架不统一,无法最大化复用成果,也无法共享外包资源

可运营:互动活动面对开发、测试、运维、监控、动态运营等方面需要『服务云端化的需求』

Page 4: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

最初的开发方式与弊端

开发方式:LAMP + PHP组件

弊端 部署与发布

运营与升级

监控与告警

性能与并发控制

敏感功能的审查与外包

运营数据集中分析

。。。

Page 5: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

项目背景

解决方案与实践

效果对比与RIO分析

举例介绍

历程与启示

Page 6: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

解决方案

SDK Server

OSS Monitor

Page 7: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

解决方案 – 系统的组成

接口机群(内置路由策略)

Cache/DB

标准组件

SDK框架与基础库(内置支撑系统API)

存储类服务

抽奖类(2)

逻辑类服务

备份机制

异步队列

染色机制

兑换码类(2)

作品上传类(3) 计数器类(3)

Bitmap服务 票据服务

秒杀服务

活动注册

个人信息

积分存储

历史参与活动

旁路体系 与其他

FILTER集合 业务统计 运营支撑

开发调试 系统管理

同步机制

灰度机制

风车应用平台(SDK) 风车管理平台(OSS)

风车支撑平台(Server)

发奖服务

接口类服务

数平代理

即通代理(5)

图标点亮(4)

空间代理(4)

同步转发(4)

运营类服务

恶意检测

网管上报

服务质量监控

统一日志服务

DB过载保护 UDS/IP服务 通知系统

开发运营工具

Page 8: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

实践1:基础框架标准化

Page 9: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

SDK特点

标准MVC实现 实现了目前流行MVC框架的多数特性,包括FILTER、LAYOUT、

SLOT、ORM等)

提供异步消息队列的特性,使得PHP CGI异步化成为可能 内置监控上报、运维安全、测试模式等特性

收集URI用于安全扫描(测试环境) 收集SQL语句用于性能分析(测试环境) 提供DEBUG BAR用于测试发现问题(测试环境) 对PHP SDK重要的监控点自动分项目进行数据上报

内置云服务API及其相关容灾特性 统一框架与类库

所有活动、产品的统一开发框架 内部开发与外包统一的框架

Page 10: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

实践2:服务云端化

Page 11: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

云服务特点

按SET统一进行部署和扩容,服务之间松耦合

统一的无状态接口层屏蔽后台内部实现

灵活的路由机制方便扩容、迁移与隔离服务 支持按照项目、用户ID、命令ID进行路由

支持常规模式与高性能模式

提供染色机制、日志中心服务以快速定位问题

高性能、插片式后台服务

Page 12: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

实践3:运营可视化

Page 13: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

运营平台特点

后台服务可视化 云服务管理与资源分配

云服务的项目配置

云服务的状态查看与数据查询

云服务的报表查看

数据分析与报表展示

云服务接口与公司其他接口调试

SDK配置管理与版本控制

Page 14: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

实践4:监控立体化

Page 15: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

运营质量指标化

Page 16: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

监控平台特点

多维度监控(项目/属性/SET/IP等)

项目自动接入 与SDK集成,接入SDK的所有项目也自动接入SQM,无须申请和配置

SDK中所有的关键点接入SQM SDK访问量,访问耗时

DB访问量,访问耗时

云服务访问量,访问耗时

从项目维度,从时间维度,从属性维度进行查看

对项目做PROFILING分析

对项目运营质量评分与排行功能

Page 17: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

项目背景

解决方案与实践

效果对比与RIO分析

举例介绍

历程与启示

Page 18: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

风车使用前后对比 - 开发模式

使用风车前 使用风车后

开发模式 php+memcache+db php+云服务

需求变更操作* 修改代码/迁移数据/重新发布 OSS上修改配置

易用性 编写代码工作量大 自动生成框架/大量辅助工具/云服务

复用性 copy代码 后台服务化

对开发人员要求 高 (进而导致项目外包的风险高)

低,可外包 (常用服务/核心服务/敏感服务云端化)

系统稳定性 一般 非常好

“开放是一种能力”。对于项目密集型的团队,外包是个不错的节约成本的选择。尤其在每个月项目量经常变化的情况下。

Page 19: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

风车使用前后对比 - 性能、运营与安全

使用风车前 使用风车后

性能瓶颈 db瓶颈(A类单机2k/s) 云服务(B类单机50k/s)

请求突发 db大规模扩容和数据迁移 修改配置切换云服务至专区

监控和预警 无(无机制和无实现手段) 系统做自动监控和预警*

过载保护 无 内置DB过载保护

安全性 实现代价大/性能差 提供恶意检测服务和各类web安全机制

在业务变的更复杂、项目量翻倍的情况下,基础告警从2010H2的“日”级别降低到2011H2的“双周”级别

兑换码、抽奖、投票、计数等云服务 0 故障

监控系统改变了活动开发人员的“运营意识”

Page 20: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

风车项目的部分运营数据

投入人力:开发人员兼职3人全职4人,无产品经理

关键数据(1年半内)

运营质量:1年半之内 0 运营事故 使用情况:SDK累计支持项目502个,云服务累计支撑项目374个

效率提升:单个项目复杂度大幅度提高的前提下,互动广告开发团队

支持项目数同比增长60%,支撑金额上涨94%(2012H1人力无增

长)

难度降低:单项目平均外包费用同比下降35%

2012上半年数据(半年内,仅列举本部门应用)

支撑70个抽奖活动,设置421万个奖品

支撑11个兑换码活动,共计162亿兑换码(行业之最)

Page 21: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

项目背景

解决方案与实践

效果对比与RIO分析

举例介绍

历程与启示

Page 22: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

举例:抽奖

一个常见的抽奖,一般步骤为 检查抽奖资格——积分/次数

检查奖品数量——品种/分布

检查中奖限制——频率/次数

随机中奖,更新奖品数量——并发控制

抽奖的准备工作 奖品数量——N种奖品,数量各异

奖品分布——时段/日期

抽奖的运营 数据导出

Page 23: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

未使用风车的抽奖逻辑代码

Page 24: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

使用了风车的抽奖逻辑代码

Page 25: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

HOW?

Page 26: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

项目背景

解决方案与实践

效果对比与RIO分析

举例介绍

历程与启示

Page 27: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

一些历程

团队磨合问题 季度会 + 双周会

SDK与云服务的对接生硬 引入运营平台

各类运行环境的开发与调试问题 支持各类环境,支持外包访问

从逻辑服务到安全与运营服务 引入各类安全相关服务与运营相关服务

收到了报警却不知道出问题的原因 从提供服务到提供解决方案

Page 28: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

一些启示

每种开发语言都有自己的长处和短处,与其费尽心思补齐短处,不如另辟蹊径

服务云端化不仅可以提升效率,更重要的是服务可控,包括服务部署、监控告警、版本升级、运营分析等

运营可视化让开发和运维人员更直观的配置各类服务、洞悉系统状态,及早发现隐患,从而提升运营质量

互联网产业提供的是服务,必须建立有效的立体监控体系,以保证服务质量

Page 29: Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境

Q & A

QQ:539300111 Weibo:黑手如来