第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