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

2016.8.9, 深圳, Ken Fang

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

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

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

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

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

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

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

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

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

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

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

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

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

架构师应一直铭记在心:

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏京东技术

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

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

14430
来自专栏Golang语言社区

7大决定决定服务器性能的指标,你测试过几个?

一,服务器PING值 PING测试在一定程度上可以代表服务器的宽带速度。 使用站长工具提供的Ping服务(http://ping.chinaz.com),来测试...

54950
来自专栏用户2442861的专栏

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

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

35010
来自专栏编程一生

实现一个自己的搜索引擎的初始规划

19240
来自专栏Golang语言社区

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

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

73970
来自专栏人人都是极客

手把手教你如何向 Linux 内核提交代码

说到开源大家都会想到黑客和极客,开源的概念最早也是在极客们推出和推崇的。开源的提倡旨在开放源代码使之更方便自由的使用和再创作。随着这一思想的发展,衍生出诸多的开...

25120
来自专栏Android群英传

震惊!我逆向了Android代码居然看见……

14210
来自专栏腾讯研究院的专栏

常见的几种数据层容灾架构比较分享

陈守志 腾讯公司平台运营开发组 一、关于容灾   关于容灾主题,这里罗列对比了几种常见的容灾案例: ?   相对接入层、应用层容灾而言,数据层的容灾相对...

58650
来自专栏郭耀华‘s Blog

【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总

教程下载: 【免费】android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程...

45790
来自专栏Brian

Effective Debugging-高效调试

概述 最近在看《Effective Debugging》,作者(Diomidis Spinellis)将30多年的系统开发和调试的经验融入到书中,从策略、方法以...

36680

扫码关注云+社区

领取腾讯云代金券