发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

微服务设计模式(上)

  • 2019-11-20
  • 本文字数:2197 字

    阅读完需:约 7 分钟

微服务设计模式(上)

微服务体系结构已经成为现代应用程序开发的实际选择。虽然它解决了某些问题,但它不是一颗银弹。它也有一些缺点,在使用这种体系结构时,有许多问题必须解决。这就需要学习这些问题中的通用模式,并使用可重用的解决方案来解决它们。因此,需要讨论微服务的设计模式。在深入研究设计模式之前,我们需要了解微服务体系结构的构建原则:


1.可伸缩性


2.可用性


3.弹性


4.独立的,自主的


5.分散治理


6.故障隔离


7.自动预配


8.通过 DevOps 持续交付


应用所有这些原则带来了一些挑战和问题。让我们讨论这些问题和它们的解决方案。

1 分解模式

a、根据业务能力分解

问题

微服务就是让服务松散耦合,应用单一职责原则。然而,将应用程序分解成更小的部分必须逻辑地完成。如何将应用程序分解为小型服务?

解决方案

一种策略是根据业务能力分解。业务能力是企业为了产生价值而做的事情。给定业务的功能集取决于业务类型。例如,保险公司的能力通常包括销售、营销、承保、理赔处理、开票、合规等。每个业务能力都可以被看作是一种服务,只是它是面向业务的,而非技术性的。

b、根据子域分解

问题

使用业务功能分解应用程序可能是一个很好的开始,但是您会遇到所谓的“上帝类”,它们不容易分解。这些类在多个服务中很常见。例如,Order 类将用于 Order 管理、Order 收入、Order 交货等等。我们如何分解它们?

解决方案

对于“上帝类”问题,DDD(领域-驱动 设计)起到了拯救作用。它使用子域和有界上下文概念来解决这个问题。DDD 将为企业创建的整个领域模型分解为子领域。每个子域都有一个模型,该模型的作用域称为有界上下文。每个微服务都将围绕有界上下文开发。


备注:识别子域并不是一项简单的任务。这需要对业务有所了解。与业务功能一样,子领域是通过分析业务及其组织结构以及识别不同的专业领域来识别的。

c、扼杀者模式

问题

到目前为止,我们讨论的设计模式是对 greenfield 的应用程序进行分解,但是我们所做的 80%的工作是对 brownfield 应用程序进行分解,brownfield 应用程序是大型的、单一的应用程序。将上面所有的设计模式应用到它们上是很困难的,因为将它们分解成更小的部分同时使用是一个很大的任务。

解决方案

勒死人的模式来了。勒死人的模式是基于一种藤蔓的类比,藤蔓缠绕着一棵树。这个解决方案很适合 web 应用程序,在 web 应用程序中,一个调用来回进行,对于每个 URI 调用,可以将服务分解为不同的域并作为独立的服务托管。我们的想法是一次做一个领域。这将创建两个独立的应用程序,它们并排放在同一个 URI 空间中。最终,新重构的应用程序将“扼杀”或替换原始应用程序,直到您最终可以关闭单片应用程序为止。

2 集成模式

a、API 网关模式

问题

当应用程序分解为更小的微服务时,有几个问题需要解决:


1.如何调用多个微型服务来提取生产者信息。


2.在不同的通道(如桌面、移动设备和平板电脑)上,应用程序需要不同的数据来响应相同的后端服务,因为 UI 可能不同。


3.不同的使用者可能需要不同格式的可重用微服务的响应。谁将进行数据转换或字段操作?


4.如何处理不同类型的协议,有些协议可能不受生产者微服务的支持。

解决方案

API 网关有助于解决微服务实现引起的许多问题,而不仅仅局限于上述问题。


1.API 网关是任何微服务调用的单一入口点。


2.它可以作为代理服务将请求路由到相关的微服务,抽象生产者的详细信息。


3.它可以将请求分散到多个服务,并聚合结果发送回消费者。


4.一刀切的 api 不能解决所有用户的需求;该解决方案可以为每种特定类型的客户机创建细粒度的 API。


5.它还可以将协议请求(例如 AMQP)转换为另一个协议(例如 HTTP),反之亦然,以便生产者和消费者能够处理它。


6.它还可以减轻微服务的身份验证/授权责任。

b、聚合器模式

问题

我们已经讨论了如何解决 API 网关模式中的聚合数据问题。然而,我们将在这里整体地讨论它。在将业务功能分解为几个较小的逻辑代码片段时,有必要考虑如何协作每个服务返回的数据。这种责任不能留给消费者,因为那时它可能需要了解生产者应用程序的内部实现。

解决方案

聚合器模式有助于解决这个问题。它讨论了我们如何聚合来自不同服务的数据,然后将最终的响应发送给消费者。这可以通过两种方式实现:


  • 复合微服务将调用所有所需的微服务,合并数据,并在发送回之前转换数据。

  • API 网关还可以将请求划分为多个微服务,并在将数据发送给使用者之前聚合数据。


如果要应用任何业务逻辑,建议选择组合微服务。否则,API 网关就是已建立的解决方案。

c、客户端 UI 组合模式

问题

当通过分解业务功能/子域来开发服务时,负责用户体验的服务必须从多个微服务中提取数据。在单片世界中,从 UI 到后端服务只有一个调用来检索所有数据并刷新/提交 UI 页面。然而,现在情况就不一样了。我们需要知道怎么做。

解决方案

使用微服务,UI 必须被设计成具有屏幕/页面的多个部分/区域的骨架。每个部分将调用单个后端微服务来提取数据。这被称为组合特定于服务的 UI 组件。像 AngularJS 和 ReactJS 这样的框架很容易做到。这些屏幕称为单页应用程序(SPA)。这使得应用程序能够刷新屏幕的特定区域,而不是整个页面。

总结

在本篇中,我们给大家介绍了分解模式和集成模式,在下篇文章中将会给大家带来数据库模式、可观测性模式和横切关注点的模式。希望对大家在理解微服务方面有所帮助。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/j1Abgg7kIrbSe5hi7W4c4Q


2019-11-20 11:371122

评论

发布
暂无评论
发现更多内容

作为ISV,这是我为什么选择华为云ECS的理由

平平无奇爱好科技

深度解读:ASP.NET Core Blazor 含快手入门教程

EquatorCoco

asp.net

从实际业务出发,OA上云我更推荐华为云

平平无奇爱好科技

华院计算宣晓华:未来十年,基于数据与知识融合的模型将大放异彩

TE智库

人工智能 AI 华院计算

全方位赋能开发者成长!华为开发者联创日·深圳站圆满落幕

彭飞

生态共建丨YashanDB与天玑数据完成兼容互认证 - 知乎

YashanDB

中国自动驾驶发展加速,已实现多场景落地应用

来自四九城儿

一文带你读透,MySQL8新特性窗口函数详解

EquatorCoco

MySQL 数据库

高效协同办公+降本增效,华为云OA上云解决方案做了什么?

YG科技

学习 SSL/TLS ,这一篇就够了

火山引擎边缘云

TLS 证书 SSL证书

2023-06-21:redis中什么是BigKey?该如何解决?

福大大架构师每日一题

redis 福大大架构师每日一题

企业上云数据安全不容忽视,华为云ERP上云解决方案全面保障信息安全

YG科技

沙利文发布《2023中国数据管理解决方案市场报告》,腾讯云位列领导者梯队

说山水

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?

福大大架构师每日一题

Java Go 福大大架构师每日一题

自动驾驶的必要技术和等级

来自四九城儿

复旦大学高校专区入驻飞桨AI Studio,优质教育资源等你来学!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨

敏捷工具盘点

顿顿顿

敏捷工具 scrum工具 scrum敏捷工具

一文吃透什么是ERP、中台、低代码

这我可不懂

中台 低代码 ERP JNPF

如何用数字人技术让课堂活起来?番职院和3DCAT实时云渲染给出答案

3DCAT实时渲染

元宇宙 实时云渲染 虚拟数字人 AI虚拟形象

卡口服务 —— 基于前端巡检系统的拓展实践|得物技术

得物技术

基于 Flink CDC 构建 MySQL 到 Databend 的 实时数据同步

Databend

AI血洗时尚圈!就连这些线上店家都开始用AI生成爆款商品了

Openlab_cosmoplat

人工智能 AI

全球唯一云厂商 华为云入选2023Gartner云数据库管理系统客户之选

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

研发效能平台的“双流”模型

CODING DevOps

作为IT从业者,为什么我推荐华为云ECS?

平平无奇爱好科技

聊一聊“会员制”

鲸品堂

会员中心 付费会员 企业号 6 月 PK 榜

把金融航母开进智能峡湾,总共分几步?

脑极体

华为 AI 金融

Cloud Studio 浏览器插件来啦

CODING DevOps

中国的“贝尔实验室”:我们的数据库从内核的第一行代码写起

YashanDB

数字时代云成本越来越高,企业IT负责人们该如何选择弹性云服务器呢?

YG科技

企业OA上云靠谱最重要,多年业务推进为何华为云成为我的首选?

平平无奇爱好科技

微服务设计模式(上)_文化 & 方法_360云计算_InfoQ精选文章