前面已经讲到了系统高层架构设计落地的第一步,确定系统边界。

接下来具体地看看系统高层架构设计落地的第二步:如何进行服务拆分,这也是很多新手架构师犯怵的地方,一起来看看吧。

一:服务是什么

这里说的服务,可以看作是一定功能集的聚合封装体,并不一定特指微服务,也可以类比为子系统。

从系统设计的角度,或者是设计思维上,服务的本质就是一些功能集合的这么一个封装体。

因此从设计上来说,系统、子系统、模块、组件等,本质都是一样的,都是一定功能的封装体,只不过功能集的范围大小不一样。

一般我们认为,系统比子系统大,子系统比模块大,模块比组件大,但是从设计层面来看,它们本质都是一样的。

前面讲的确定系统边界,是站在系统外部来看待整个系统,去理解系统要做什么和不做什么,以及系统和相关系统的交互关系等。

当视角从系统外转向系统内部时,首先要做的,就是内部子系统、模块、组件等的划分,其实本质都是对功能进行聚集,然后把这些相关的功能集进行聚合封装,也就是我们这里说的服务。

二:服务的基本要求

1:服务功能是自包含的

自包含的意思就是:一个服务需要的功能,应该尽量都包含在服务之内。

当然,这个做不到绝对,虽然每个服务都是一个封装体,但有些功能,它也需要跟其它服务或外部系统去交互。

因此,只能是尽可能的自包含,就跟我们做设计,耳熟能详的那句话:“加强内聚,松散耦合”一样,对服务来讲,功能的自包含,其实就是加强内聚的体现。

2:服务具备独立性和专业性

所谓独立性,指的是一个服务应该加强内聚,功能上独立;另外一个就是服务能够独立部署、独立运行,这是服务独立性的两层含义。

所谓专业性,指的是按照垂直、专业的方式来聚合功能,比如搜索服务,就是把搜索相关的功能划分到一个服务;又比如支付服务,就是把跟支付相关的功能包装成一个服务,等等的。

3:服务之间应该松耦合

这个大家好理解,简单来说,就是一个服务内部的变化,不能影响调用服务的客户端。也就是服务之间,应该是松散耦合的,可以随时对服务升级,或者是切换不同的服务实现。

4:服务通常是无状态的

这个是目前大家设计上的一个共识,就是在服务端这边,不会去保留客户端的状态(就是指数据),也就是服务是无状态的,不管哪个客户端来,都是一样的执行功能。

5:服务间采用轻量级的通讯机制

目前来说,主要是两大派,一派是htt加p/s协议 + Restful 的形式,比如Spring Cloud;另一派主要是RPC,比如Dubbo、Thrift等。

三:服务拆分的基本方法

1:按AKF进行服务拆分

对于AKF不了解不熟悉的朋友,我们在下一篇来讲述一下AKF扩展立方体。

2:按业务功能进行横向和纵向拆分

所谓横向拆分,就是按照不同的业务领域、或者是专业性 来进行拆分,比如按业务领域把系统分为:用户服务、商品服务、订单服务 等;从专业的角度,分出:搜索服务、支付服务等。

所谓纵向服务,就是在横向拆分的基础上,对每个服务进行更细粒度的划分。比如把商品服务继续细化,拆分成为:实物商品服务、虚拟商品服务、福利商品服务、O2O商品服务等等的。

3:服务分层拆分

比如大家熟知的,前后端服务分离,这本身就是一种分层的拆分形式。

就从后端来讲,可能会有一个层次,是专门来为前端服务的,通常称为聚合服务。

比如给系统平台管理人员使用的一些功能,从服务实现上分散到很多服务里面,但为了跟前端配合,我们通常会专门聚合出一个服务,把所有跟系统平台管理人员相关的功能,都聚合到一起。

聚合服务这一层会向下去调用真正的业务服务实现,业务服务下面又有公共的基础服务做支撑,你看,这样是不是就自然的形成服务的分层拆分。

4:为性能进行服务拆分

如果拆分了服务过后,感觉性能达不到要求,我们可能会进一步拆分服务,以满足性能的需求。

比如秒杀系统,它本来应该是促销服务里面的一部分,但是呢,由于秒杀系统对系统性能要求比较高,会涉及到高并发、高可用等的处理。

所以我们通常会把秒杀系统单独拆分出来,成为一个独立的服务,但对对它进行处理和优化,也把它和业务系统分开,避免因为做活动而把业务系统拖垮。

5:为安全进行服务拆分

这个也比较常见,比如我们考虑到,需要一些公共的授权和鉴权的功能,我们会把账号体系、认证体系独立出来,把它放到网关去进行统一的处理。

又比如跟业务相关的一些安全处理,比如统一的安全管控,控制同一个IP调用的次数、调用的频率、试错的次数 等等的,也会把它们拆分出来,做成一个单独的服务。

进一步,就是对业务的一些风险管控,比如风控系统,也会拆分出来形成单独的服务。

这些都是为了安全进行的服务拆分。

6:为重用进行服务拆分

当我们进行细节实现思考的时候,可能会发现,出现了多个服务都需要的功能,我们就需要把这些功能拆分出来,形成独立的、公共的服务,供这多个服务使用。

这就跟我们发现多个类里面有相同或者类似的功能实现的时候,会把它们提炼出来,做到公共的模块里面去,一样的道理。

如果这些功能跟业务不相关的话,会进一步把它们封装到基础服务里面去。这都是为了重用而进行服务拆分的方式。

到这里,如何进行服务拆分就讲得差不多了。

有问题或者意见、建议,请评论留言或者私信,大家一起探讨,一起进步!

当然,如果你觉得本系列文章还不错,能够给你一些启发和思考的话,请关注、点赞、收藏加转发,让更多的朋友加入到我们的行列,谢谢啦!

架构师成长之路:如何进行服务模块拆分(架构师方法经验干货)相关推荐

  1. 架构师成长之路(4)--高可用高并发架构(图谱)

  2. 路上有你:《架构师成长之路》终结篇 (附新年礼物)

    <架构师成长之路>第 0 期 <架构师成长之路>第 1 期 <架构师成长之路>第 2 期 <架构师成长之路>第 3 期 <架构师成长之路>第 ...

  3. 架构师成长之路:如何提升技术掌控力?

    架构师成长之路:如何提升技术掌控力? 简介: 在很多人眼里,架构师就犹如古代的将军一般,既能运筹帷幄决胜千里,又能独闯敌营取人首级,是所有士兵们崇拜的偶像...好了,其实我只是想说:能成为一名优秀的架 ...

  4. 如何成为一名架构师,架构师成长之路(转)

    转自http://blog.csdn.net/fei33423/article/details/61934514 如何成为一名架构师,架构师成长之路 原创 2017年03月13日 22:50:34 3 ...

  5. 开启运维自动化架构师成长之路

    技术的提升仅是量的积累,思想的提升才是质的飞跃! 这句话是我在网上看到认为最有道理的励志语录了,当然互联网IT行业的工作者相对理解的会更加深刻. 以这句话开头引出我将要写的这篇文章.首先,请允许我做一 ...

  6. Java架构师成长之路

    目录导航 前言 一.源码分析专题 1.1 设计模式详解 1.2 Mybatis源码分析 1.3 Spring5源码分析 二.分布式架构专题 2.1 漫谈分布式架构 2.2 分布式架构的基础 2.3 分 ...

  7. Web架构师成长之路

    Web架构师成长之路 本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远 ...

  8. WEB架构师成长之路-摘录

    一 .学习面向对象的基础知识,那你的编程之路注定是在做原始初级的重复! 很多程序员都知道类.方法.抽象类.接口等概念,但是为什么要面向对象,好处在哪里,要解决什么问题 降低软件开发的复杂度 提高软件开 ...

  9. 架构师成长之路(5)--如何获取知识(学习境界)(方法)

    原文地址为: 架构师成长之路(5)--如何获取知识(学习境界)(方法) 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学 ...

  10. javaweb k8s_K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程...

    K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程 课程内容是关于Kubernetes微服务架构学习课程,基于K8S开展ASP.NET核心进行微 ...

最新文章

  1. 3月到9月之9月到12月
  2. cygwin中 unable get setup.ini from... 的错误问题
  3. 知识点讲解四:栈溢出(stack overflow)问题解决方案
  4. Android防盗系统推荐
  5. svg笔记----------path篇
  6. springboot+jsp+mybatis项目实例(后台成功,但是无法跳转jsp页面,没有实体类的注解,看springboot+jsp第二弹相关配置,即可成功配置jsp)...
  7. 不能使用 float 和 double 来表示金额等精确的值
  8. 三维空间下的交互设计
  9. Android 快速修复功能,用于解决Android系统问题的四大Android修复软件
  10. php 银行支付通道_基于PHP框架的聚合四方支付系统
  11. 历年计算机信息系统管理师真题,历年计算机软考信息系统项目管理师真题
  12. 【栈】实现逆波兰计算器
  13. C语言函数之可变参数原理:va_start、va_arg及va_end
  14. react中引入swiper详细教程 亲测没测出来
  15. 全面的IE兼容性调试问题
  16. java合肥工业大学考试题库_合肥工业大学java程序设计实验二
  17. 来把狠的——传一个肖邦的《Black Key Exercise(黑键练习曲)》
  18. oracle数据库注入实战,教你oracle注入
  19. 阿里云ecs 发邮件
  20. 微信小程序-评论业务的实现

热门文章

  1. 易飞9审核员调用API
  2. 乐pro3刷LineageOS 出现错误07
  3. poj2983poj1364
  4. OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏渲染,解决透明冲突,画中画)
  5. 产品经理/互联网非技术岗如何写一份好的简历?
  6. 易康_最佳分割尺度的选择——ESP2工具的使用
  7. ubuntu W: GPG 错误:http://ppa.launchpad.net/fossfreedom/indicator-sysmonitor/ubuntu xenial InRelease:
  8. Theano权重子集更新
  9. java读取qq邮箱_java获取qq邮箱中的好友列表
  10. android build.prop文件