微服务架构 (七): 微服务粒度设计上的核心设计原则与思考的面向

2016.8.19, 深圳, Ken Fang

架构师在设计微服务时, 需把握一个核心的设计原则:

微服务 “外部的世界” 远比 “内部的世界” 重要。

微服务外部与内部的世界是以微服务边界上下文 (Bounded Context) 作划分的。而微服务的接口; 例如: REST 接口; 便是拉通了微服务外部与内部的世界。

微服务外部的世界包括:

A.       微服务外部的 Client; 微服务外部的使用者 (介面), 系统, 设备。

B.       微服务之间外部的数据交易 (Transaction)。

C.       微服务之间外部的远程调用; 在网络上所传递的信息。

微服务内部的世界包括:

A.       微服务内部需处理、运算的业务场景或功能。

B.       微服务内部所需拥有的资源; 例如: 库 (Library), 数据库, 应用伺服器, 网络IP 地址, 网络 Port, 操作系统等等。

架构师设计微服务的粒度; 边界上下文 (Bounded Context); 时, 便需仅记微服务 “外部的世界” 远比 “内部的世界” 要来得重要。也就是说, 架构师应从微服务 “外部的世界” 来界定微服务的粒度; 微服务的边界上下文 (Bounded Context)。

架构师设计微服务的粒度; 边界上下文 (Bounded Context); 时的主要思考的面向便是:

A.       先从微服务外部的 Client, 分析、识别微服务的主要目的、主要需处理、运算的业务场景或功能为何? 而形成微服务的 Pre-Bounded Context。

B.       各微服务的 Pre-Bounded Context 识别后, 便可得知微服务之间外部的数据交易 (Transaction) 是否会因为开发上技术难度的增大, 而对于整体产品架构的可靠性; 例如: 数据的一致性; 产生负面的影响?

假如, 所设计出的微服务的 Pre-Bounded Context 会因为开发上技术难度的增大, 而对于整体产品架构的可靠性; 例如: 数据的一致性; 产生负面的影响, 则架构师便应重新的思考: 将会因微服务之间外部的数据交易 (Transaction) , 而会对整体产品架构的可靠性, 产生负面影响的数个微服务, “合并” 为一个微服务。

C.       各微服务的 Pre-Bounded Context 识别后, 便可得知是否会因为过多的微服务之间外部的远程调用, 所形成的大量网络的延迟, 而使整体产品架构的性能, 产生负面的影响?

假如, 所设计出的微服务的 Pre-Bounded Context 会形成大量网络的延迟, 而使整体产品架构的性能, 产生负面的影响, 则架构师便应重新的思考: 将会因微服务之间外部的远程调用, 而会对整体产品架构的性能, 产生负面影响的数个微服务, “合并” 为一个微服务。

以微服务 “外部的世界” 远比 “内部的世界” 重要的思维的模式, 主要是将整体微服务 (产品) 的可靠性、性能的重要性要高于整体微服务 (产品) 持续部署的速度。

这样的思维最主要的目的便是: 微服务外部的世界, 仍旧是十分的脆弱与不可预期的; 例如:网络的中断、网络的安全性 (犯罪)、网络的延迟等等; 所以, 架构师应从微服务 “外部的世界” 界定微服务的粒度; 微服务的边界上下文 (Bounded Context)。

当然, 假如有一天, 微服务外部的世界已是十分的强壮, 则架构师便可从微服务 “内部的世界” 来界定微服务的粒度; 微服务的边界上下文 (Bounded Context)。而使微服持续部署的速度, 获得绝对的提升; 但, 绝对不是现在….

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏媒矿工厂

全能媒体机—Matrix in Media?

本文总结了发表在IBC2018上,由英国Streampunk Media Ltd.的R. I. Cartwright和美国Gilmer&Associates I...

1255
来自专栏Golang语言社区

用医生的思考方式调试你的代码

“现在的编程工作就像是对你需要解决处理的部分做科学研究。” ——Gerald Sussman 设计和维护好的软件就像是一个抵制复杂度的永无止境的奋斗过程。任何足...

3466
来自专栏web前端教室

前端学习过程中遇到不懂的怎么办?

如标题所示,遇到不懂的地方怎么办?有的同学就退缩了,有的同学会各种找人问,有的同学会选择跳过,而咱们的前端零基础0827班的某同学是这样做的,

1692
来自专栏人工智能

使用Botkit和Rasa NLU构建智能聊天机器人

我们每天都会听到关于有能力涉及旅游、社交、法律​​、支持、销售等领域的新型机器人推出的新闻。根据我最后一次查阅的数据,单单Facebook Messenger就...

1.4K9
来自专栏PPV课数据科学社区

知识图谱技术原理介绍

知识图谱技术原理介绍(转载) 王昊奋 近两年来,随着LinkingOpen Data 等项目的全面展开,语义Web数据源的数量激增,大量RDF数据被发布。互...

2847
来自专栏Java学习网

什么是好代码

什么是好代码 你如何定义好的代码?本文通过咨询65个开发人员同一个问题从而得出了一个伪科学的答案。 首先我们相信写好代码是非常重要的。为什么呢?首先,好代码...

22910
来自专栏木东居士的专栏

使用 PageRank 找到关系网中的牛人

1762
来自专栏ThoughtWorks

测试金字塔实战 | 洞见

这是一篇非常漫长并且艰深的文章的节选(点击文末阅读原文查看全文),它解释了为什么我们需要测试,以及如何对软件进行测试的问题。好消息是,这篇文章提供的信息经得起时...

1263
来自专栏吉浦迅科技

Allinea DDT解决阿贡国家实验室的一个未解之谜

阿贡国家实验室领导计算设施(ALCF)的计算机科学家和工程师拥有世界上第四快的超级计算机,并且用量很大:尝试最大最复杂的宇宙模拟是他们其中的一个...

2879
来自专栏魏艾斯博客www.vpsss.net

搬瓦工选 kvm 架构还是 ovz 架构

3433

扫码关注云+社区