雪 球 服 务 化

实 践 历 程

@唐福林 雪球首席架构师


twitter


雪 球 服 务 化

实 践 历 程

@唐福林 雪球首席架构师




2013
❑ 关于雪球,关于我
❑ 雪球服务化历程
❑ 未来与微服务化
❑ 思考和教训
大纲
2013
❑ 雪球 聪明的投资者都在这里
❑ web 1.0:新闻资讯,股价信息,K线图
❑ web 2.0:SNS 订阅,分享,聊天
❑ web 3.0:移动 APP,交易闭环
❑ 非互联网:资产管理,私募工场
❑ http://xueqiu.com/about
关于雪球
30%
2014 36% web1.0
k web2.0 sns
web3.0
about 

❑ 员工 100+ ,技术人员占一半
❑ 2014.9 C轮 $40M by RENN
❑ Java,Scala,Akka,Finagle,
Nodejs,Docker ,Hadoop
❑ 租用IDC机房自建私有云,正在往“公有
云+私有云”方向发展
关于雪球 100 9 C 4kw
Java Scala Akka Finagle Nodejs Docker Hadoop
IDC “ ” 

hr


❑ 前新浪微博架构师,微博ID @唐福林
❑ 微博短链 t.cn
❑ 微博计数器 redis,rediscounter
❑ 微博用户关系服务
❑ 微博稳定性、性能改进
关于我 2010 2015
Java V
❑ 雪球首席架构师,雪球ID @唐福林
❑ 性能,稳定性,代码质量改进
❑ 基础组件,微服务容器建设
❑ XDC 雪球数据中心
关于我 2015
ID @
服务化历程 - 雪球公司发展历程
2010 3 2011 11 2012 1 2013 12 2014 2
2014 5
2014 11 2015 5
A
2015 9


服务化历程 - 雪球技术发展历程
2012 2013 2014 2015
2012
❑ Snowball 碰到的问题
❑ 业务膨胀
❑ 代码增长
❑ 团队扩张
服务化历程 - 技术演进
snowball snowball 2012 2013
2013
❑ 对症下药
❑ 业务膨胀 —— 模块化,代码复用
❑ 代码增长 —— 引入 Scala
❑ 团队扩张 —— 推行工程师文化
服务化历程 - 技术演进 3


scala scala
scala
jvm
jar java bytecode jvm
scala java scala
scala java 1/5 1/10
服务化历程 - 技术演进


scala
docker
❑ 问题加剧
❑ 业务加速膨胀
❑ 代码加速增长
❑ 团队加速扩张
服务化历程 - 技术演进
❑ 问题加剧
❑ 稳定性,可用性
❑ 迭代速度,代码合并冲突
❑ 第三方依赖冲突
服务化历程 - 技术演进
git
❑ 对症下药
❑ 流量切分,独立部署
❑ 服务化拆分
❑ Docker 容器化
服务化历程 - 技术演进 



Docker
Docker 1.0
❑ 服务化框架选择
❑ 要求:支持Scala + 大厂验证过
❑ 选定:finagle
❑ twitter,tumblr,Pinterest etc
服务化历程 - 技术演进
dubbo
scala rpc scala java rpc
scala scala java java
finagle
finagle
finagle “ ”
rpc
❑ finagle 简单介绍
❑ 历史
❑ 功能
❑ 特性
服务化历程 - Finagle 介绍 twitter 2010 rpc 2011
twitter http http
proxy http api server thrift service service
cache finagle
server finagle client 

finagle client/server
❑ 多协议适配
❑ 标准的:连接池,失败检测重试,负载均
衡,监控统计,追踪,分区 etc
❑ Future,Service,Filter
服务化历程 - Finagle 介绍 

client server 



Future Future
callback Future 

Service service request
Future[Response]

Filter Filter service
❑ 试点第一个业务
❑ AntiSpam 反垃圾
❑ 用 Scala 重写业务逻辑
❑ Finagle-helper 包装 finagle,精简依赖
❑ 跑在 Docker 里
服务化历程 - 尝试 finagle 

2013 so far so good finagle 30
sbt nexus
artifacory antispam
❑ 试点第二个业务
❑ UserCenter 用户服务
❑ 用 Scala 重写业务逻辑 !!!
服务化历程 - 尝试 2014 

scala 

❑ 尝试阶段的经验总结
❑ RPC 拆分?Yes!
❑ Finagle 框架?Yes!!
❑ Scala 重写业务?No!!!
服务化历程 - 推广
rpc finagle
scala NO 

usercenter scala rpc
❑ 推广前的准备
❑ RPC 项目代码模板
❑ 单进程多Service支持
❑ TraceID 支持
服务化历程 - 推广 usercenter 2014




sbt project
thrift service
thrift backport
traceid
❑ Status 帖子评论
❑ Search 搜索
❑ Finance 股票
❑ Quote 行情
❑ etc
服务化历程 - 推广 2014 9 - 2015 1 

workaround


netty
http
❑ finagle 版本
❑ 6.12.1 - 6.18.0 - 6.24.0 - 6.26.0 -
6.30.0 - 6.31.0(昨天)
❑ 兼容性
❑ scala 版本
❑ 2.10 - 2.11 二进制不兼容
服务化历程 - 升级 finagle 2
2015 finagle
scala


scala rpc common
4 jar finagle_6.18_scala_2.10 finagle_6.18_scala_2.11
finagle_6.24_scala_2.10 finagle_6.24_scala_2.11
❑ 流量暴涨:部署多个集群,按业务分流
❑ 问题排查:简版 zipkin
❑ 开发测试:成套的sep,rc环境
服务化历程 - 服务治理 2015 1 A


zipkin
microscope 

docker
❑ 拆分遗留系统 Snowball
❑ 按业务独立部署
❑ 单进程多服务:同时提供 http 和 rpc
服务化历程 - 收尾


9
http api

http api rpc service rpc service
http
❑ Todo 当前的部署图
服务化历程 - 收尾 2015.9
❑ 当前方案的问题
❑ Scala 团队人员更替
❑ Finagle 迭代速度
❑ Scala,Finagle 向后兼任性
服务化历程 - 未来 hold scala
finagle twitter
finagle


scala
finagle
no zuo no die why you try
❑ 简单版本 rpc 框架尝试
❑ 基于 Jsonrpc4j + Spring
❑ Java Interface + @RPCServer
❑ http client
服务化历程 - 未来 rpc
❑ 简单版本 rpc 框架尝试
❑ Production features
❑ 成熟度
❑ 迁移成本
服务化历程 - 未来 motan
❑ RPC 框架部分不是重点
❑ 重点
❑ 单节点的易用性
❑ 服务的可用性
服务化历程 - 未来 rpc
rpc
❑ 微服务化
❑ 微服务容器
服务化历程 - 未来
❑ 业界定义
❑ 没有明确定义
❑ 比 soa 更轻量级
❑ 单个服务粒度更小
微服务化 Microservices = SOA -ESB -SOAP -Centralized governance/persistence -Vendors +REST/
HTTP +CI/CD +DevOps +True Polyglot +Containers +PaaS
❑ 我们自己的理解和努力的方向
❑ 重点在单节点
❑ 节点之间的调用,性能等,在我们的环
境下不是最重要的
微服务化
❑ 我们的尝试
❑ xueqiu-server
❑ docker + tomcat
❑ 公共第三方 lib ,rpc 框架
❑ 内部开发的基础lib库,包装库
微服务化 docker tomcat + lib + rpc
❑ 预计未来雪球微服务的样子
微服务化 docker + jvm + spring boot + tomcat + finagle + jsonrpc4j + lib
+ war

jvm 3
❑ 预计未来雪球微服务的样子
微服务化 docker + jvm + spring boot + tomcat + finagle + jsonrpc4j + lib
+ war

jvm 3
❑ 服务化的诱惑
❑ 要不要做
❑ 要不要自己做
❑ 要不要专人做
思考和教训 



❑ 高性能的诱惑
思考和教训 http rest api
❑ 稳定性,可用性
思考和教训 soa 

❑ 尝试新技术,技术先进性与技术栈一致性
思考和教训
lib
思考和教训 ant+ivy
maven gradle sbt 4
maven sbt
gradle
❑ 技术深度与技术新鲜度
思考和教训
go
❑ 团队扩张,成员更替
思考和教训
scala 4
scala java node
❑ 个人兴趣与团队合作
思考和教训
❑ 使用 <> 用好!
思考和教训
java spring
spring
3 spring
❑ 细节,细节,细节!
思考和教训 finagle
retry=3
2 timeout cancel
100ms timeout 50ms
150 ms
100ms 150ms
❑ 规范,规则,规定
思考和教训
❑ 上新业务时的考虑
思考和教训 rpc 

https rest api spring boot
Keep	Calm	
And	
Ask	Me	Anything

More Related Content

PPTX
移动时代端到端的稳定性保障经验谈
PDF
股市动荡下的雪球架构进化历程
PDF
雪球大数据体系实践
PPTX
微服務的基礎建設 - Service Discovery, Andrew Wu
PDF
美团网技术部 - 基于OpenvSwitch/Openflow的云平台网络安全实践
PPT
基于Greasemonkey的Firefox浏览器扩展
PDF
一个Nosql的故事
PPTX
订阅互联网
移动时代端到端的稳定性保障经验谈
股市动荡下的雪球架构进化历程
雪球大数据体系实践
微服務的基礎建設 - Service Discovery, Andrew Wu
美团网技术部 - 基于OpenvSwitch/Openflow的云平台网络安全实践
基于Greasemonkey的Firefox浏览器扩展
一个Nosql的故事
订阅互联网

Similar to 雪球服务化实践历程.Print (20)

PPT
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
PDF
移动互联网服务端架构介绍
PDF
91APP: 從 "零" 開始的 DevOps
PPT
IDC大会:新浪SAE架构与设计
PDF
Top100summit前端的云时代支付宝前端平台架构 王保平
PDF
Yog Framework
PDF
twMVC 47_Elastic APM 的兩三事
PDF
Weibo lamp improvements
PPTX
Bruce-輕鬆上手Asp.net web api 2.1.2
PPTX
輕鬆上手ASP.NET Web API 2.1.2
PDF
Spark在苏宁云商的实践及经验分享
PPT
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
PDF
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
PDF
Nodejs & NAE
PDF
海通证券金融云思考与实践(数据技术嘉年华2017)
PDF
快!快!快! 互联网第一条军规
PDF
Gops2016 云端基于Docker的微服务与持续交付实践
PPTX
How do we manage more than one thousand of Pegasus clusters - engine part
PPTX
Full stack-development with node js
PDF
twMVC#44 讓我們用 k6 來進行壓測吧
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
移动互联网服务端架构介绍
91APP: 從 "零" 開始的 DevOps
IDC大会:新浪SAE架构与设计
Top100summit前端的云时代支付宝前端平台架构 王保平
Yog Framework
twMVC 47_Elastic APM 的兩三事
Weibo lamp improvements
Bruce-輕鬆上手Asp.net web api 2.1.2
輕鬆上手ASP.NET Web API 2.1.2
Spark在苏宁云商的实践及经验分享
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
Nodejs & NAE
海通证券金融云思考与实践(数据技术嘉年华2017)
快!快!快! 互联网第一条军规
Gops2016 云端基于Docker的微服务与持续交付实践
How do we manage more than one thousand of Pegasus clusters - engine part
Full stack-development with node js
twMVC#44 讓我們用 k6 來進行壓測吧
Ad

More from fulin tang (12)

PPTX
我的奋斗 @ weibo
PDF
Redis大数据之路 dtcc-唐福林
PDF
新浪微博开放平台中的 Redis 实践
PDF
Redis 坑
PDF
Gizzard, DAL and more
PDF
音乐搜索的极致
PDF
基于Lucene的站内搜索 Beta
ODP
基于 lucene 的站内搜索
PPT
Voldemort Intro Tangfl
PPT
基于Lucene的站内搜索
ODP
基于Lucene的站内搜索
PDF
毕业设计-Slide
我的奋斗 @ weibo
Redis大数据之路 dtcc-唐福林
新浪微博开放平台中的 Redis 实践
Redis 坑
Gizzard, DAL and more
音乐搜索的极致
基于Lucene的站内搜索 Beta
基于 lucene 的站内搜索
Voldemort Intro Tangfl
基于Lucene的站内搜索
基于Lucene的站内搜索
毕业设计-Slide
Ad

雪球服务化实践历程.Print

  • 1. 雪 球 服 务 化
 实 践 历 程
 @唐福林 雪球首席架构师 twitter 雪 球 服 务 化
 实 践 历 程
 @唐福林 雪球首席架构师 2013 ❑ 关于雪球,关于我 ❑ 雪球服务化历程 ❑ 未来与微服务化 ❑ 思考和教训 大纲 2013
  • 2. ❑ 雪球 聪明的投资者都在这里 ❑ web 1.0:新闻资讯,股价信息,K线图 ❑ web 2.0:SNS 订阅,分享,聊天 ❑ web 3.0:移动 APP,交易闭环 ❑ 非互联网:资产管理,私募工场 ❑ http://xueqiu.com/about 关于雪球 30% 2014 36% web1.0 k web2.0 sns web3.0 about ❑ 员工 100+ ,技术人员占一半 ❑ 2014.9 C轮 $40M by RENN ❑ Java,Scala,Akka,Finagle, Nodejs,Docker ,Hadoop ❑ 租用IDC机房自建私有云,正在往“公有 云+私有云”方向发展 关于雪球 100 9 C 4kw Java Scala Akka Finagle Nodejs Docker Hadoop IDC “ ” hr ❑ 前新浪微博架构师,微博ID @唐福林 ❑ 微博短链 t.cn ❑ 微博计数器 redis,rediscounter ❑ 微博用户关系服务 ❑ 微博稳定性、性能改进 关于我 2010 2015 Java V
  • 3. ❑ 雪球首席架构师,雪球ID @唐福林 ❑ 性能,稳定性,代码质量改进 ❑ 基础组件,微服务容器建设 ❑ XDC 雪球数据中心 关于我 2015 ID @ 服务化历程 - 雪球公司发展历程 2010 3 2011 11 2012 1 2013 12 2014 2 2014 5 2014 11 2015 5 A 2015 9 服务化历程 - 雪球技术发展历程 2012 2013 2014 2015 2012
  • 4. ❑ Snowball 碰到的问题 ❑ 业务膨胀 ❑ 代码增长 ❑ 团队扩张 服务化历程 - 技术演进 snowball snowball 2012 2013 2013 ❑ 对症下药 ❑ 业务膨胀 —— 模块化,代码复用 ❑ 代码增长 —— 引入 Scala ❑ 团队扩张 —— 推行工程师文化 服务化历程 - 技术演进 3 scala scala scala jvm jar java bytecode jvm scala java scala scala java 1/5 1/10 服务化历程 - 技术演进 scala docker
  • 5. ❑ 问题加剧 ❑ 业务加速膨胀 ❑ 代码加速增长 ❑ 团队加速扩张 服务化历程 - 技术演进 ❑ 问题加剧 ❑ 稳定性,可用性 ❑ 迭代速度,代码合并冲突 ❑ 第三方依赖冲突 服务化历程 - 技术演进 git ❑ 对症下药 ❑ 流量切分,独立部署 ❑ 服务化拆分 ❑ Docker 容器化 服务化历程 - 技术演进 Docker Docker 1.0
  • 6. ❑ 服务化框架选择 ❑ 要求:支持Scala + 大厂验证过 ❑ 选定:finagle ❑ twitter,tumblr,Pinterest etc 服务化历程 - 技术演进 dubbo scala rpc scala java rpc scala scala java java finagle finagle finagle “ ” rpc ❑ finagle 简单介绍 ❑ 历史 ❑ 功能 ❑ 特性 服务化历程 - Finagle 介绍 twitter 2010 rpc 2011 twitter http http proxy http api server thrift service service cache finagle server finagle client finagle client/server ❑ 多协议适配 ❑ 标准的:连接池,失败检测重试,负载均 衡,监控统计,追踪,分区 etc ❑ Future,Service,Filter 服务化历程 - Finagle 介绍 client server Future Future callback Future Service service request Future[Response] Filter Filter service
  • 7. ❑ 试点第一个业务 ❑ AntiSpam 反垃圾 ❑ 用 Scala 重写业务逻辑 ❑ Finagle-helper 包装 finagle,精简依赖 ❑ 跑在 Docker 里 服务化历程 - 尝试 finagle 2013 so far so good finagle 30 sbt nexus artifacory antispam ❑ 试点第二个业务 ❑ UserCenter 用户服务 ❑ 用 Scala 重写业务逻辑 !!! 服务化历程 - 尝试 2014 scala ❑ 尝试阶段的经验总结 ❑ RPC 拆分?Yes! ❑ Finagle 框架?Yes!! ❑ Scala 重写业务?No!!! 服务化历程 - 推广 rpc finagle scala NO usercenter scala rpc
  • 8. ❑ 推广前的准备 ❑ RPC 项目代码模板 ❑ 单进程多Service支持 ❑ TraceID 支持 服务化历程 - 推广 usercenter 2014 sbt project thrift service thrift backport traceid ❑ Status 帖子评论 ❑ Search 搜索 ❑ Finance 股票 ❑ Quote 行情 ❑ etc 服务化历程 - 推广 2014 9 - 2015 1 workaround netty http ❑ finagle 版本 ❑ 6.12.1 - 6.18.0 - 6.24.0 - 6.26.0 - 6.30.0 - 6.31.0(昨天) ❑ 兼容性 ❑ scala 版本 ❑ 2.10 - 2.11 二进制不兼容 服务化历程 - 升级 finagle 2 2015 finagle scala scala rpc common 4 jar finagle_6.18_scala_2.10 finagle_6.18_scala_2.11 finagle_6.24_scala_2.10 finagle_6.24_scala_2.11
  • 9. ❑ 流量暴涨:部署多个集群,按业务分流 ❑ 问题排查:简版 zipkin ❑ 开发测试:成套的sep,rc环境 服务化历程 - 服务治理 2015 1 A zipkin microscope docker ❑ 拆分遗留系统 Snowball ❑ 按业务独立部署 ❑ 单进程多服务:同时提供 http 和 rpc 服务化历程 - 收尾 9 http api http api rpc service rpc service http ❑ Todo 当前的部署图 服务化历程 - 收尾 2015.9
  • 10. ❑ 当前方案的问题 ❑ Scala 团队人员更替 ❑ Finagle 迭代速度 ❑ Scala,Finagle 向后兼任性 服务化历程 - 未来 hold scala finagle twitter finagle scala finagle no zuo no die why you try ❑ 简单版本 rpc 框架尝试 ❑ 基于 Jsonrpc4j + Spring ❑ Java Interface + @RPCServer ❑ http client 服务化历程 - 未来 rpc ❑ 简单版本 rpc 框架尝试 ❑ Production features ❑ 成熟度 ❑ 迁移成本 服务化历程 - 未来 motan
  • 11. ❑ RPC 框架部分不是重点 ❑ 重点 ❑ 单节点的易用性 ❑ 服务的可用性 服务化历程 - 未来 rpc rpc ❑ 微服务化 ❑ 微服务容器 服务化历程 - 未来 ❑ 业界定义 ❑ 没有明确定义 ❑ 比 soa 更轻量级 ❑ 单个服务粒度更小 微服务化 Microservices = SOA -ESB -SOAP -Centralized governance/persistence -Vendors +REST/ HTTP +CI/CD +DevOps +True Polyglot +Containers +PaaS
  • 12. ❑ 我们自己的理解和努力的方向 ❑ 重点在单节点 ❑ 节点之间的调用,性能等,在我们的环 境下不是最重要的 微服务化 ❑ 我们的尝试 ❑ xueqiu-server ❑ docker + tomcat ❑ 公共第三方 lib ,rpc 框架 ❑ 内部开发的基础lib库,包装库 微服务化 docker tomcat + lib + rpc ❑ 预计未来雪球微服务的样子 微服务化 docker + jvm + spring boot + tomcat + finagle + jsonrpc4j + lib + war jvm 3
  • 13. ❑ 预计未来雪球微服务的样子 微服务化 docker + jvm + spring boot + tomcat + finagle + jsonrpc4j + lib + war jvm 3 ❑ 服务化的诱惑 ❑ 要不要做 ❑ 要不要自己做 ❑ 要不要专人做 思考和教训 ❑ 高性能的诱惑 思考和教训 http rest api
  • 14. ❑ 稳定性,可用性 思考和教训 soa ❑ 尝试新技术,技术先进性与技术栈一致性 思考和教训 lib 思考和教训 ant+ivy maven gradle sbt 4 maven sbt gradle
  • 16. ❑ 使用 <> 用好! 思考和教训 java spring spring 3 spring ❑ 细节,细节,细节! 思考和教训 finagle retry=3 2 timeout cancel 100ms timeout 50ms 150 ms 100ms 150ms ❑ 规范,规则,规定 思考和教训