AirJD 焦点
AirJD

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

微服务,大探险-使用微服务架构改造企业核⼼心业务系统的实践 by 王磊@ThoughtWorks

发布者 microservice
发布于 1445822338203  浏览 5713 关键词 微服务, 架构 
分享到

第1页

微服务,⼤大探险

使⽤用微服务架构改造企业核⼼心业务系统的实践



第2页

关于我



⺩王磊
 @ThoughtWorks
 

⾸首席咨询师
  wldandan.github.com



《基于微服务架构,改造企业核⼼心系统之实践》 《从单块架构到微服务架构》



第3页

3



第4页

⼀一些数据

30 3X

10X



第5页

⼀一年前......





第6页

10万元合同



3.5⼈人天



第7页

4亿元



jQuery1102024019084767259258_1445822365693jQuery1102002005033684268054_1445822467347?



第8页

4亿元



53⼈人年



第9页

CRM

⽤用户界⾯面层 业务CR逻M辑层 数据访问层





第10页

CRM



400KLoc



10+members



30%

50mins



3Day





第11页

⾯面临的挑战



维护成本⾼高 反馈周期⻓长

部署周期⻓长





第12页

改造策略

1 最⼩小修改 2 功能剥离 3 数据解耦 4 渐进替换





第13页

⼀一年后......





第14页

每10万元合同

-71— 1⼈人天



3.5⼈人天



CRM
 IT团队成员



-30



10成员



7成员



持续集成+构建



-64



50分钟



18分钟



部署周期

-91 2⼩小时



3天



第15页

⺫⽬目前的系统



产品服务



合 同



⽤用户服务







线







署 系 统



合同存储



合同
  传输



合同⽣生成



合同
  服务



CRM

合 同 管 理 系 统





第16页

⺫⽬目前的系统



产品服务



合 同



⽤用户服务







线







署 系 统



合同存储



合同
  传输



合同⽣生成



合同
  服务



CRM

合 同 管 理 系 统





第17页

微服务 探索之路



第18页

微服务?



第19页

19



第20页

■ ⼩小,
 且专注于做⼀一件事情 ■ 独⽴立的进程中 ■ 轻量级的通信机制 ■ 松耦合、独⽴立部署



什么是微服务?





第21页

多⼩小?

■ 代码⾏行数? ■ 重写时间?



第22页

康威⽣生命游戏



第23页

康威⽣生命游戏 ( APL )

life
 ←
 {
 
 
  
 
 
 ↑1
 ⍵∨.∧3
 4=+/,¯ˉ1
 0
 1∘.⊖¯ˉ1
 0
 1∘.⌽⊂⍵
  }



第24页

多⼩小?

■ 代码⾏行数? ■ 重写时间?



第25页

多⼩小?



⼩小

■ 灵活性好 ■ 协作成本⾼高



⼤大

■ 复杂度⾼高 ■ 维护成本⾼高





第26页

多⼩小?



⼩小

■ 灵活性好 ■ 协作成本⾼高



⼤大

■ 复杂度⾼高 ■ 维护成本⾼高



适合团队就是最好的!





第27页

■ ⼩小,
 且专注于做⼀一件事情 ■ 独⽴立的进程中 ■ 轻量级的通信机制 ■ 松耦合、独⽴立部署



什么是微服务?





第28页

进程独⽴立 进程



第29页

进程独⽴立 进程 进程 进程



第30页

■ ⼩小,
 且专注于做⼀一件事情 ■ 独⽴立的进程中 ■ 轻量级的通信机制 ■ 松耦合、独⽴立部署



什么是微服务?





第31页

轻量级的通信机制

■ 语⾔言⽆无关 ■ 平台⽆无关



第32页

■ ⼩小,
 且专注于做⼀一件事情 ■ 独⽴立的进程中 ■ 轻量级的通信机制 ■ 松耦合、独⽴立部署



什么是微服务?





第33页

松耦合,独⽴立部署



开发 开发 开发



测试



构建



部署



开发





第34页

松耦合,独⽴立部署



开发 开发 开发



测试 测试 测试



构建 构建 构建



部署 部署 部署



开发



测试



构建



部署



第35页

■ ⼩小,
 且专注于做⼀一件事情 ■ 独⽴立的进程 ■ 轻量级的通信机制

■ 松耦合、独⽴立部署



什么是微服务?





第36页

个服务 个⽉月……



第37页

实践1 - 隔离的环境





第38页

持续集成环境 - BAMBOO



第39页

stack

Elastic
 
  Load
  Balancer



基础设施 - AWS



EC2
  Instance

EC2
  Instance



Launch
 
  Configuration AMI Auto
 Scaling





第40页

⽇日志聚合- Splunk



第41页

监控- Nagios



第42页

42



第43页

实践2 - ‘Stencil' (演进的微服务模板)



第44页

'Stencil'结构 (微服务模板)



SOURCE SPEC

CONFIG

WEB SERV LOG MONITORING ALERT

DEPLOYMENT CI



第45页

Stencil



⽣生成 ⽣生成 ⽣生成



'Stencil' (微服务模板)



服务1 服务2 服务N





第46页

Stencil



应⽤用补丁 补丁 应⽤用补丁



服务1 服务2 服务N



'Stencil' (微服务模板)





第47页

服务



服务



服务



服务

Stencil

服务 服务

'Stencil' (微服务模板)



补丁 服务 服务 47



第48页

⽣生成



Stencil



⽣生成 ⽣生成



服务1 服务2 服务N



'Stencil' (微服务模板)



依赖



第49页

实践3 - 轻量级通信机制



第50页

Representational State Transfer



第51页

H A LYPERTEXT PPLICATION ANGUAGE

12 3



第52页

{
 

_links
 
 
 
 " ":
 {
 


 
 
 
 
 
 
 
 "self":
 
 
 
 {
 "href":
 "/customers?page=3"
 },
  "prev":
 
 {
 "href":
 "/customers?page=2"
 }}
 

_embedded
 
 
 
 " ":
 {
 


 
 
 
 
 
 
 
 [
  
 
 {"_links":
  
 
 
 {
 "self":
 {
 "href":
 "xx"
 }
 },
 


 
 
 
 
 
 
 
 
 
 
 
 
 "name":
 
 "Peter"},
  ……
 


 
 
 
 
 
 
 
 ]
 }
 





第53页

HAL BROWSER







第54页

个服务



个⽉月……





第55页

集成测试的有效性?



Integration
 tests
 are
 a
 
  scam
 –
 A
 self-­‐replicating
 
  virus
 that
 threatens
 to
 
  infect
 your
 code
 base,
 your
 
  project
 and
 your
 team
 with
  endless
 pain
 and
 suffering.
 


  
  
 -­‐-­‐
 J.
 B.
 Rainsberger



第56页

环境依赖 版本依赖 不稳定



第57页

1 Record 2 Replay

实践4 - 消费者驱动契约测试(PACT)





第58页

{
 



provider 1
 
 " ":
 
 
 
 
 {
 
 "name":
 “Service
 Provider"
 
 
 },
 



consumer
 
 " ":
 {
 "name":
 “Service
 Consumer”
 },
  
 
 "interactions":
 [
 


 
 
 
 {
 



2 3




 
 
 
 
 
 "request":
 {
 




 
 
 
 
 
 
 
 
 
 "method":
 "get",
 




 
 
 
 
 
 
 
 
 
 "path":
 “/customers"
 },
 




 
 
 
 
 
 "response":
 {
 




 
 
 
 
 
 
 
 
 
 "status":
 200,
 




 
 
 
 
 
 
 
 
 
 "headers":
 {
 "Content-­‐Type":
 “application/json"
 },
 




 
 
 
 
 
 
 
 
 
 "body":
 {……}
 
 
 
 
 
 
 
 




 
 
 
 
 
 
 }
 




 
 
 
 }
 




 
 ],
 




 
 "metadata":
 {
 "pactSpecificationVersion":
 “1.0.0"
 }
 



}



第59页

{
 



provider
 
 " ":
 
 
 
 
 {
 
 "name":
 “Service
 Provider"
 
 
 },
 



consumer
 
 " ":
 {
 "name":
 “Service
 Consumer”
 },
 




 
 "interactions":
 [
 






 
 
 
 {
 




 
 
 
 
 
 "request":
 {
 




 
 
 
 
 
 
 
 
 
 "method":
 "get",
 




 
 
 
 
 
 
 
 
 
 "path":
 “/customers"
 },
 




 
 
 
 
 
 "response":
 {
 




 
 
 
 
 
 
 
 
 
 "status":
 200,
 




 
 
 
 
 
 
 
 
 
 "headers":
 {
 "Content-­‐Type":
 “application/json"
 },
 




 
 
 
 
 
 
 
 
 
 "body":
 {……}
 
 
 
 
 
 
 
 




 
 
 
 
 
 
 }
 




 
 
 
 }
 




 
 ],
 




 
 "metadata":
 {
 "pactSpecificationVersion":
 “1.0.0"
 }
 



}



第60页

{
 



provider
 
 " ":
 
 
 
 
 {
 
 "name":
 “Service
 Provider"
 
 
 },
 



consumer
 
 " ":
 {
 "name":
 “Service
 Consumer”
 },
 




 
 "interactions":
 [
 






 
 
 
 {
 




 
 
 
 
 
 "request":
 {
 




 
 
 
 
 
 
 
 
 
 "method":
 "get",
 




 
 
 
 
 
 
 
 
 
 "path":
 “/customers"
 },
 




 
 
 
 
 
 "response":
 {
 




 
 
 
 
 
 
 
 
 
 "status":
 200,
 




 
 
 
 
 
 
 
 
 
 "headers":
 {
 "Content-­‐Type":
 “application/json"
 },
 




 
 
 
 
 
 
 
 
 
 "body":
 {……}
 
 
 
 
 
 
 
 




 
 
 
 
 
 
 }
 




 
 
 
 }
 




 
 ],
 




 
 "metadata":
 {
 "pactSpecificationVersion":
 “1.0.0"
 }
 



}



第61页

实践5 - 基础设施⾃自管理-TMI

团 队 基 础 设 施 ⾃自 管 理 , 更 ⾼高 效 的 开 发 和 维 护 服 务 。



第62页

基础设施⾃自管理-TMI

■ ⾃自动化创建、销毁资源 ■ ⾃自动化配置资源 ■ ⾃自动化部署

-­‐>
 deploy
 [APP]
 [VERSION]



第63页

蓝绿部署



Router



SERVICE-­‐1.3 SERVICE-­‐1.4



第64页

蓝绿部署



Router



SERVICE-­‐1.3 SERVICE-­‐1.4



第65页

微服务的成本管理 微服务的依赖管理 DevOPS⽂文化与技能培养 DOCKER

还在探索中……





第66页

隔离的环境 不断演进的微服务开发模板 轻量级的通信协议 基于消费者的契约测试 基础设施⾃自管理



Isolated Environment Stencil HAL PACT IMBT



总结





第67页

THANK YOU



⺩王磊
 @ThoughtWorks
 

⾸首席咨询师
  wldandan.github.com





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