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

股市动荡下的雪球架构进化历程

3 419 vues

Publié le

SACC2015 ( http://sacc.it168.com/ ) 上,“互联网金融”话题的分享

Publié dans : Ingénierie
  • Soyez le premier à commenter

股市动荡下的雪球架构进化历程

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

×