互联网架构设计漫谈 (4)-你知道微服务的“分与合”
互联网架构设计漫谈 (4)-你知道微服务的“分与合”
业务高速发展的今天,单应用已经无法支撑庞大/复杂的业务系统。所以需要根据业务进行拆分,方便业务做扩容,并且增加大系统的团队协作性,于是微服务就应运而生了。微服务讲究“分与合”,“分”就是按照业务边界把大的服务拆成小的服务让他们各司其职,“合”就是把这些微服务用合理的方式组合起来让他们协同工作。
要点:
微服务拆分原则
微服务协作方式
微服务拆分原则
按照业务划分边界,秉承高类聚松耦合的思想。
松耦合:能够独立开发修改以及部署单个服务而不需要修改系统的其他部分。服务不需要知道其他服务的实现细节,服务之前只需要定义调用的接口就好.
高内聚:尽量让服务内的功能单一,该功能的实现是业务系统中的较小单元。如果只是功能级别的变化,那么只用修改这个服务就可以了,不需要对其他的服务造成影响。一个微服务包括独自的业务领域,缓存,数据库,用单独的容器装载。
划分服务边界:微服务是为实际业务提供支撑的,所以需要我们的架构师对业务有足够的了解,把相关性比较高的业务放到一个服务中,定义其数据模型以及对外的接口。定义出需要隐藏的业务部分,以及需要共享的数据模型。例如:订单服务的范围包括订单的所有操作:下单,退单,确认订单等等;库存系统包括增减库存等操作。那么订单系统和库存系统需要通过接口进行访问,他们共享了“库存项”的数据模型。库存服务会被订单服务调用,那么订单服务就是消费者,库存服务就是服务提供者。
服务的消费者与服务的提供者
服务之间也存在互相调用的情况,例如:订单服务调用库存服务。有的服务既是服务的消费者又是服务的提供者,这个时候有可能出现循环调用。这样在服务版本升级的时候会出现混乱。
建议在这种情况下把服务分成两个不同的服务版本。针对具体情况升级版本。
微服务协作方式
通常微服务在调用的时候都存在服务的消费方和服务的提供方,消费方发起调用,提供方响应请求,并且返回结果。这个调用有同步和异步之分,为了提高响应的效果一般会采取异步调用的方式。那么这些服务在一起合作完成工作的时候,又会有编排和协同两种模式。通俗的说“编排”模式需要设计一个“中心处理”服务,其中记录了需要调用哪些服务。例如:中心服务“A”中会记录需要调用按照顺序调用服务“B”和“C”。那么请求只用向中心服务“A”发指令就可以了,中心服务自己去调用“B”和“C”,并且控制事务以及返回结果。如下图:
编排模式
这种模式的缺点很明显就是太过依赖这个中心服务了,所有的业务都会在“中心服务”汇总,稳定性和可扩展性都不好。
目前使用更多的是“协同”模式,接到用户请求以后系统自动发送“用户事件”,凡订阅了该“用户事件”的服务接受到该事件就自动完成自己的工作,做到各司其职。消除了“编排”模式带来的耦合,让服务之间的依赖更少。
协同模式
再来看看服务协同工作的全貌
客户端的请求最先进入“代理层”,通过“服务网关”获取调用服务的信息,特别是遇到同一服务名称多个实例的情况,这里会有特定的轮询机制访问具体的服务实例。同时“服务网关”也会从服务注册中心拉取服务注册的信息,这样一旦微服务注册到了“服务中心”就会被“服务网关”知晓。服务之间也可以直接通过REST或者RPC的方式调用。服务本身有缓存也可以使用分布式的缓存。每个服务由于配置的IP或者端口以及版本环境的差异,配置文件会有所不同,可以通过“配置管理”服务来完成。
总结:微服务拆分讲究“高内聚”,“松耦合”,按照业务边界来拆分。微服务之间可以通过服务注册中心,服务网关,配置管理,消息队列的方式协作。也就是微服务的“分与合”。
互联网架构设计漫谈 (4)-你知道微服务的“分与合”相关推荐
- 互联网架构设计漫谈 (5)-搞清SpringCloud
互联网架构设计漫谈 (5)-搞清SpringCloud 微服务发展至今有许多公司都提供了架构来协助搭建微服务平台,比较著名的有 Dubbo,DubboX,Spring Cloud.今天带大家来了解一下 ...
- 互联网架构设计漫谈 (3)
互联网架构设计漫谈 (3) 中小型互联网公司在并发量不高的情况下可以选用软件负载均衡作为代理层,他们通常和更靠外的"接入层"的硬件负载均衡器合作,为用户提供更好的服务.软件负载均衡 ...
- 互联网架构设计漫谈 (1)-概述
互联网架构设计漫谈 (1)-概述 互联网已经在中华大地兴起多年,各种互联网架构也是层出不穷,抱着学习的态度在这里分享一下对互联网架构的一些理解,漫谈互联网架构设计. 系统架构图 上图想必大家都不陌生了 ...
- 互联网架构设计漫谈 (6)-90%的架构师都知道的工作流原理
互联网架构设计漫谈 (6)-90%的架构师都知道的工作流原理 工作流是互联网中常见的应用场景,目前国内有很多厂商提供各种各样的工作流引擎.在国际也有一些知名的工作流引擎,比如:jBPM 和 Activ ...
- 互联网架构设计漫谈 (2)
互联网架构设计漫谈 (2) 应用的接入层通常需要承载大量的网络请求,有些互联网企业几十万PV请求,在软件负载均衡无法支撑的情况下会考虑采用硬件负载均衡的技术帮助控制流量,然后再转发给软件负载均衡进行进 ...
- 架构设计 | 基于Seata中间件,微服务模式下事务管理
源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...
- flowable工作流 流程变量_互联网架构设计漫谈 (6)-90%的架构师都知道的工作流原理...
工作流是互联网中常见的应用场景,目前国内有很多厂商提供各种各样的工作流引擎.在国际也有一些知名的工作流引擎,比如:jBPM 和 Activiti. 他们都老牌的工作流引擎.同时都遵循BPMN 2.0的 ...
- 某灵JAVA互联网架构师专题/分布式/高并发/微服务
威❤:codeMaster001 Java可以做什么 图灵计算机架构 开发工具 涉及编译(javac),运行(java),监视,调试和文档生成(javadoc) 编程接口 API 提供 Java 编程 ...
- 问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理
一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用户提供了AT.TCC.SAGA.XA事务模式,为用户打造一 ...
最新文章
- 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击
- GANs笔记(1) - 初步了解 GANs
- 永磁同步电机试验系统的设计
- 计算机硕士工资情况收集
- C++与Qt开发人机象棋(第二部分)
- android 控件覆盖关系,安卓子控件抢占父控件点击事件或者焦点问题
- 使用PostgREST的RestAPI操作之管理与优化
- Windows Server 2012/2012 R2:安装和配置 SMTP 服务器
- 纯C下用ODBC访问数据库(实例) 转载
- RS422-RS485-RS232标准接线
- 【参赛日记】参加天池大数据竞赛
- 央行征信爬虫解决方案
- 关于计算机的英语演讲稿三分钟,三分钟电脑的英文演讲稿5篇.doc
- 磨金石教育摄影技能干货分享|优秀摄影作品欣赏——艺术的表达
- npm 脚本跨平台设置环境变量命令 cross-env
- 简要描述临界资源、临界区及互斥同步机制的原则
- Cesium中对geojson的处理
- 关于狄利克雷分布的理解
- RC522 - NFC刷卡模块
- SSH远程登录报错 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
热门文章
- 1013.windows平台下移植qtmqtt三方库
- mysql建立索引的优缺点|创建索引alter或create索引分类(PRIMARY KEY,UNIQUE KEY,FULLTEXT,INDEX)作用查看索引show index from table
- netif_receive_skb 函数解析
- QT5开发及实例学习之七布局管理
- linux 魔术分区,Parted Magic-Linux 中的分区魔术师
- 知易游戏开发教程cocos2d-x移植版001
- [转] Agile Software Development 敏捷软件开发
- linux下安装jmeter
- 熟悉HBase基本操作
- EmWin 接触---基础函数