微服务架构并无标准架构,不然什么架构师大会也不会各个系统架构百花齐放了。虽然没有固定的套路,却有一些经验,今天就来做一个总结。

基于角色拆分

这种拆分方式常见于基础设施以及其PaaS层的架构,比如服务治理k8skafka。所谓基础组件的PaaS层是说,基础设施本身主要作为基础设施使用,是IaaS层。但是基础设施本身需要维护功能,需要增删改查等运维操作。业界基于开源做的二次开发也着重在做这方面的工作。

下面以kafka做说明。因为要上升到PaaS层,下图基于美团对kafka的二次开发封装,产品名叫mafka

咱们直接看★标注的部分mafka-manager,这个就是运维操作统一管理端。充当的就是管理者的角色。再看看kafka其他组件的名称:生产者( producer )、消费者( consumer )、经纪人( broker )。核查员( monitor )。架构的组织都是根据角色来来划分的。

为什么我要将mafka-manager用★标注呢。因为不管是基础设施还是别的,以产品化的观点,需要对外提供一个完整的产品体验。完整的产品包含什么呢?统一的产品外观、统一的接口定义、统一的服务运营。

我们要接入mafka,虽然最终程序里要用的是生产者、消费者这些,但是第一步都要在mafka-manager对应的界面上申请。mafka-manager类似于网关入口的角色。业界有专门把这些接口服务抽象出来叫做api网关。

k8s架构中,api网关这个概念更加明显一些。

kubectl是k8s的控制台命令交互界面、web UI是浏览器交互界面,不同的交互界面会走统一的api server。这里api server就是api网关服务。

基于可扩展性拆分

首先来了解一下AKF扩展立方体。

AKF扩展立方体(Scalability Cube),是《架构即未来》一书中提出的可扩展模型,这个立方体有三个轴线,每个轴线描述扩展性的一个维度:

X轴 —— 代表无差别的克隆服务和数据,工作可以很均匀的分散在不同的服务实例上;

Y轴 —— 关注应用中职责的划分,比如数据类型,交易执行类型的划分;

Z轴 —— 关注服务和数据的优先级划分,如分地域划分。

白话来说:X轴拆分就是通过加机器水平拆分;Y轴拆分就是按业务逻辑垂直拆分;Z轴拆分就是按照算法进行分片,这个算法比如按地域,不同地域访问不同的分片或者服务。

举个例子,比如一般公司的redis集群会有一个团队来进行统一维护。redis集群有主有从,数据都是一样的,多副本容灾,这是X轴水平的拆分。一个公司很多业务,redis团队会对不同的业务提供不同的集群,这是Y轴垂直拆分;集群内部数据会通过sharding做分片,这是Z轴算法拆分。

基于稳定性拆分

在业务架构中,通常会通过核心模块的划分或者主次链路的划分来进行微服务拆分。

在《三平面分离架构》中,我提到过分离出控制平面、数据平面和管理平面。这本质上也是通过核心模块划分来进行拆分的一种方式。控制平台一般是核心链路,核心数据作为控制逻辑的一部分可以通过本地缓存等措施弱依赖于数据平面。管理平台是后台管理等,用于增删改查,人工操作时才用,其他时间挂掉都没关系。

基于资源需求拆分

根据性能需求来进行拆分。简单来说就是访问量特别大,访问频率特别高的业务,又要保证高效的响应能力,这些业务对性能的要求特别高。比如积分竞拍、低价秒杀、限量抢购。

我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来。这么做的原因非常简单,一个保证满足高性能业务需求,另一个保证业务的独立性,不互相影响。

类似积分竞拍、超低价秒杀、限量抢购,对瞬间峰值和计算性能要求是非常高的。这部分的业务如果跟其他通用业务放在一块,一个是可能互相影响,比如某个链路阻塞,会导致雪崩沿调用链向上传递。

另外一个是如果多个业务耦合在一块,发布频率变高、服务扩缩容变难、维护复杂度变高。如下图例子所示,订单服务是一个性能要求高的服务,一般会单独拆分。

总结

咱们实际工作中,通常会发现一种拆分方式和另一种拆分方式并不冲突。一个完整的架构也不只使用了一种拆分方式。《领域驱动设计(DDD)中简单易用的10种技巧》也可以配合来使用。

本文提到的api网关严格上不是业务划分时的一个模块。业界通常把api网关作为一个基础设施。如果在架构图中包含了api网关通常是下图所示:

上图中的架构既包含了业务逻辑的业务划分,也有配置中心、注册中心这样的技术划分。总体上来说是一个技术架构图。而api网关本身也更多被归为是技术概念,而不是业务概念。

在《尤娜系统的第一次飞行中换引擎的架构垂直拆分改造》中,首先就拆分出来了api网关层,这说明尤娜要下一盘大棋,最终对外会提供一个统一的产品。

四种常用的微服务架构拆分方式相关推荐

  1. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  2. 一个更好的可视化微服务架构的方式

    本文讲的是一个更好的可视化微服务架构的方式[编者的话]如何快速地可视化一个微服务架构,本文作者有一个很酷的办法,赶紧来看看吧! [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为 ...

  3. 微服务架构设计模式 pdf_六种常用的微服务架构设计模式之一: 入门级模式...

    入门级模式之细粒度SOA 细粒度SOA可以说是微服务的"大爆炸"时代.许多人认为,细粒度SOA架构风格起源于Netflix.在一开始,Netflix宣称他们构建的架构就是细粒度的S ...

  4. 通过Orchestra以微服务架构的方式生成guid

    微服务架构: 把这个github 项目clone到本地: 按顺序依次启动: orchestra: 启动KOI App对应的web socket server: 启动负责生成KOI id的微服务: 打开 ...

  5. 云原生架构下微服务最佳实践-如何拆分微服务架构

    转自: https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651821066&idx=1&sn=8475f813a8 ...

  6. python微服务框架_微服务架构框架有哪些?常用微服务架构介绍

    小伙伴们知道常用的微服务架构框架有哪些吗?上回我们介绍了一些常用的微服务架构设计模式,这次我们就来了解一下一些常用的微服务架构框架吧. 一.Dubbo Dubbo框架是由阿里巴巴开发的开源式的分布式服 ...

  7. 微服务架构何去何从?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 微服务架构模式经过 5 年多的发展,在各行各业如火如荼地应 ...

  8. 为什么选择微服务架构?如何取舍?

    转载自  为什么选择微服务架构?如何取舍? 微服务是什么     微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务 ...

  9. 孙玄谈:微服务架构何去何从?

    前言 分布式技术的发展,深刻地改变了我们编程的模式和思考软件的模式.2019 岁末,PingCAP 联合 InfoQ 共同策划出品"分布式系统前沿技术 "专题, 一起探索这个古老领 ...

最新文章

  1. python绘制动态模拟图-Python实现模拟时钟代码推荐
  2. DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
  3. oracle索引图文解析,oracle索引介绍(图文详解)
  4. oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
  5. 用信号量解决进程的同步与互斥
  6. 为什么技术人员要具备产品思维?
  7. QT发布windows程序
  8. 精选掘金后端小册及优惠购买链接
  9. 阿克曼函数实现(Java代码)
  10. 微信公众号一次性订阅消息功能开发实践
  11. 用python做一个飞机大战(一)
  12. 蒂芙尼推出由碧昂丝和Jay-Z主演的最新广告宣传片
  13. 中国好生意 经典论述:哈林是来主持的,刘欢是来开家长会的,那英是来唠嗑的,杨坤是来做宣传的,而......
  14. QQ邮箱取消免费扩容;苹果搜索引擎“胎死腹中”,核心成员已回归谷歌麾下;Xcode 14导致应用体积大增|极客头条
  15. python正方形螺旋线-利用Python绘制一个正方形螺旋线
  16. c#通联支付demo_通联支付接口示例源码(.net/php/java)
  17. cocos-creator学习笔记1(旋转,位置移动,键盘监控移动基础)
  18. javascript中getmonth()的问题
  19. 【廖雪峰Java入门】学习汇总
  20. go语言编程二维码生成及识别

热门文章

  1. 小米手环服务器故障维修,小米手环假死解决办法_小米手环6触摸没反应怎么办...
  2. pdf A4纸打印成每页两张 正反面打印的小册子 中间装订
  3. html5移动轮播图,简单的支持移动设备的轮播图jQuery插件
  4. 战略绩效管理工具:平衡计分卡简介
  5. 下载 145 部盗版视频,被法院判赔偿 70 万元!
  6. 【PM 产品】读人人都是产品经理有感 — Part one
  7. divi模板下载_Divi:拖放式WordPress主题
  8. Java编程配置思路详解,手把手教会你
  9. pd.columns和pd.columns.tolist
  10. 有什么好用的证件照软件?好用的证件照编辑工具分享