将系统分解为微服务的策略

几年前,Vladik Khononov和他的团队决定开始使用微服务,但是几个月后他们发现自己陷入了巨大的混乱之中。他在最近于伦敦Skills Matter举行的DDD eXchange 2018会议上指出,造成这一现象的原因在于,他们只专注于采用酷炫的新技术,而没有关注更加基础的东西,比如模块化以及如何实现模块化。他们在serverless框架、平台和消息机制上投入了精力,但是在 思考如何将系统分解为微服务方面却思考很少,换句话说,也就是如何寻找边界并将不同的功能按照边界进行划分。

Khononov是Internovus的CTO,对他和他的团队来说,起始的信条就是服务越小,它就会越好。这直接导致他们构建了一个分布式单体结构(distributed monolith),在接下来的几年中,他们一直试图摆脱这些微小的服务并且评估了不同的分解策略。

限界上下文(Bounded context)

Khononov指出通用语言(ubiquitous language)领域驱动设计(Domain-Driven Design,DDD)中是基础实践,该实践的一种实现方式就是以领域专家的语言与他们进行对话。有时候,你会发现对于相同的业务概念,他们会有不同的心智模型,或者使用相同的术语描述不同的理念,如果这样的话,就预示着这些理念属于不同的限界上下文。从一开始,Khononov和他的团队就使用这些方法来发现定义服务的边界,每个边界内都会成为一个服务。他指出,这些服务代表了很广泛的业务领域,有时候会导致一个限界上下文涵盖多个业务子域。

业务子域

下一步,他们使用这些业务子域作为边界,然后为每个业务子域创建一个服务。在Khononov的经验中,子域和服务之间建立一对一的关系是DDD社区非常常见的方式,但是他们并没有满足于此,而是继续努力实现更小的服务。

业务实体

深入研究子域,他们发现了业务实体和流程,然后他们将其抽取到单独的服务中。开始的时候,这种终极方式失败得很惨,但是Khononov指出在随后的项目中,它取得了更大的成功。

就这三种策略来说,Khononov指出,使用限界上下文能够帮助他们找到最大的有效单体边界,然而,尽管它是一个可行的工作模型,但是他认为这种方式并没有很好地匹配微服务的理念。在业务子域和实体间选择的时候,他认为最好的分解等级依赖于正在构建的系统及其用例。他强调,微服务的理念实际上并不是关于单个服务内部如何实现的,而是关于服务之间如何交合和耦合的。

系统分解为微服务的阈值是由微服务所属的用例来定义的。

Khononov还没有找到一种简单的方式来评估一个系统的设计,但是他相信现在已经有了足够多的启发式设计准则,帮助我们将系统分解为微服务。他认为最有用的几项包括:

  • 始终分解至限界上下文等级。除非你有充分的理由,否则不要进一步分解。分布式系统有它们自己所面临的挑战

  • 核心子域是公司挣钱的区域。在进行分解时,确保获取领域的知识并具有恰当的子域。

  • 购买或采用通用子域。它们已经解决了一些问题了,如果自己实现的话,是没有竞争优势的。

  • 为了支持核心域,我们需要支持子域,但是这不会增加任何的竞争性优势。它们通常非常稳定和简单,在早期阶段就可以进行进一步的分解,直至使其成为实体服务。

  • 采用一致性的需求,帮助我们寻找必须放到同一个服务中的函数或方法。

  • 确保事件是显式和自描述的。考虑在一个服务中,使用私有事件作为实现细节,而将更为严格的公共事件作为服务的公开接口。

  • 寻找按照相同频率进行变化的服务,它们可能能够进行合并以减低复杂性。

  • 评估每个服务的接口。如果觉得服务范围太广的话,那么它可能能够拆分为更小的服务,主要站在集成方面,重新考虑评估边界以简化整个系统的设计。

Khononov在总结中指出,随着系统中服务的平均规模变得越来越小,你将会从一个大泥球般的单体系统,通过限界上下文实现相对较大的服务,进而转化为微服务。但是,他强调,如果你继续让服务变得更小的话,那么最终将会形成一个分布式的大泥球。

实体服务有时被称为反模式,参见Michael NygardStefan Tilkov的观点。

原文地址:http://www.infoq.com/cn/news/2018/07/decomposing-system-microservices

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理作业 第8次

图像处理作业 第8次 7.11 说明尺度函数ϕ(x)1,0.25≤x<0.75\phi(x)1 ,0.25 \le x\lt 0.75ϕ(x)1,0.25≤x<0.75并未满足多分辨率分析的第二个要求. ϕ1,0(x)2ϕ(2x)1\phi_{1,0}(x)\sqrt 2 \phi(2x)1ϕ1,0​(x)2​ϕ(2x)1 当且仅当满足0.125≤x<0.3750.125 \le x\lt 0…

【dfs】马蹄印

马蹄印 题目大意&#xff1a; 有一个只含括号的图&#xff0c;要你走一条路&#xff08;从左上角出发&#xff09;&#xff0c;使你走的路上的括号加在一起是先k个左括号再k个右括号组成的&#xff0c;要求k最大 原题&#xff1a; 题目描述&#xff1a; 虽然当奶牛贝里斯找…

P4852-yyf hates choukapai【单调队列优化dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4852 题目大意 给出n,m,c,dn,m,c,dn,m,c,d&#xff0c;有n∗cmn*cmn∗cm张卡牌。进行nnn次连抽mmm次单抽&#xff0c;连抽连续ccc张卡牌会获得第一张卡牌的欧气值&#xff0c;单抽可以获得抽到卡牌的欧气值。不能连续进行dd…

P4317-花神的数论题【组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P4317 题目大意 定义sum(i)sum(i)sum(i)表示iii二进制下111的个数 求∏i1nsum(i)\prod_{i1}^nsum(i)i1∏n​sum(i) 解题思路 考虑计算有iii个111的有多少个数字。 对于nnn的每一个111&#xff0c;我们可以知道如果这一位为…

【暴力】排队的奶牛

排队的奶牛 题目大意&#xff1a; 有一个序列&#xff0c;要你删去序列中的一类相同的数&#xff0c;然后求最长的相同数字段的长度 原题&#xff1a; 题目描述 农夫约翰的N只奶牛排成了一条直线&#xff0c;每只奶牛都有一个特定的标识序号&#xff0c;从左到右第i只奶牛…

NOIP2019 Emiya家今天的饭

NOIP2019 Emiya家今天的饭 ACM退役选手远程口胡 csf如今真的是太菜了,最后16分的做法愣是想了一下午 考虑使用容斥方法: 1 采用动态规划,先求出在无限制情况下,安排kkk种烹饪方法总的方案数. 记dp2[i][j]dp2[i][j]dp2[i][j]表示已经考虑完前iii种烹饪方法,共做了jjj个菜的方…

.NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权

一、案例结构总览这里&#xff0c;假设我们有两个客户端&#xff08;一个Web网站&#xff0c;一个移动App&#xff09;&#xff0c;他们要使用系统&#xff0c;需要先向IdentityService进行Login以进行验证并获取Token&#xff0c;在IdentityService的验证过程中会访问数据库以…

牛客练习赛71C-数学考试【容斥,dp】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7745/C 题目大意 求一nnn的排列&#xff0c;给mmm个限制pip_ipi​表示1∼pi1\sim p_i1∼pi​不能是pip_ipi​的排列。求方案数。 解题思路 定义fif_ifi​表示1∼pi1\sim p_i1∼pi​是pip_ipi​的排列的情况下1∼pi1\sim …

【DP】景观美化

景观美化 题目大意&#xff1a; 有n个花圃&#xff0c;里面有一定的泥土&#xff0c;可以将泥土运到别的花圃&#xff0c;也可以填入&#xff0c;也可以挖出&#xff0c;现在要改变花圃中的泥土数量&#xff0c;问最少花多少钱 原题&#xff1a; 题目描述&#xff1a; 农夫…

CentOS安装使用.netcore极简教程(免费提供学习服务器)

本文目标是指引从未使用过Linux的.Neter&#xff0c;如何在CentOS7上安装.Net Core环境&#xff0c;以及部署.Net Core应用。 仅针对CentOS&#xff0c;其它Linux系统类似&#xff0c;命令环节稍加调整&#xff1b;需要提前准备好服务器地址、用户名、密码&#xff1b;如果手上…

ASP.NET Core MVC+EF Core从开发到部署

笔记本电脑装了双系统&#xff08;Windows 10和Ubuntu16.04&#xff09;快半年了&#xff0c;平时有时间就喜欢切换到Ubuntu系统下耍耍Linux&#xff0c;熟悉熟悉Linux命令、Shell脚本以及Linux下的各种应用的安装、配置、运行。使用下来的感受是Linux确实相当好使&#xff0c;…

初一模拟赛(4.27)

成绩&#xff1a; rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf320320320100100100100100100100100100202020222hkyhkyhky296296296100100100100100100868686101010333wjjwjjwjj276276276100100100909090868686000444fyfyfy24824824810010010…

P4145-上帝造题的七分钟2/花神游历各国【并查集,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P4145 题目大意 一个序列要求支持 区间开根向下取整区间求和 解题思路 一个数开根约logloglog次就会到111&#xff0c;所以我们对于每个数记录一下开根多少次会到111&#xff0c;每次修改用并查集找还没到111的暴力修改树状…

网络流及建模专题(上)

前言 不断更新中…… 这几天新坑填不下去了&#xff0c;回来回顾一些经典的模型套路&#xff0c;先拿网络流开刀&#xff0c;窃以为洛谷这几道网络流的题目还是非常具有代表性的&#xff0c;涵盖了网络流调整、多解计数、最小割、最大权闭合子图问题。 还涵盖了图论&#xff0…

基于 websocket 实现的 im 实时通讯案例

分享利用 redis 订阅与发布特性&#xff0c;巧妙的现实高性能im系统。为表诚意&#xff0c;先贴源码地址&#xff1a;https://github.com/2881099/im下载源码后的运行方法&#xff1a;运行环境&#xff1a;.NETCore 2.1 redis-server 2.8下载Redis-x64-2.8.2402.zip&#xff0…

【并查集】【图论】旅行(ssl 1312)

旅行 ssl 1312 题目大意&#xff1a; 有一个图&#xff0c;要从一个点到另一个点&#xff0c;问路上的最大值和最小值的比最小是多少 原题&#xff1a; 题目描述 Z小镇是一个景色宜人的地方&#xff0c;吸引来自各地的观光客来此旅游观光。Z小镇附近共有N个景点&#xff…

P4302-[SCOI2003]字符串折叠【区间dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4302 题目大意 一个字符串&#xff0c;对于一个字符串AAA。可以将连续的nnn个AAA缩成n(A)n(A)n(A)。求最短的长度能够表述出给定字符串 解题思路 定义fi,jf_{i,j}fi,j​表示表示出i∼ji\sim ji∼j的字符串的最短方法。那么…

ACM/ICPC 比赛生涯总结+经验分享

ACM/ICPC 比赛生涯总结经验分享 1.获奖经历 时间比赛奖励大一下ACM陕西省赛打铁大一下CCCC团队二等奖大二下ACM/ICPC全国邀请赛银奖大二下CCCC团队特等奖大三上ACM/ICPC区域赛沈阳站铜奖大三上ACM/ICPC区域赛南宁站银奖大三上ACM/ICPC EC-Final上海铜奖大三下CCCC团队特等奖大…

YbtOJ#20064-[NOIP2020模拟赛B组Day4]预算缩减【树形dp】

正题 题目链接:http://noip.ybtoj.com.cn/contest/90/problem/2 题目大意 nnn个点的一棵树&#xff0c;求删掉一些边让剩下的连通块大小不小于kkk&#xff0c;求方案数。 解题思路 定义fi,jf_{i,j}fi,j​表示iii的子树现在联通块大小为jjj时的方案数&#xff0c;我们不难发现…

【并查集】团伙(luogu 1892)

团伙 luogu 1892 代码&#xff1a; 定义对手的对手是朋友&#xff0c;朋友的朋友是朋友&#xff0c;现在有n个人和m组关系&#xff0c;如果两个人是朋友那么他们属于同一个团伙&#xff0c;问有多少个团伙 原题&#xff1a; 题目描述 1920年的芝加哥&#xff0c;出现了一…