股市动荡下的雪球架构进化历程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
q 雪球总体架构
q 雪球架构优化历程
q 一些总结和感想
2015年A股大盘走势
IM 推送消息数
外网带宽消耗
挑战
q 小
VS 大:
q 小:小公司的体量,团队小,机器规模小
q 大:堪比大公司的业务线数量,业务复杂
度,瞬间峰值冲击
挑战
q 快速增长 q 移动互联网
+ 金融,风口
q A股大盘剧烈波动
优化
q 一个单一架构的大服务
VS 一堆架构各异
的小服务
总结
q 高大上的架构 q 优化到极致
VS 可以工作的架构
VS 优化到可以接受
总结
q 重写 q 重构 q 裱糊匠
q 最小改动
总结
q 数据指标!数据指标!数据指标!
q qps
q p99 q error q USE
rate
method:Utilization, Saturation,error
q
前端
q
Hybrid APP,端到端可用性监控
q
接入层
q
轮询Server优化
q
业务层
q
股价提醒,IM 推送,注册逻辑 …
q
通用优化
q
JDK8,config service,metrics
Hybrid APP
q 雪球App实践—构建灵活、可靠的
Hybrid框架
q http://wot.51cto.com/2015mobile/ q http://down.51cto.com/data/
q q
q
Quote Server
q 开盘期间,每个在线客户端(包括web)
每1秒轮询一次当前用户关注的股票的价 格变动情况 + 本地内存存储
q Netty
q 主动更新
股价提醒性能优化
50w 粉丝(招
q 雪球上热门股票拥有超过
商银行,苏宁云商)
q 粉丝可以设置:当这支股票涨幅或跌幅超
过 x%(默认7%)时提醒我
q 微博计数器
q 微博用户关系服务 q 微博稳定性、性能改进
关于我
q 雪球首席架构师,雪球ID
@唐福林
q 性能,稳定性,代码质量改进 q 基础组件,微服务容器建设
q XDC
雪球数据中心
大纲
q 关于雪球,关于我
q 雪球总体架构
q 雪球架构优化历程
q 一些总结和感想
雪球总体架构
大纲
q 关于雪球,关于我
q 曾经连续3天,每天超过1000股跌停,证
监会开了一个会,于是接下来2天超过 1000股涨停
股价提醒性能优化(2)
q 原来做法:股票涨(跌)x%,扫一遍粉
丝列表,过滤出所有符合条件的粉丝,推 送消息
q 新做法:预先建立索引,开盘期间载入内
存
q
1%:uid1,uid2
q
q
2%:uid3,uid4,uid5
种状态同步
IM 推送性能优化(2)
q q
推送功能:瞬间峰值性能第一 优化
q q
分配更多资源:推送账号actor池 精简业务逻辑:重复消息只存id,实时提醒 内容不推历史设备,不更新非活跃设备的 Session列表等等 本地缓存:拉黑等无法精简的业务逻辑迁 移到本地缓存
q
q
优化代码:异步加密存储,去除不合理的 akka 使用
股市动荡下的 雪球架构进化历程
大纲
q 关于雪球,关于我
q 雪球总体架构
q 雪球架构优化历程
q 一些总结和感想
关于雪球
100+ ,技术人员占一半 C轮 $40M by RENN
q 员工
q 2014.9
q Java,Scala,Akka,Finagle,
Nodejs,Docker ,Hadoop 云+私有云”方向发展
q Config
Center和开关降级
通用优化(2)
q 统一所有client
Hale Waihona Puke Baiduq
redis, mysql, http, mq
q 统一metrics体系
q
dropwizard + logback appender
大纲
q 关于雪球,关于我
q 雪球总体架构
q 雪球架构优化历程
q 一些总结和感想
总结
现方式也需要跟着变化
感想
q 技术人员的自我修养: q 知道什么是好的结果 q 知道如何去追求好的结果
q 能够给出好的结果
感想
q 技术方案: q 20倍设计,10倍实现,3倍部署 q 扩展性:凡事留一线,以后好相见
感想
q 技术实现:
q DevOps:上线后还是你自己维护的项目,
实现的时候注意各种出错和边界的处理
q 用户投诉的时候需要你去排查,实现的时候
一定要记得可复现,可追踪
q 快速实现,不是“随便实现”,万一火了呢:
性能,方便扩容
2080769
q 原生框架
+ 离线H5页面
APP端可用性监控
q 《移动时代端到端的稳定性保障》 q 每个请求里带上前一个请求的结果
q q
succ or fail : 1 char 失败原因:0 - 1 char 请求接口编号: 1 char 请求耗时:2 - 3 char 其它:网络制式,etc
(Velocity 2013, Performance Methodologies for Production Systems,Brendan Gregg)
总结
q 技术栈的一致性和简单性
总结
q 能用cache的地方绝不用db q 能异步的地方,绝不同步
总结
q 特事特办:业务在发展,需求在变化,实
q 租用IDC机房自建私有云,正在往“公有
关于雪球
q 沪深港美2w+股票 q 债券,期货,基金,比特币,信托,理财,
私募。。。
q 百万组合,实时调仓信息 q 百万日活,每天4亿API调用(不算自动
轮询接口)
关于我
q 前新浪微博架构师,微博ID q 微博短链
@唐福林
t.cn
redis,rediscounter
3%:uid6
q 问题:有时候嫌太及时了:频繁跌停,打
开跌停,再跌停,再打开。。。的时候
IM 推送性能优化
q 聊天功能:送达率第一 q 雪球IM:Netty q Akka
+ 自定义网络协议
: 每个在线client一个actor 在线情况下使用推模式
q 推模式:client
q 多端同步:单账号多端可登录,并保持各
q 解决方案: q Hazelcast
In-Memory Data Grid map
q replication
q java
-XX:+DisableAttachMechanism -XX:-UsePerfData
组合净值计算性能优化
q 一支股票可能在超过20万个组合里(南车
北车中车,暴风科技)
q 离线计算,存储计算后的结果 q 股价3秒变一次,涉及到这支股票的所有
注册模块优化(2)
q 优化: q redis
store:昵称,手机号
q 本地存储:昵称禁用词
q 业务流程优化:DB
insert 操作同步改
异步
前置模块HA
q 合作方合规要求:业务单元部署到合作方
内网,用户的敏感数据不允许离开进程内 存
q 业务本身要求:业务单元本身为有状态服
务,业务单元高可用
前置模块HA(2)
注册模块优化
q 2015.7.10/17/24
中国好声音
q 预估广告播出期间2小时新注册100万
q 压测发现
DB 成为瓶颈:
cache miss > 40% where like 模糊查询 cache miss > 80% insert
q 昵称检测
q 昵称禁用词
q 手机号是否注册 q 注册新用户:5
组合理论上也需要每 3 秒重新计算一次
组合净值计算性能优化(2)
q Akka
q 分级
+ 批量
q 构建高可用的雪球投资组合系统技术实践 q http://sz2015.archsummit.com/
speakers/201825
通用优化
q JDK6
q
升级 JDK8
-XX:+ParallelRefProcEnabled -XX:CMSClassUnloadingEnabled