王志强 喜马拉雅服务化实践

QCon大会

2018/10/20 发布于 技术 分类

文字内容
1. 喜⻢马拉雅服务化实践 王志强 技术中⼼心
2. 在此键⼊入姓名 在此键⼊入Tittle
3. ⽬目录 01 03 起步之路路 02 升级之路路 04 ⾃自研之路路 体会
4. 01 起步之路路:内部状态
5. 01 起步之路路:挑战 ⽤用户量量快速增⻓长 业务越来越多 维护迭代复杂
6. 01 起步之路路:选择 开源? ⾃自研?
7. 02 ⾃自研之路路:⽬目标 ⽔水平扩展 监控预警
8. 02 ⾃自研之路路:⽔水平扩展 zookeeper服务注册发现 临时节点 admin <> client <> <> zookeeper server <> <>
9. 02 ⾃自研之路路:发布系统 cmdb统⼀一发布流程 ⽆无缝发布 灰度发布 ᦡᗝ๐‫ۓ‬ᇫாӧ‫ݢ‬አ 1 4 ᦡᗝ๐‫ۓ‬ᇫா‫ݢ‬አ cmdb 2 3 ๐‫ݢۓ‬አ௔༄ັ ᯿‫ސ‬๐‫ۓ‬
10. 02 ⾃自研之路路:⽇日志收集与监控 DOHUW ୑ଉԪկ spark- ᦇᓒ੶ streaming PHWULFV kafka තᵞ੶ YLHZ ਂ‫ ੶ؙ‬es opentsdb hbase flume flume-agent හഝතᵞᶼᦄཛྷࣘࢶ
11. 02 ⾃自研之路路:监控维度 调⽤用链数据 内存、GC、堆栈 线程池 ServiceA ᧗࿢ trace_id=1VSDQBLG SDUHQWBVSDQBLG QXOO ᬬࢧ trace_id=1VSDQBLG SDUHQWBVSDQBLG QXOO ᬬࢧ trace_id=1VSDQBLG SDUHQWBVSDQBLG QXOO ᧗࿢ trace_id=1VSDQBLG SDUHQWBVSDQBLG QXOO ServiceB ServiceD 连接池 …… ᬬࢧ trace_id=1VSDQBLG SDUHQWBVSDQBLG  ᧗࿢ trace_id=1VSDQBLG SDUHQWBVSDQBLG  ServiceC
12. 02 ⾃自研之路路:调⽤用埋点 业务代码⽆无侵⼊入 javaagent与aspectj magic 2bytes sequence 4bytes method 2+mbytes body nbytes tracedata xbytes
13. 02 ⾃自研之路路:治理理 服务依赖关系计算 防⽌止循环依赖 控制调⽤用深度
14. 02 ⾃自研之路路:业务隔离 基于调⽤用⽅方的隔离 group scope mobile-service group=track scope=GHIDXOW mobile-service group=track scope= GHIDXOW track-service scope=GHIDXOW track-service scope=GHIDXOW open-service group=track scope=open track-service scope=RSHQ
15. 02 ⾃自研之路路:成果 业务⾃自由扩展 流量量⽆无损发布 实时监控预警
16. 02 ⾃自研之路路:不不⾜足 性能还有提升空间 异步调⽤用代码编写复杂 路路由不不够灵活 ⽆无⾃自动熔断 ⼤大流量量业务启动报错 ⽆无事务⽀支持
17. 03 升级优化:集成netty 重新开发idl代码⽣生成器器 命令⾏行行⼯工具,⽀支持maven插件 简化异步代码编写 优化内存使⽤用
18. 03 升级优化:集成netty client server 异步tracedata传递 ӱ‫ۓ‬ᕚᑕ RpcContext ThreadLocal tracedata 1 ,2ᕚᑕ RpcMessage Header 6 2 rpc payload 5 QHWZRUN ӱ‫ۓ‬ᕚᑕ RpcContext ThreadLocal 3 4 ,2ᕚᑕ RpcMessage Header ៧ፏ ဳғᓞ१փ᭓tracedata(traceid̵spanid̵serviceidᒵ)
19. 03 升级优化:灵活路路由 router:选择集群 cluster:集群策略略 failfast splitmerge failover hybrid loadbalance:选择实例例 random roundrobin consistencehash router cluster loadbalance serialize transport client processor serialize transport server
20. 03 升级优化:灵活路路由 split-merge 实现Spliter和Merger client <<1>> 6SOLW0HUJH&OXVWHU Spliter Merger Loadbalance <<6,8,9>> <<1>> <<3,5,7>> track cache track cache track cache
21. 03 升级优化:快速失败 熔断降级 超时连接释放 超时时间调整
22. 03 升级优化:熔断 实例例⽅方法级别 调⽤用⽅方强制熔断 慢恢复 client client client client ᆤෙ ᑁ‫ݸ‬ ၞᰁറၥ ྯᵍᑁी‫ے‬ᕅ !!ŏ ၞᰁ҅௩॔ྋଉ server server server server
23. 03 升级优化:服务端限流 io-loop ⾃自定义业务线程池个数及⼤大⼩小 核⼼心业务⽅方法独⽴立线程池 DefaultThreadPool ThreadPool Chooser ⾮非核⼼心业务⽅方法慢进⼊入隔离线程池 IsolationThreadPool CustomThreadPool 0 CustomThreadPool 1 … CustomThreadPool N
24. 03 升级优化:慢启动 流量量缓慢分配 ๦᯿  client ဳғ‫ۖސ‬෸ᳩԅW WV҅๦᯿ V WV҅๦᯿SRZ W V W҅๦᯿  server newserver
25. 03 升级优化:tcc事务⽀支持 集成tcc-transaction ⽀支持spring注解配置
26. 03 升级优化:现状 接⼊入应⽤用800+ 实例例数4000+ 内部⽇日均调⽤用量量500亿+
27. 04 体会 调⽤用⽅方与被调⽤用⽅方互相不不能完全信任 分布式环境更更需要集中管理理 控制调⽤用深度,不不宜太深 多级缓存,提⾼高命中率
28. 04 体会:回顾 01 起步之路路 跨语⾔言 ⻓长连接 基本的负载均衡 可⽤用性 02 ⾃自研之路路 ⽆无缝发布 ⾃自由增减实例例 监控预警 实例例隔离 扩展性 可⽤用性 03 升级之路路 04 未来之路路 集成netty 与其他系统深度集成 简化异步代码编写 加强治理理能⼒力力 熔断 提升运营效率 限流(线程隔离) 慢启动 易易⽤用性 稳定性 产品化 ⾼高性能
29. 在此键⼊入姓名 在此键⼊入Tittle
30. 在此键⼊入姓名 在此键⼊入Tittle
31. Thanks