微服务架构 (二): 从既有的架构迁移到微服务的策略

2016.8.9, 深圳, Ken Fang

在微服务的核心概念中, 最重要的核心概念便是: 边界上下文 (Bounded Context); 每一个微服务拥有各自的某一端到端业务场景 (功能)与数据 (数据库) 。

 当将既有的架构迁移到微服务时, 常见的作法便是:

A.      只将既有架构的功能模块拆解成粒度较小的功能模块:

这样的作法, 其实, 实质上的意义是不大的。因为, 即使拆解成粒度较小的功能模块, 并且拆解后的各功能模块能互相的解藕, 但, 拆解后的各功能模块, 也许仍需共用数据库。所以, 当数据库即使只是修改某个数据表结构的某几个字段时, 也需同时修改多个功能模块。毫无疑问的, 这不仅会使产品开发的效率低落。拆解后的各功能模块, 在执行持续部署时, 将会有极大的概率会在某个阶段中断。同时, 也会为产品的架构引入新的风险, 甚至是致命的伤害。

B.      将既有架构的功能模块拆解成粒度较小的功能模块的同时, 也将既有数据库拆解; 使拆解后的各功能模块, 在拆解后, 便可拥有各自的数据库:

这样的作法, 所会带来的最大的问题是: 日后, 不论是发现拆解后的各功能模块, 粒度是过小或过大, 而需合并或再拆解功能模块时, 都将会有极大的概率, 会花费相当大的工作量在数据库的迁移上。

在将既有的架构迁移到微服务时, 架构师必需要考虑下列两个因素:

1.       我们其实是没法在一开始的时候、一步到位, 就能设计出正确、适当的微服务粒度的; 正确、适当的微服务粒度, 绝对是要经由不断的演进与学习而获得的。

2.       数据库的迁移风险极大; 一定要谋定而后动。

所以, 从既有的架构迁移到微服务的策略是:

I.       先以产品架构的性能、可靠性与安全性为首要的考量; 先拆解出粒度大的功能模块。

II.      再考量持续部署的独立性与对业务应变的能力, 而将必要的功能模块再拆解成粒度较小的功能模块。

III.     确定了所拆解的功能模块是正确、适当的微服务粒度后; 同时兼顾了性能、可靠性、安全性、持续部署的独立性与对业务应变的能力; 再进行数据库的拆解与迁移; 使各功能模块 (微服务) 真正拥有各自的数据库。最终, 使各功能模块 (微服务) 真正拥有正确、适当的边界上下文 (Bounded Context) 。

架构师应一直铭记在心:

微服务正确、适当的边界上下文 (Bounded Context), 绝对是要经由不断的演进与学习而获得的; 没有标准答案, 没有一步到位的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

编程语言排行榜:你选对了吗?

有人说程序员知识更新速度要很快,这是因为编程语言很容易就过时。这句话虽然有点绝对,但是也说明了热门的编程语言排行版一直在变。那么我们就来看一看编程语言排行,了解...

2707
来自专栏Java架构

工作了十年的高级Java程序员分享从业经验(送给还在奋斗的码农)

1817
来自专栏Java技术栈

高级Java必看的10本书

1、深入理解Java虚拟机:JVM高级特性与最佳实践 本书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的...

34913
来自专栏大数据文摘

Python确实比较慢,但我不在乎

1174
来自专栏大数据文摘

小白学数据:一文看懂NoSQL数据库

1896
来自专栏投诉备案审核人员

我要投诉备案审核人员

从12月初就提交了备案信息,也通过了审核,推送到省工业和信息ICP局。现12月20来短信说我备案信息名称不合格,需要修改。我以想问一下,腾讯云备案专员 是干什么...

2830
来自专栏Ben嘴Ben舌

架构操练Kata:敏捷出版社

http://nealford.com/katas/list.html;译者:伍斌、王瑞鹏

885
来自专栏Java架构师进阶

分布式事务处理你不得不听的踩坑故事-让你的代码经得起考验

1013
来自专栏GopherCoder

『No16: 如何快速熟悉一个项目』

之所以讲这个话题,主要是最近新入职,因为是创业公司,不像大公司里的节奏,给你时间学习,创业公司需要你快速的融入环境,快速的熟悉业务代码,快速的实现需求。坦率的讲...

471
来自专栏前端架构与工程

前端工程师的基本素养

阅读原文 闲来无事,今天随便聊聊前端工程师应该具备哪些素质,权当博大家一笑。 前端工程师到底是工作很简单的“切图仔”,还是包揽客户端和中间层的“大前端”?招聘市...

1767

扫码关注云+社区