论微服务拆分

微服务拆分的起点

使用微服务架构模式的思想对目标系统进行拆分之前,我们需要先明白服务拆分起点和终点,以及需要考虑的因素与坚持的原则。所谓起点就是需要清楚拆分的是已有的项目还是新的项目,如果是已有的项目,那么这个项目处于什么样的架构阶段。而终点则是服务拆分后所需达到的架构阶段,以及后续扩展性的考虑,毕竟好的架构不是一次性设计出来的,而是不断进化来的。

不适合使用微服务的业务场景:

  • 系统中包含很多很强事务场景的,分布式事务比较难处理,而且由于CAP定律的原因,也无法保证数据的强一致性
  • 业务相对稳定,迭代周期长,大半年不需要更新一次版本的,使用微服务意义不大
  • 访问压力不大,可用性要求不高,例如一些简单的内部使用的系统

所以说微服务并不是放之四海而皆准的,而且在一些不适合的场景上使用微服务架构只会适得其反,所以我们在考虑架构的时候一定要根据实际的业务场景来设计,否则抛开需求谈架构,不就是在耍流氓吗


康威定律与微服务

微服务可以说是近两年来非常火的新概念,大家都在追,也都觉得很对,但是似乎没有很充足的理论基础说明这是正确的,给人的感觉更多是不明觉厉 。但实际上微服务很多核心理念其实在半个世纪前的一篇文章中就被阐述过了,而且这篇文章中的很多论点在软件开发飞速发展的这半个世纪中竟然一再被验证,这就是康威定律(Conway‘s Law)

据说这篇文章最初投的哈佛商业评论,结果程序员屌丝的文章不入商业人士的法眼,无情被拒,康威就投到了一个编程相关的杂志,所以被误解为是针对软件开发的。最初这篇文章显然不敢自称定律(law),只是描述了作者自己的发现和总结。后来,在Brooks Law著名的人月神话中,引用这个论点,并将其“吹捧”成了现在我们熟知“康威定律”。

谈到康威定律,最经常被人摆出来的一句就是:

Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)

中文大意:

任何组织在设计一套系统(广义概念上的系统)时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。

说白了就是,团队在沟通时项目结构是怎么样的,那么项目最终的结构就会是怎么样的,所以项目的结构与团队的沟通是会相互影响的。

我们通过两张图片简单的看一下两种模式下的团队结构:

  1. 传统架构模式下的团队结构:
  2. 微服务架构模式下的团队结构:

更多关于康威定律的内容可以参考以下文章:

https://yq.aliyun.com/articles/8611


服务拆分分析

如果一个系统拥有买家端和卖家端,我们可以根据这一点拆分成两个服务。也可以根据业务功能进行拆分,例如可以拆分为商品服务、订单服务、用户服务等,这样拆分的粒度就更细一些。但是代入实际的开发中,如果目标项目比较小,或者团队人数不多,项目迭代也很慢的话,那么这种项目是不需要进行拆分的。

我们在拆分服务的时候,需要满足几个基本点:服务的高可用、可水平扩展以及功能解耦等等。那么如何拆 “功能” 呢,可以参考以下几点:

  • 遵循单一职责、松耦合、高内聚原则
  • 关注点分离
    • 按职责
    • 按通用性
    • 按粒度级别

如何拆 “数据” :

  • 每个微服务都有单独的数据存储
  • 依据服务特点选择不同结构的数据库类型
  • 难点在确定边界
  • 针对边界设计API
  • 依据边界权衡数据冗余

可以参考扩展立方模型去进行拆分:

在微服务架构中,每个服务一般都会拥有各自的数据源,服务和数据的关系如下:

  • 先考虑拆分业务功能,在考虑拆分业务对应的数据
  • 无状态服务,所谓状态就是只一个数据需要被多个服务共享才能完成一个请求,那么这个数据就可以被称为状态。而依赖这个状态数据的服务被称为有状态服务,反之称为无状态服务

我们来通过一张图片,直观的看一下,服务拆分的前后对比:

原文地址:http://blog.51cto.com/zero01/2171331

时间: 2024-08-29 17:12:29

论微服务拆分的相关文章

微服务拆分

微服务拆分是做微服务架构很重要也很难的话题,很多时候,几个服务是合还是拆在设计团队内也很难达成共识. 当你纠结应该拆分和合并时我建议就先合并,等后面版本迭代需要时有必要再去做拆分.从系统发展的角度说,很多平台也都是从单体大应用.逐步拆分演化而来的,就像有位大牛说的那样,一开始就拆分的很好的微服务实践往往是失败的,成功的微服务平台都是在演化中迭代而来的.因为微服务拆分看似单个服务明确简单了,但服务间调用管理就麻烦很多,原来进程内函数调用.单数据库表查询连接及事务处理都不能用了,要用各种方法处理数据

从数据闭环谈微服务拆分

Tips:关注公众号:松花皮蛋的黑板报,领取程序员月薪25K+秘籍,进军BAT必备! 数据闭环,并不是说我们要将所有的功能全包揽在身上,不依赖其他业务方,也不依赖中台.而是想强调一件事,那就是业务问题排查过程尽量不要牵扯过多团队,因为数据链路越长越乱处理问题时效性越差,服务性能往往也不尽人意.我先分享个案例给你,或许能帮助你理解和产生共鸣. 我们有一个内容渠道是直播,渠道权限和创建直播间入口都是我们来维护的,但是创建直播后的内容保存接口是直播团队维护的,保存接口会校验达人权限和等级,而校验接口又

以实例说明微服务拆分(以SpringCloud+Gradle)

前言 之前,我都是说了很多的关于微服务的概念,说到底,很多人看了之后会认为没有什么意思,因为没有实际的东西说明,即使每个概念都明白了,也很难赋之实践.所以这次,我来用一个实际的例子去说明,在实际的项目过程中我们会如何去构建我们的微服务. PS:我们只是利用场景去模拟我们微服务构建或者说拆分的整个过程,对于场景本身在实际中会出现的问题我们不做考虑,说白了就是我们不考虑场景本身在实际生活中是不是这样的. 使用SpringCloud+Gradle构建 本文目的:让你体会到服务拆分本身,引起你对服务拆分

微服务化之服务拆分与服务发现

本文章为<互联网高并发微服务化架构实践>系列课程的第六篇 前五篇为: 微服务化的基石--持续集成 微服务的接入层设计与动静资源隔离 微服务化的数据库设计与读写分离 微服务化之无状态化与容器化 微服务化之缓存的设计 一.服务拆分的前提 说到微服务,服务拆分是绕不过去的话题,但是微服务不是说拆就能拆的,有很多的前提条件,需要完成前面几节所论述的部分. 首先要有一个持续集成的平台,使得服务在拆分的过程中,功能的一致性,这种一致性不能通过人的经验来,而需要经过大量的回归测试集,并且持续的拆分,持续的演

三、微服务的拆分与编写

[微服务的概念,使用场景,建模,架构通览,拆分微服务并且一步步分析,编写一些基础的微服务功能] 微服务的拆分与编写 (一).单体架构 什么是单体架构? 一个归档包(例如war格式或者Jar格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的方法论,我们称之为单体应用架构,这是一种比较传统的架构风格. 架构图  缺陷 1.复杂性高整个项目包含的模块非常多,模块的边界模糊,依赖关系不清晰,代码质量参差不齐,整个项目非常复杂.每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修

微服务架构(Microservice Architecture)

之前一段时间,有听部门架构说起接下来公司要使用微服务架构来研发系统,当时没怎么在意,因为是第一次听说微服务这个名词(果然无知者无畏啊):正好赶上五一假, 我自告奋勇的,接了编写微服务架构培训文档这个任务(也许因为我是文科生,文笔稍微好点).五一假期三天,基本都是在看资料,梳理思路以及编写接下来的培训文档中度过. 下面,就说说我这几天的一些收获吧:先说说资料来源吧:有架构给我的一些资料,以及自己百度和论坛.社区找来的一些资料,权当做一个总结式的简介... 目录如下: 一.微服务架构介绍 二.出现和

从单体架构迁移到微服务,8个关键的思考、实践和经验

转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”.   随着微服务架构的持续火热,网络上针对微服务和单体架构的讨论也是越来越多.去年的时候,社区更多的关注点是在二者的区别以及优缺点辨析上,而今年,越来越多的人开始关注如何从单体架构迁移到微服务上.毋庸置疑,微服务的理念正在席卷整个开发者社区,像Netflix.Uber这样的公司都是非常成功的应用案例. 但需要注意的

测试——《微服务设计》读书笔记

一.测试象限(Brain Marick) 二.测试金字塔(Mike Cohn)       1.单元测试 通常只测试一个函数或方法调用,通过TDD或者基于属性而写的测试就属于这一类,在UnitTest中,我们不会启动服务,对且对外部文件和网络连接的使用也很有限,通常我们需要大量的单元测试. 单元测试是帮助开发人员,是面向技术而非业务的.       2.服务测试 对于包含多个服务的系统,一个服务测试只测试其中一个单独服务的功能.只测试一个单独的服务可以提高测试的隔离性,这样我们可以更快地定位并解

微服务(Microservice)那点事

原文出处: 云栖社区 WHAT – 什么是微服务 微服务简介 这次参加JavaOne2015最大的困难就是听Microservice相关的session,无论内容多么水,只要题目带microservice,必定报不上名,可见Microservice有多火.最喜欢其中一页.关于这个典故,可以参考this,此图适用于一切高大上的名字——技术有SOA,Agile,CLOUD,DevOps等等,古代有道,气,八卦等等.此类名词的最大特点就是 一解释就懂,一问就不知,一讨论就打架. 微服务的流行,Mart