每日播报!微服务的开发模式 一文读懂微服务设计模式

2023-07-03 06:37:51 | 来源:互联网

hello大家好,我是大学网网小航来为大家解答以上问题,微服务的开发模式,一文读懂微服务设计模式)很多人还不知道,现在让我们一起来看看吧!


(资料图)

数十年来,人们一直采用单体构架来开发应用程序,而现在越来越多的人正在转向微服务架构。微服务架构可以为我们带来更快的开发迭代速度,更高的可扩展性、可靠性,以及灵活性—使用更合适的技术栈来开发各个组件。微服务架构依赖于各个独立部署的微服务,每个微服务都有自己独特的业务逻辑和数据库,对它的测试、增强和扩缩容也与其他服务无关。然而,微服务架构也面临着许多挑战,为了解决那些最常见的问题,一些设计模式被广泛地采用和改进,本文我们将介绍其中最重要的一部分。

在微服务架构中,有超过8种必备的设计模式,根据你正在开发的应用类型不同,我们将它们分为两大类——绿地应用(Greenfield application)和棕地应用(Brownfield application)。接下来,我们将更详细地了解这些模式。

当我们从头开始设计应用时,我们可以随心所欲地采用微服务所需的各种最新、最先进的设计模式,现在让我们来一探究竟。

当你将整个业务拆分为多个微服务时会遇到下述问题:

你如何处理诸如鉴权、限流、重试、负载均衡、服务发现等问题?

你如何避免由于客户端直连微服务引发的网络拓扑混乱和耦合过高的问题?

如果客户端只需要部分数据集,谁来做数据过滤和映射?

如果客户端需要调用多个微服务才能获取到完整数据,谁来做数据聚合?

为了解决这些问题,API网关应运而生,它位于客户端和微服务之间,具有反向代理、请求聚合、优雅下线、服务发现等功能,它还可以根据客户端的不同选择暴露不同的API接口。

图1 – API网关示例UI组合模式

在这种模式下,微服务由负责具体业务的不同团队开发。而某些UI页面可能需要来自多个微服务的数据,例如,购物网站包含类目、购物车、购买选项、用户评价等功能,这些数据归属于各个微服务,由不同的团队负责。如何协调这个问题呢?

UI团队可以创建一个页面框架,通过组合多个UI组件来构建完整的页面,这种框架也称为单页应用(SPA, single-page application),像AngularJS 和 ReactJS 等前端框架都支持这一功能。这种模式还带来了更好的用户体验,允许用户刷新任何指定的页面区域。

微服务需要设计得独立且松耦合,那么对应的数据库架构应该是怎样的呢?有以下一些问题需要考量:

一个具体的业务场景可能涉及到多个服务的查询、联表、持久化等数据库操作,而这些服务由不同的团队负责

在异构的微服务架构中,每个微服务可能有不同的数据存储要求,如非结构化数据(NoSQL数据库)、结构化数据(关系型数据库)、图数据(Neo4j)

考虑到可伸缩性,数据库需要有备份和分片

图2 –服务配置独立数据库示例

一个微服务事务必须限制在它自己的数据库中,其它需要该类数据的服务必须调用这个微服务的API接口。如果你使用的是关系型数据库,那么每个服务使用自己独立的库有利于保证数据的私有性。同时为了更好地隔绝数据访问,最好为每个服务分配不同的数据库账号,这样确保了开发人员不能绕过微服务的API而直接访问数据库。

独立数据库模式使得每个微服务都可以选用最合适的数据库类型,如使用Neo4j用于社交图数据,使用Elasticsearch用于文本搜索。

当我们为每个服务配置一个独立数据库时,在实现跨服务事务时会出现问题,因为在这种情况下,本地ACID已经无法处理,我们如何保证数据一致性呢?解决方式是使用saga模式。saga是指一系列本地事务,其中每个本地事务更新完数据库后,会发布事件以触发下一个本地事务,saga模式还要求在任何本地事务失败时进行补偿。

有两种实现saga模式的方式:

控制比编排更容易实现,在控制机制下,只有控制器需要协调所有事件,而在编排中,每个微服务都必须监听并对事件做出反应。

在微服务架构中,一个操作会涉及调用多个微服务,如果其中一个下游的服务出现故障,它仍会继续调用该下游服务,最终导致耗尽所有的网络资源,同时也会造成较差的用户体验。那么我们该如何处理级联故障呢?

我们从电路断路器中得到灵感,设计出熔断模式来解决这个问题。具体来说,在客户端和微服务之间,会设置一个熔断器,用于追踪失败调用的次数,如果它超过阈值,它将触发熔断并快速失败。在一段时间之后,熔断器会再允许小部分请求通过来检测服务是否正常,如正常则恢复流量,否则继续保持断路一段时间。

图3 –熔断器状态机

在微服务架构中,复杂的大型应用必须做到合理划分、高内聚、低耦合,每个微服务还应该是自治的,并且足够小,可以由"批萨大小"的团队(6-8人)开发维护。那么,我们应该怎么划分服务呢?

总体来说有两种划分方式——按业务能力或者子域:

业务能力是指可以产生价值的行为,例如,在一家航空公司中,业务能力可以是预订、销售、支付、座位分配等;子域概念来自于领域驱动设计(Domain-Design Pattern, DDD),一个领域由多个子域组成,如产品目录、订单管理、配送管理等。

适合棕地应用的设计模式

由于互联网应用已经发展了数十年,大约有80%的公司的业务是基于现有的应用运作的,这些应用被称作棕地应用。将棕地应用程序迁移到微服务架构是极具挑战性的工作。让我们看看有哪些设计模式可以帮助我们更好地简化迁移的工作。

扼杀者模式,取名来自于藤蔓这种植物,它通过缠绕杀死它所依附的树木。在这种模式下,单体应用的各功能被逐步地被替换为微服务,而对于客户端来说,由于外部API保持不变,客户端感知不到任何变化,随着转换进度的推进,最终所有功能都被重构为微服务,新架构"扼杀"取代了原来的单体架构。

当新应用需要与遗留应用集成时,过时的基础协议、API和数据模型是一个让人头大的难题。如果妥协沿用旧模式和旧语义,可能会限制和破坏新应用的技术设计。要如何才能避免这个问题呢?

我们需要新增一个防腐层来转换两个系统之间的通信,防腐层同时兼容新应用和旧应用的数据模型,并根据与它通信的对象决定采用哪种通信方式。这样就实现了双赢,既不用更改旧应用逻辑,也确保新应用无需在设计和技术上做妥协。

图4 –防腐层示例

微服务架构为开发人员带来了很大的灵活性,但随着要管理的组件数量的增加,也带来了许多难题。在本文中,我介绍了对于微服务应用开发来说最必不可少的几种设计模式,供读者了解和学习。

原文链接:https://www.51cto.com/article/719321.html?utm_source=tuicool&utm_medium=referral

本文就为大家讲解到这里,希望对大家有所帮助。

上一篇 下一篇

相关新闻

每日播报!微服务的开发模式 一文读懂微服务设计模式

广州6月二手住宅网签套数环比跌5%:受新房分流等因素影响-短讯

下半年沿着三大方向进行资产配置 热头条

环球热消息:万里长城的简介_万里长城的简介详情介绍

孙颖莎咋了?走了陈梦老路,丢冠后黑脸,日本队击败国乒捂嘴偷笑

世界滚动:我的5G数字分身把MWCS电信展台逛个遍

【观察】“内部交流”猛增 英超还是钱多人傻么?|每日报道

今热点:循迹银河|媒体试驾会 · 济南站 感受吉利银河L7不凡实力

有钱花逾期还款流程是什么?多久可以协商还款? 全球报道

桃花源记翻译及原文 这里原文译文都有 全球快讯

TCL中环:控股股东增持公司股份545.56万股_热资讯

环球速讯:最新人民币兑换立陶宛立特汇率汇价查询_2023年07月02日

招联逾期全部还款吗?招联逾期会有什么影响? 热文

山西养老金调整方案出来没?山西省2022年调整退休人员基本养老金方案参考

当前热讯:海报时评丨科技助力山东乡村振兴加码提速

最新新闻

每日播报!微服务的开发模式 一文读懂微服务设计模式

广州6月二手住宅网签套数环比跌5%:受新房分流等因素影响-短讯

下半年沿着三大方向进行资产配置 热头条

环球热消息:万里长城的简介_万里长城的简介详情介绍

孙颖莎咋了?走了陈梦老路,丢冠后黑脸,日本队击败国乒捂嘴偷笑

世界滚动:我的5G数字分身把MWCS电信展台逛个遍

【观察】“内部交流”猛增 英超还是钱多人傻么?|每日报道

今热点:循迹银河|媒体试驾会 · 济南站 感受吉利银河L7不凡实力

有钱花逾期还款流程是什么?多久可以协商还款? 全球报道

桃花源记翻译及原文 这里原文译文都有 全球快讯

TCL中环:控股股东增持公司股份545.56万股_热资讯

环球速讯:最新人民币兑换立陶宛立特汇率汇价查询_2023年07月02日

招联逾期全部还款吗?招联逾期会有什么影响? 热文

山西养老金调整方案出来没?山西省2022年调整退休人员基本养老金方案参考

当前热讯:海报时评丨科技助力山东乡村振兴加码提速

今日13时 亚洲杯中日女篮决赛争冠

全球新动态:白头如新倾盖如故算是表白吗 白头如新倾盖如故的意思

环球观速讯丨太遗憾!国乒女单1:3无缘冠军,3项全军覆没,平野连胜国乒2人

土耳其首都伊斯坦布尔在哪个国家_伊斯坦布尔 土耳其最大城市相关内容简介介绍

一份《备忘录》引发内讧!

工信部:以高质量供给引领带动家电消费 焦点速讯

王者荣耀:来真的?大锤哥对战俄罗斯职业拳击手阿里!

天天速递!定价策略 第三版

终端普遍优惠10万,加入价格“内卷”的宝马i3是否真香?|快看

不能开黄腔是什么意思_不会开黄腔是什么意思

北京大兴国际机场蝉联CAPSE最佳机场并荣获航空公司满意度最佳机场称号_世界动态

【乡村振兴】东兴:化橘红丰收采摘忙 乡村振兴产业旺

全球时讯:为期62天全国铁路暑运启动 预计发送旅客7.6亿人次

保健品大豆异黄酮能长期吃吗_大豆异黄酮能长期吃吗 世界观热点

重庆市垫江天宝寨_牛头寨 重庆垫江牛头寨