首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

服务粒度拆分原则

服务架构是模块化一种方法,它把一整块应用拆分成一个个服务,以便于团队在开发复杂应用时,能够更快地交付出高质量软件。 但从单体架构到微服务拆分粒度很难把握。究竟有什么好拆分理由呢?...团队组织架构 按照康威定律说法,组织结构一定会反映到系统架构上,一般是树形结构 + 底层网状结构,服务之间一定是每个系统架构呈明显树状,但是系统之间会有多重服务互访。...应该尽量将处于生命周期中不同阶段接口分割,避免高频更新服务和低频更新服务捆绑,避免向稳定运行服务组添加新业务接口,而是应该考虑在新服务组中实现。 3....调用频率 服务组中不同服务调用频率会有巨大差别,而高频调用肯定会占据更多资源,会出现个别接口耗尽资源导致同组接口一起失败(资源竞争),需要对高频访问服务设置定制运行策略,如分配更多 CPU 核心数和内存...这些和读操作都有巨大差异性, 因此建议流量较大或较为核心服务应该做读写分离,分拆为两个服务组发布。 最后 微服务”如何做到足够合适粒度,是一门艺术。

2.5K10

服务设计、拆分原则

AKF拆分原则 业界对于可扩展系统架构设计有一个朴素理念:通过加机器就可以解决容量和可用性问题。...01 Y轴(功能)关注应用中功能划分,基于不同业务拆分 Y轴扩展会将庞大整体应用拆分为多个服务,每个服务实现一组相关功能,如订单管理、客户管理等。...在工程上常见方案是服务化架构(SOA),比如对于一个电子商务平台,我们可以拆分成不同服务,组成类似下面的架构: ?...3、前端多渠道继承场景更容易实现,后端服务无需变更,采用统一数据和模型,可以支持多个前端,例如:信h5前端、PC前端、安卓前端、IOS前端。 ? 无状态服务 ?...这个无状态服务原则并不是说在微服务架构里不允许存在状态,表达真实意思就是要把有状态业务服务改变为无状态计算类服务,那么状态数据也就相应迁移到对应“有状态数据服务”中。

92230
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    服务拆分原则之 AKF

    这儿引入一个概念,微服务设计原则之一——AKF原则服务拆分原则之AKF 首先来看单节点单点故障这个问题,既然单节点容易挂,那么就可以进行复制,一变多,这儿设计到三个概念,主从、主主、主备,也是三种方式...,简单来说,主主相当于多台服务器同时对外提供读写: 主从,主机可以读写,但是一般只对外提供写,从机对外提供读: 主备,主机提供读写,备机不对外提供服务,当主机挂了时候,备机通过选举产生主机对外提供服务...Y轴拆分 这时候又有新问题,例如一台服务器中,可能某些功能被频繁访问,涉及到数据频繁读写,其他数据基本不怎么访问,这时候可以将这部分数据独立出来,也就是根据功能、业务继续拆分服务器,这种拆解就是AFK...中Y轴拆分 特点是Y轴纵向来看不同Redis负责功能是不同,也就是所包含数据也是不同,另外仅仅扩展出一个Y轴上业务服务器,又可能会存在单点问题,所以可以结合AFKX轴拆分原则,继续对刚拆分...Z轴拆分 在上面的AFK原则X-Y拆分之后,对服务器显示做了主从主备复制,然后做了业务拆分,不同Redis负责不同业务请求,这时候还会有一个新问题,例如对于Y轴上一个Redis,它负责某一样业务,

    70630

    服务拆分规范和原则

    前言 前面我们了解了什么是微服务和为什么需要做微服务架构(What & Why),本文我们就来探讨如何做微服务架构拆分(How) 微服务拆分没有一个绝对正确方案,服务拆分粒度完全要根据业务场景来规划...我这里总结了几个服务拆分心法秘籍,同学们可以照着这个路子去思考服务拆分粒度我行走江湖就靠着这套武功心法。 拆迁方案 这辈子当不成拆迁户同学们,你们也别灰心,咱房子拆不成,微服务还是可以拆一拆。...业务模型拆分 业务模型拆分维度有很多,我们在实际项目中应该综合各个不同维度做考量。...各位亲,这里建议将核心主链路拆分,有以下几个目的: 1)异常容错为主链路建立层次化降级策略(多级降级) ,以及合理熔断策略,这部分我们将在Hystrix服务容错阶段课程中详细解释 2)调配资源 主链路通常来讲都是高频场景...领域拆分例子就太多了,我们做微服务规划时候要确保各个领域之间有清晰界限,比如商品服务,和订单服务,尽管他们之间有交集(都围绕商品主数据)但是毕竟是服务于不同领域(商品域和订单域),所以我们要将两者拆分成独立服务

    21410

    聊聊微服务拆分原则之 AKF

    这儿引入一个概念,微服务设计原则之一——AKF原则服务拆分原则之AKF 首先来看单节点单点故障这个问题,既然单节点容易挂,那么就可以进行复制,一变多,这儿设计到三个概念,主从、主主、主备,也是三种方式...,简单来说,主主相当于多台服务器同时对外提供读写: 主从,主机可以读写,但是一般只对外提供写,从机对外提供读: 主备,主机提供读写,备机不对外提供服务,当主机挂了时候,备机通过选举产生主机对外提供服务...Y轴拆分 这时候又有新问题,例如一台服务器中,可能某些功能被频繁访问,涉及到数据频繁读写,其他数据基本不怎么访问,这时候可以将这部分数据独立出来,也就是根据功能、业务继续拆分服务器,这种拆解就是AFK...中Y轴拆分 特点是Y轴纵向来看不同Redis负责功能是不同,也就是所包含数据也是不同,另外仅仅扩展出一个Y轴上业务服务器,又可能会存在单点问题,所以可以结合AFKX轴拆分原则,继续对刚拆分...Z轴拆分 在上面的AFK原则X-Y拆分之后,对服务器显示做了主从主备复制,然后做了业务拆分,不同Redis负责不同业务请求,这时候还会有一个新问题,例如对于Y轴上一个Redis,它负责某一样业务,

    32130

    一起玩转微服务(8)——服务拆分原则

    服务拆分 拆分粒度不应该过分追求细粒度,要考虑适中不能过大或过小。按照单一职责原则和康威定律,在业务域、团队还有技术上平衡粒度。拆分代码应该是易控制,易维护,业务职责也是明确单一。...•X 轴 :水平复制,即在负载均衡服务器后增加多个web服务器。•Y 轴 :功能分解,将不同职能模块分成不同服务。...下面看一下AKF拆分实践: 拆分应用 •X轴:从单体系统或服务,水平克隆出许多系统,通过负载均衡平均分配请求。...•Y轴 :面向服务分割,基于功能或者服务分割,例如电商网站可以将登陆、搜索、下单等服务进行Y轴拆分,每一组服务再进行X轴扩展。...对于服务拆分,要使用迭代演进方式,不能一次性完成所有的服务拆分,需要确保团队可接受,粒度适中,同时需要优先考虑API版本兼容性。不能够单纯以代码量来对服务拆分成果进行评估。

    1K20

    服务拆分一些基本原则

    单一职责原则案例 以一个简单电商系统为例,可以拆分为用户服务、商品服务、订单服务、物流服务等微服务,每个微服务只负责单一业务领域。...涉及用户身份信息修改,只需要变更用户服务,其他服务不受影响。 实现单一职责原则挑战与应对 在微服务架构中,实现单一职责原则,其实最大挑战职责边界不够清晰。...服务自治原则 什么是服务自治原则服务架构服务自治原则(Service Autonomy)是指每个微服务都应该具备高度自治能力,即每个服务要能做到独立开发、独立测试、独立构建、独立部署,独立运行。...服务自治原则是微服务架构中一条基本原则,它有利于提高整个系统可靠性和弹性,并能够更快速地响应业务需求和变化。...分层单向依赖原则 什么是分层单向依赖原则 在更为复杂业务中,微服务水平拆分已经无法满足微服务治理需求。针对不同功能定位,可以做纵向分层。

    42730

    服务 - 拆分服务问题和拆分方法

    拆分服务遇到问题微服务我就不说了,在这里写写那些设计要素和一定能遇到坑。...2.服务数量太多,团队效率急剧下降,这里误区是字就意味着拆分很细。3.没有自动化支撑,无法快读交付,现在极客时间里有GitOps,可以看这个,写很好。...拆分服务方法梳理从网上梳理了一些拆分服务方法论,希望对你有一些参考价值:1.纵向拆分和横向拆分从业务维度进行拆分,标准是按照业务关联程度来决定,关联比较密切业务适合拆分成一个微服务,而功能相对比较独立业务适合拆分为一个微服务...拆分原则3个火枪手原则:一个微服务由三个人开发,在进行微服务架构时,根据团队规模来划分数量也是合理。...AFK拆分原则:X轴,水平复制,多加载几个应用实例,以集群加负载均衡模式进行拆分Y轴,微服务经常采用按业务逻辑划分Z轴,按照数据进行划分康威定律第一定律:组织沟通方式会通过系统设计表达出来,人月神话中总结出了随着人员增加沟通成本呈指数增长规律

    1K70

    前端拆分实践

    当然此时业务还在发展,我们可以采取两种策略: 一种是以拆分任务为高优先级,新业务开发基于新架构 一种是先在旧架构上持续开发,在拆分过程中由负责拆分同学将业务和技术一起迁移过去 拆分原则 我们在拆分前端时候一定是带有某种目的...,有可能是想对技术栈进行渐进式升级,也有可能像我们一样想提升各个独立团队自治力,在不同目的下我们可能会秉持不同原则,这也是另一个为什么前端拆分没办法简单抄作业原因。...在这样大前提下,我们可以按照业务为主模块为辅方式指导拆分,基于此,我们定义了一些拆分时候原则: 保证业务独立,一条业务线应该由一个独立app来支撑,使得该业务团队拥有这个app完全控制权 跨业务页面不应该各个业务各自持有...巧了么不是,一开始我们就是按照后端 DDD 方式来指导拆分,然后就发生了这些问题,至少在我们实践过程中,微服务拆分方式不能照搬到前端来。 CSS 冲突问题 这是我们遇到另一个比较严重问题。...引用 [1] single-spa [2] 迭代开发中服务拆分 [3] 前端——前端开发新体验 [4] systemjs

    1.3K00

    服务:如何拆分服务

    在微服务落地中,第一步就需要进行微服务拆分服务拆分很困难也很重要,本文就讲讲怎么进行服务拆分。...技术发展到现在,还没有一个具体,设计完善标准方法来完成服务拆分服务拆分是一门技术更是一门艺术。...对于服务拆分,有两种情况 : 1、从零开始开发新产品,采用微服务架构,进行服务拆分; 2、将现有的单体架构产品重构成微服务架构,进行服务拆分。...,整体还是在一个大工程中,如下图: 服务拆分一个最大作用就是解耦,但并不是说一定要拆开才是解耦,在一个工程中,合理地使用面向对象一些原则,比如依赖倒置、接口隔离等,也能做到解耦。...所以在拆分服务时要遵循两个原则: 1、通用功能,使用共享库,比如工具类,提取成 NuGet 包或者 Maven 包,在服务中进行引用; 2、业务相关公共部分,使用单独服务,提供 API 方式供其他服务调用

    1.2K11

    遗留系统服务拆分

    这次拆分目标是:将 A 业务代码和数据库表从原有代码和数据库中拆分出来,形成独立 A 服务及其数据库,实现 A 业务代码独立、数据独立、部署独立。...图2 拆分目标 总体策略 这次服务拆分策略归纳起来有三条: 1. 先代码拆分、后数据拆分代码和数据是服务拆分两个重要物理实体。...结合我们以页面请求为单位进行拆分方式,我们引入 feature toggle 作为切换新旧系统开关,控制前端发来请求是发送给原有系统还是发送给拆分出来服务。...既然将回滚作为快速恢复功能手段,那引入了一项开发约定:在拆分过程中,只允许修改新服务代码,不允许修改原有系统代码。...使用 Code Owner 保持新旧代码一致 在拆分过程中,如果有新需求涉及 A 业务变更,则原有系统和新服务代码都需要同步修改,否则就会出现二者功能不一致: 如果只修改了原有系统而未修改新服务

    35320

    JAVA单服务应用拆分成多个服务实践(1)--拆分设计思想

    最近跟朋友在沟通,问我私下作开发平台支不支持拆分成多个微服务,让可以支持水平扩展. 我回去细想了一下,确实,现在做项目,如果不搞成多个微服务,都不好意思说,我是搞IT....拆分目标: 支持ALL in One, 即还是可以单体应用部署,这样在小企业可以快速实施,因为小企业对性能要求不高 支持多个应用服务,各服务相互独立,服务之间通讯使用dubbo,这样降低耦合,可以快速持水平扩展...,各个服务如有需要,从该服务中取该功能配置数据 该数据过滤功能请参考文章通用数据级别权限框架设计与实现 附件上传 其实附件上传我一直很犹豫,是做为系统组件,还是微服务.理论上,附件承载了各个应用业务附件数据...组织管理 这个微服务化,肯定没异义,对外输出组织相关接口. 权限管理 这里说权限管理指的是系统资源及角色管理.这个才需要做微服务化....但定时任务触发,我考虑了很久,让各个系统自己定时触发,还是做成一个微服务,如果做成一个微服务,触及到定时任务调用多个微服务,如何去寻找对应服务呢.

    1.5K30

    论微服务拆分

    服务拆分起点 使用微服务架构模式思想对目标系统进行拆分之前,我们需要先明白服务拆分起点和终点,以及需要考虑因素与坚持原则。...---- 服务拆分分析 如果一个系统拥有买家端和卖家端,我们可以根据这一点拆分成两个服务。也可以根据业务功能进行拆分,例如可以拆分为商品服务、订单服务、用户服务等,这样拆分粒度就更细一些。...那么如何拆 “功能” 呢,可以参考以下几点: 遵循单一职责、松耦合、高内聚原则 关注点分离 按职责 按通用性 按粒度级别 如何拆 “数据” : 每个微服务都有单独数据存储 依据服务特点选择不同结构数据库类型...在微服务架构中,每个服务一般都会拥有各自数据源,服务和数据关系如下: 先考虑拆分业务功能,在考虑拆分业务对应数据 无状态服务,所谓状态就是只一个数据需要被多个服务共享才能完成一个请求,那么这个数据就可以被称为状态...而依赖这个状态数据服务被称为有状态服务,反之称为无状态服务 ? 我们来通过一张图片,直观看一下,服务拆分前后对比: ?

    34940

    服务灾难(3) -- 拆分

    在之前写事故驱动开发时候,提到过,在企业中项目进行开发时,只要是自己方便,一个人可以用拆分和收敛同时作为自己标准。所以大家都是双标狗。...所以在拆分阶段,就没有什么硬性标准了,每个公司可能风格都有差别,并且都可以阐述出自己条条以支持自己架构是“正确”。 显然,这件事情没有绝对正确解法。无论哪种拆分方式,都会遇到业务边界问题。...除去人问题,业务部门大多数一线领导是需要有业务上业绩。这种业绩怎么来?一般都是揽各种各样活儿,能揽多少就揽多少。 从设计原则上来讲,逻辑上相同或者类似的代码应该放在一个地方来实现。...即使 Domain Driven Design 观点讲述了再多上下文划分技巧,你在实际工作中会发现没有多少人把这些思想、原则当回事,一线 leader 在乎就是揽活儿而已。...但演化到微服务时代,原来很简单重构就没那么简单了。

    43110

    服务拆分几种处理思路

    场景说明 目标是需要拆分出内部服务 Y 为独立系统,且暂时不改变系统 A 被依赖关系,拆分情况如下图。...更具体说,接口层业务接口 1 中包含业务逻辑,于是会产生对内部服务 Y 两个及以上接口调用。 处理思路 那么你会遇到以下几种情况需要处理。...针对 case2 HTTP 接口逻辑也有两种处理方式: 左图:同样,基于内部服务 Y 接口定义,迁移服务层逻辑到系统 B ,实现基于 BizDto  定义 rpc 接口,系统 A 在接口层保留业务逻辑...针对 case 3 内部服务调用: 对于内部服务调用,基于内部服务 Y 接口定义,迁移服务层逻辑到系统 B ,实现基于 BizDto  定义 rpc 接口,系统 A 只需要增加 BizDto  到...更优解 如果我们要拆分内部服务 Y,从上游依赖来看,有系统 A 和手机客户端依赖关系(通过虚线表示)。

    48230

    如何拆分服务

    以我们之前公司项目枕聊直播间送礼为例子:用户A对用户B送礼物: 两者判定是否关注关系,如果没关注,直接建立关注关系、添加游戏好友; 用户A随机中奖金币、元宝(货币)、增加富豪值,如果中了大奖,还需要发送全服消息...用户B增加魅力值 用户A、用户B更新当日、周、月富豪榜、魅力榜排名 用户B礼物墙要展示收到礼物 实际业务比我上面描述更加复杂。...上述案例:我们直接简单拆分为: 好友服务 中奖翻倍服务 排行榜服务 魅力、富豪积分服务 礼物墙服务 全国消息服务 上述服务都暴露接口,供我们实际业务使用。...子服务之间也可以相互调用:中奖了需要发送全国消息服务,那就是中奖翻倍服务调用全国消息服务。 实际微服务拆分以及远程调用开发过程中: 没必要完全拆分。...特殊说明: 以上文章,均是我实际操作,写出来笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!

    70610

    如何避免单点风险:基于实践经验分享服务拆分原则一些思考

    因此,服务拆分不仅是为了简化系统,也有助于让系统更好地适应未来变化。微服务拆分原则:化大而复杂为小而简单。...进行服务拆分,把一个大而复杂问题化解为多个小而简单问题,服务之间通过契约来约定依赖,做到服务独立发布和演进。微服务到底有多,是个仁者见仁,智者见智问题,最重要是团队觉得是合适。...但注意,要达成“团队觉得合适”结论,至少还应该遵循以下两个基本前提:业务独立性首先,应该保证微服务是具有业务独立性单元,并不能只是为了。关于如何判断业务独立性,也有不同考量。...那么,以“三个火枪手”为原则服务拆分粒度,即一个微服务三个人负责开发。...具体拆分时候,核心服务可以是一个,也可以是多个,只要最终服务数据满足“三个火枪手”原则就可以。

    5300

    服务设计原则

    标准化服务合约 1.1 服务合约 建立了与服务交互有关术语 提供了技术限制和需求,及服务拥有者希望对外公布所有语义信息 image.png 1.2 标准化服务合约 使用形式化或者标准化合约 服务功能描述标准化...策略模块化和集中化 结构化标准 其他设计原则也会直接影响到合约定位、设计以及最终使用 2.3 合约与服务设计 数据表示标准化和转换避免 在对服务记性集成时,统一数据结构减少转换环节...服务松散耦合 2.1 服务耦合(服务内及消费者依赖) 关注服务耦合在哪里发生 关注一个服务组合中各部分之间以及服务内部各部分之间以及服务内部各部分之间应该耦合到什么程度 2.2 服务松散耦合原则...,从而保障服务在合约前提下进行演化能力 服务抽象原则就是为了获得信息隐藏正确平衡点 3.1 服务抽象原则 服务合约中发布信息越多,随后“消费者-合约”耦合就会越深 向负责设计服务消费程序的人呈现信息越多...在使用策略时,可能导致暴露服务底层逻辑、行为和参数选择细节 其他面向服务原则(如服务松散耦合和服务自治)也提倡在服务合约中减少约束 3.6 服务抽象与服务模型 实体服务与应用服务 抽象程度往往和所封装定制逻辑

    69510

    关于游戏服务服务拆分

    在游戏服务器中,我们做服务拆分,大部分情况下都是为了可伸缩,而不是为了高可用(这里暂不考虑那些使用WEB模式实现游戏服务思路。...在服务拆分过程中, 我们往往需要关注服务数据依赖关系、服务内聚性、服务交互频率、每个客户端请求所经过链路长度等指标。...同时,遵循“如无必要,勿增实体”原则服务拆分应该尽可能少,这不但会减少链路长度,同时还会降低整个分布式系统出现故障概率。 这是因为,每个服务都是单点。...如果我们在拆分服务时,服务内聚性不够好(比如将联盟和国家数据拆分成“联盟服务”和“国家服务”。...我们就需要考虑,违反“服务内聚”原则将国家数据,挪到“城池服务”中,即使这会使“城池服务”和“联盟服务”变成循环引用。

    84410
    领券