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

2016.8.9, 深圳, Ken Fang

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

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

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

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

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

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

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

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

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

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

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

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

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

架构师应一直铭记在心:

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏京东技术

小巧“玲珑”—京东物流自动化测试平台核心功能首次曝光

负责京东物流研发的全部产品线的质量保障工作,是京东集团最早开始全面实施自动测试的团队之一。经过多年的技术沉淀,围绕质量、效率、过程改进、技术提升等方面,去发现、...

1444
来自专栏嵌入式程序猿

恩智浦对KSDK2.0动大手术换血了

恩智浦针对kinetis系列MCU推出的KSDK2.0比以前的1.x版本有了很大变化,目录结构有很大不同,且不在支持MQX操作系统,所以在应用中要注意区别对待,...

34810
来自专栏北京马哥教育

从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点。 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在...

4694
来自专栏京东技术

京东价格保护高并发 | 七步走保证用户体验

2014年加入京东,负责京东财务退款及价格保护研发建设,擅长京东逆向流程场景、金额拆分计算、高并发下网站优化。

1152
来自专栏Golang语言社区

Golang语言社区--游戏服务器端开发的一些建议(转载)

大家好,我是Golang语言社区(www.golang.ltd)主编彬哥,本篇给大家转载一篇关于游戏服务器开发的文章。

5247
来自专栏用户2442861的专栏

分布式统一框架的设计与实现(数据库)

我们设计并开发了内容中心统一的分布式开发框架。我们把它取名为albian, albian是基于java的(故以下简称albianj)。他主要是面向海量数据处理...

1241
来自专栏鸿的学习笔记

聊聊分布式系统的时钟问题

诸如此类的问题,还能提出很多,因此需要一个靠谱的时钟来保证分布式系统里事件的处理不会出错。

851
来自专栏CSDN技术头条

高性能智能日志实践

本文作者是 Archanaa Panda ,从 2000 以来一直在软件开发(构架、设计和编程)团队担任 Java / JavaEE 构架师,目前立志于做一个与...

23010
来自专栏云原生架构实践

云平台架构实践中的微服务分解原则

1383
来自专栏芋道源码1024

淘宝大秒系统设计详解

1. 一些数据2. 热点隔离3. 动静分离4. 基于时间分片削峰5. 数据分层校验6. 实时热点发现7. 关键技术优化点7.1 Java处理大并发动态请求优化7...

832

扫码关注云+社区