写点什么

微服务设计模式(上)

  • 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:371295

评论

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

教你如何将二进制文件导入到数据库

华为云开发者联盟

数据库 数据 二进制 GaussDB(DWS) 二进制文件

语言特性实战(一)

南冥

iOS底层面试题(上篇)

程序员 面试

Rancher × Apache APISIX:极速部署更好用的开源网关和 Ingress Controller

API7.ai 技术团队

Kubernetes 网关 rancher APISIX

融云技术分享:全面揭秘亿级IM消息的可靠投递机制

JackJiang

即时通讯 IM 可靠消息最终一致 融云

英特尔陈伟:AIoT时代的新思维

E科讯

阿里大佬的「算法界Offer收割机」火爆Github,一夜获上万star

Java 编程 程序员 架构师 计算机

花费近一年时间整理的Android核心知识清单,面试篇

欢喜学安卓

android 程序员 面试 移动开发

异常是怎么被处理的?这题的答案不在源码里面。

why技术

面试 JVM 字节码

Linux安装与常用命令

IT视界

Linux linux命令 Linux安装

DataPipeline正式成为信创工委会会员单位!致力于为世界级用户提供更优质产品和服务

DataPipeline数见科技

大数据 数据融合 数据管理

直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊

Java架构没有996

Java mongodb 程序员 后端 JAVA开发

HarmonyOS走进西安电子科技大学国际双创周

科技汇

如何包容他人的多样性

escray

学习 极客时间 朱赟的技术管理课 7月日更

Optional 的使用会导致性能下降吗

小技术君

性能优化 Optional

云原生时代,服务网格能给企业带来哪些价值?

行云创新

云原生 解决方案 服务网格

技术解码丨实时音视频与PSTN融合的解决方案

腾讯云音视频

腾讯云 音视频 PSTN

程序员工资高,到底程序员的工资有多高?你不了解的程序员!

微软亚研院:如何看待计算机视觉未来的走向?

百度开发者中心

最佳实践 方法论 计算机视觉 语言 & 开发 文化 & 方法

架构之:REST和HATEOAS

程序那些事

架构 系统架构 Rest 软件架构

SpringBoot中时间格式化的5种方法!

王磊

spring springboot

生产上数据库死锁,是该程序员祭天了

skow

Java MySQL 面试

聊聊数据仓库建设

水滴

数据仓库 数仓 数仓架构 主数据管理 标签体系

应聘高级Android工程师历程感言,你不懂还不学?

欢喜学安卓

android 程序员 面试 移动开发

Linux文件查找常用命令-详细笔记

学神来啦

云计算 Linux 运维

从零开始学习3D可视化之演示项目

ThingJS数字孪生引擎

大前端 可视化 3D 3D可视化

大专的我,闭关56天,含泪拿下阿里offer,五轮面试,六个小时灵魂拷问

《MySQL是怎样运行的》读后思考

MySQL

2021 挚物·AIoT产业领袖峰会召开,EMQ 映云科技喜获双料荣誉

EMQ映云科技

百度 华为 工业互联网 AIOT 边云协同

一萌妹子的面试经历,美团四面三小时,成功拿到Java岗offer

白亦杨

Java 编程 程序员 架构师 计算机

Axie区块链宠物游戏系统开发搭建

薇電13242772558

区块链

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