AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

谈谈服务治理 by 许式伟@七牛

发布者 microservice
发布于 1470616476240  浏览 6796 关键词 微服务, Go 
分享到

第1页

服务治理

许式伟@七牛
  2016-­‐4-­‐22



第2页

自我介绍

• 关于许式伟
 

– 七牛云CEO
  – qlang
 语言创始人
  – 前Go语言大中华区首席布道师
  – 前盛大祥云计划、盛大网盘发起人
  – 前金山实验室发起人
  – 前WPS
 Office首席架构师
 

• 关于七牛云
 

– 立足富媒体(存储/数据处理/CDN/视频直播),打造综合 云服务平台
 

– 致力于改善中国的创新环境,共同完成中国制造=>中 国创造



第3页

关于qlang

• A
 script
 language
 cooperaFng
 with
 Go
  • Go-­‐alike
 syntax
  • Calling
 Go
 funcFons
 without
 any
 wrapper
 

– So,
 standard
 libraries
 implemented
 already
 by
 Go
 

• Support
 most
 of
 Go
 features,
 including
 

– for
 range
  – string,
 slice,
 map,
 chan
  – gorouFne,
 closure,
 defer
  – TODO:
 select
 

• Homepage:
 hTps://github.com/qiniu/qlang
 



第4页

import
 "fmt"
  import
 "log"
  import
 "strings"
  
  import
 "qlang.io/qlang.v2/qlang"
  import
 
 
 _
 "qlang.io/qlang/builFn"
 
  var
 strings_Exports
 =
 map[string]interface{}{
  
 
 
 
 "replacer":
 strings.NewReplacer,
  }
  
  func
 main()
 {
  
  
 
 
 
 qlang.Import("strings",
 strings_Exports)
  
 
 
 
 lang,
 err
 :=
 qlang.New(qlang.InsertSemis)
  
 
 
 
 if
 err
 !=
 nil
 {
 


 log.Fatal(err)
  
 
 
 
 }
  
  
 
 
 
 err
 =
 lang.SafeEval(`x
 =
 strings.replacer("?",
 "!").replace("hello,
 worldjQuery110209282160331590505_1470616483320?")`)
  
 
 
 
 if
 err
 !=
 nil
 {
 


 log.Fatal(err)
  
 
 
 
 }
  
  
 
 
 
 v,
 _
 :=
 lang.Var("x")
  
 
 
 
 fmt.Println(v)
 //
 Output:
 hello,
 world!!!
  }



第5页

话题来由:服务治理=?

• 互联网的胜利
 

– 从娱乐为主到百姓日常生活
  – 到治病救人(领域越来越严肃)
 

• 服务端程序员的特殊职责:on
 call
 

– 服务光考虑完成功能是不行的
  – 要为跑得好做很多很多准备
 

• 服务治理
 

– 我们试图用系统化的方法,达到
 

• 让系统有更高的可用性(越来越好的稳定性)
  • 让每个服务只需要很傻就可以(业务开发更容易)
 



第6页

服务治理的问题域

• 服务发现与负载均衡
  • 配置中心化及变更管理
  • 服务监控与扩容缩容
  • 授权与防攻击
 

– 不能一台机器被攻下所有机器遭殃
 

• 服务自我保护(不能被某些客户拖垮)
  • 服务降级(放弃一些不重要的特性)
  • 上线验证与灰度发布
  • 错误分析与调用链跟踪
  • 机器负载与服务实例的调度
  • …
 



第7页

服务

• SOA
 (service-­‐oriented
 architecture)
  • Microservice
 architecture
 

– hTp://marFnfowler.com/arFcles/ microservices.html
 

• API
 based
 architecture



第8页

微服务



第9页

传统组织



第10页

微服务化组织



第11页

服务发现

• 为什么需要服务发现?
 

– 服务的扩容缩容
  – 服务实例的调度
 

• 服务迁移
 

• 我应该把请求发给谁?
 

– 负载均衡
 



第12页

服务发现



第13页

服务发现:客户端(Smart
 Client)



第14页

服务发现:负载均衡器



第15页

Smart
 client
 vs.
 Load
 balancer

• Smart
 client
 

– 更好的性能*
 

• Load
 balancer
 (API
 gateway)
 

– 更好的治理能力



第16页

服务发现与负载均衡

• 建议方式
 

– 用一个 Service
 IP
 表征服务位置
  – 由 Load
 balancer
 (API
 gateway)
 做负载均衡,而

不是
 Smart
 clien服t务
  监控与扩容缩容
  – 尽可能不影响网络性能,所以 Load
 balancer
 服

务最好是分布式的(每台物理机有一个)
 

• 参考实现:Kubernetes



第17页

过载保护

• 资源
 

– Socket
 connecFons
  – File
 handles
  – Network,
 Disk
 I/O,
 CPU,
 Memory
  – …
 

• 过载保护措施
 

– 自动扩容
  – 主动拒绝一部分请求



第18页

自动扩容与过载保护

• 自动扩容是复杂的
 

– 过载有可能是业务发展好,也可能是系统异常
  – 例子
 

• 自动扩容的条件是:Socket
 connecFons
 >
 Limit
 

– 问题在哪?
 

• 有可能过载是由于后端的数据库慢了
  • 自动扩容可能反而会加大数据库压力,从而系统更

加异常



第19页

自动扩容

• 建议方式
 

– 要区分好请求与坏请求
 (SLA)
 

• code
 =
 200,
 duraFon
 <
 T0
 

– 好请求增加才自动扩容;坏请求增加应该报警
  – 无论如何,自动扩容要设置扩容上限
 

• 比如
 2*N
 (其中N为日常该服务的实例数)



第20页

过载保护:拒绝部分请求

• 系统异常情况下,拒绝部分请求是服务自 我保护的重要机制
 

– 什么情况下触发保护?
  – 应该丢弃哪些请求?



第21页

过载保护:拒绝部分请求

• 假设:N
 =
 告警值
  • 那么
 

– 保护时机:资源到达 N*2 时进行过载保护
 

• 要保证系统处于过载状态时告警仍然还在,而不是 因为过载保护告警自动消失了
 

– 拒绝哪些请求?
 

• 最简单:拒绝新请求
  • 最直接:干掉最老请求,接受新请求
  • 最聪明:预测新请求是否是坏请求,如果是就干掉



第22页

服务降级

• 当过载保护机制失效时,考虑服务降级
 

– 为重要请求独立保证资源
 

• 例如:为保护读请求不受影响,独立分配只读的数 据库作为资源
 

– 主动放弃不重要的请求
 

• 例如:所有写请求直接丢弃



第23页

拓扑发现及故障定位

• AutomaFcally
 discover
 cluster
 topology
  • Find
 root
 cause
 of
 failure
  • Recover
 service
 as
 fast
 as
 possible



第24页

七牛求才

• 地点:北京/上海
 

– 技术总监
  – 架构师
  – 资深研发
 

• 技术领域:
 

– 服务治理
  – 富媒体/存储/直播
  – 容器/服务端中间件/大数据
 

• 邮件:hr@qiniu.com
  • 微信:xushiwei
 (注明七牛求才)
 



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。