位置_分布式处理和数据的MVA考虑——可持续架构(七)

前言

  • 理解分布式进程和数据的影响,可以使团队尚在未具备处理分布式能力的时候,做出更好的MVA决策。
  • 云计算并不能消除分布式问题,反而它可能会使问题更难解决,因为它隐藏了底层基础设施。
  • 改变数据位置可能会对应用程序逻辑产生微妙的影响,这些影响很难发现,更难调试。特别注意对日期和时间戳的处理,作为MVA设计的一部分来考虑。
  • 微服务架构非常适合模块化,但会使数据聚合变得更具挑战性。
  • 对于高容量跨服务通信的考虑,可能意味着某些服务及其数据需要共同定位,以满足性能和响应性要求。

在云应用程序上开发很容易让开发人员觉得资源的位置不再重要,只要你所需的所有资源都在云中,这确实没有问题。

但是,一旦将移动应用程序引入其中,特别是对依赖传统数据存储中数据的应用程序而言,资源的位置,包括数据,就变得至关重要。

由于移动应用程序越来越受人们的欢迎,开发人员必须时刻牢记资源位置。

在本系列先前的文章中,我们介绍了最小可行架构(MVA)的概念,并描述了MVA如何改变思考使用架构框架、模式和策略的方式。

在本文中,我们将探讨与分布式计算工作和数据相关的模式和策略,同时讨论MVAs在分布式计算方面需要考虑的问题。

对于用户和开发人员而言,最令人无语的问题之一可以用一句话概括:“我的机器上运行好好的好……”,有时,这些问题与机器配置有关,开发人员和用户的机器配置不同。配置是静态的,这类问题只要细心对比是能够很容易发现的。

与应用程序逻辑或数据的分布相关的问题更为严重,而且往往是间歇性的。之所以这样,是因为分布式问题往往只有在高负载的情况下才会出现,对开发人员来说,除非能够在模拟真实的并发环境,否则很难发现这些问题。在网络带宽和吞吐量足够的情况下,分布式问题往往很难发现,只有当带宽或吞吐量不足时,开发者才会意识到架构决策的问题。在这种情况下,开发者往往会责怪网络问题,而疏忽分布式架构设计带来的问题。

分布式最重要的是什么

在当今光纤网络时代,在全球分布式部署数据和程序,我们就不需要担心程序是否正常运行以及数据是否正常吗?不,我们需要担心。即使程序运行在同一个数据中心,分布式引发的问题仍然会出现,全球分布式只是加剧了分布式带来的问题。对于分布式应用架构我们需要考虑两点:分布式应用程序(逻辑上的)和分布式数据(物理上的)。

分布式 MVA 应用程序

今天的应用程序具有高度的可移植性,这意味着它们可以相对容易地从一个计算环境移动到另一个计算环境,可以使用可移植语言,也可以使用虚拟机或容器。那么,为什么迁移代码运行的位置是一个架构问题呢?

即使应用程序代码是可移植的,容器隐藏了底层的计算环境,底层物理机器的痕迹仍然会使粗心的人出错。一个简单的例子是时间戳的问题,时间戳通常是由应用程序根据底层硬件设置的。如果一个应用程序在亚洲运行,而另一个在北美运行,那么亚洲应用程序可以为从在北美运行的应用程序的角度来看未来的日期和时间创建时间戳,因为亚洲应用程序和北美应用程序位于国际日期变更线的不同一侧。这可能导致故障和失败,从而导致整个应用程序崩溃,或者在依赖于时间的计算中产生奇怪的结果,例如隔夜银行资金的利息。当使用数据库服务器DATE函数设置时间戳并且这些服务器位于与应用程序不同的时区时,也会出现类似的问题,因为记录的日期将根据服务器的位置确定。

如果应用程序是由微服务组成的,可以在世界上任何地方的任何可用服务器上进行负载平衡,那么问题就更难发现了。在这种情况下,时间戳中使用的时区不容易预测。

一种解决方案就是使用统一时区,比如说使用 UTC 时区,这对于服务来说是一个重要的架构决策。虽然使用UTC并不能解决所有时间和日期问题,但也是一个很好的抉择。还有一些其他的问题需要考虑,比如日期/时间戳是否实际上需要包含时间组件(并非所有应用程序都需要,对一些应用程序来说,包含时间会带来困惑),屏幕和报告上的日期和时间应该如何显示(是本地日期/时间还是UTC日期/时间?)等等。你仍然需要解决重要的问题,但至少你可以基于对记录日期/时间的共同理解来做出这些决定。

另一个更微妙的问题来自于服务间的通信,当所有服务运行在同一个物理环境中时,以经过的时间来衡量服务间通信的“成本”的话是非常低的;换句话说,通信延迟很低。但如果这些服务被移动到不再在同一台机器上运行,甚至可能不在同一个地区,通信延迟可能会不可预测地增加,因为服务调用可能需要经过网络、桥接器和路由器,每个环节都会增加往返时间。与时间戳一样,负载均衡器在尝试平衡计算负载时可能会加剧这个问题,无意中增加了通信延迟。

分布式 MVA 数据

数据的位置是大多数最小可行架构(MVA)的关键考虑因素;在保持数据集中化的同时分布式部署应用程序,也许是因为大多数MVP所需的数据目前位于集中式的遗留数据存储中,很可能会产生延迟和吞吐量问题,以至于系统可能无法满足其一些质量属性需求(QARs),比如性能或可扩展性。

正如我们在之前的一篇文章中最小可行产品需要最小可行架构解释的那样,团队在开发MVA时的架构决策集中在产品如何满足其QARs上。持久性导致了许多最重要的QARs,特别是那些与产品存储和检索数据相关的QARs。

为了满足这些QARs,团队必须做出关于数据特征的决策,包括其结构或缺乏结构。他们还必须选择适当的数据存储技术(例如SQL DBMS、NoSQL DBMS等)。这些决策几乎总是涉及到数据将被存放的位置的决策,至少相对于应用代码的位置(例如在同一台服务器上、在同一数据中心中的不同服务器上、在不同数据中心中,包括不同时区的数据中心,或者在商业云中,因此没有固定或已知的位置)。

在许多方面,分布式数据可以想象成与分布式程序相同,但有一个重要的区别:返回数据的远程服务调用的消息大小可能足够大,值得特别考虑。例如,考虑一个查询远程服务器上数据库的应用程序。返回大量数据行的查询,这些数据行在应用程序中进一步分析,可能需要重新考虑;通过网络传输大量数据,无论速度多快,都是低效的。更好的方法是使用设计合适的视图、存储过程或位于与数据库相同机器上的远程服务,在尽可能相同的位置进行尽可能多的处理,以减少所产生的网络流量。这样做将减少延迟和不必要的信息处理,极大提高性能。

减少不必要的数据传输还可以对环境产生好处。通过减少不必要的处理,应用程序的碳足迹可以大大减少。绿色软件工程的原则之一考虑了数据和处理的位置,不仅仅是为了高效的应用程序,可以减少碳排放,而且还考虑了您使用的数据中心的环保程度,这是值得考虑的。

在某些情况下,数据所在位置的选择可能并不由团队决定;一些数据可能已经存在于遗留的数据存储中,但是他们仍然需要为需要创建和存储的新数据做出选择。当他们需要在回答查询、提供分析和准备报告时聚合新旧数据时,他们还必须解决跨这些不同来源的数据访问延迟所带来的问题。

基于微服务的架构也可能会带来一些与数据相关的问题。简单来说,每个微服务都将拥有自己的数据存储。如果微服务及其客户端和数据都是分布式的,那么由于网络延迟和带宽等限制,性能可能会受到影响。

考虑一个简单的SQL查询操作的情况,通常在单个服务器上进行,并返回一个或多个实体(表)的数据集。如果这些实体是微服务,那么相当于单个服务器连接的操作意味着需要遍历多个微服务来汇总所有相关数据。如果这些微服务是分布式的,调用开销和延迟将比在SQL数据库情况下严重得多。"每个微服务使用一个数据存储"的方法在解耦方面非常好,但不幸的是,它失去了关系数据库的简单查询数据的一些优势。和许多架构决策一样,需要在松耦合、性能和可集成性之间进行权衡。

例如,将具有相似职责的微服务组合到同一有界领域内,为每组微服务(有时称为“组件”)分配一个数据存储,以减轻性能和数据集成问题可能是有意义的。此外,利用数据网格方法将数据视为一个即用即得、可靠的产品,是以有界领域为基础组织数据并确保数据和相关处理以相同方式分布的有效方式。

另一种选择可能是为所有跨服务报告使用单独的数据库,并仅将服务拥有的数据存储用于事务负载。这种方法首先涉及捕获数据,然后再决定如何分析数据,有时被称为“读时架构 vs. 写时架构”。如果系统利益相关者可以接受营业结束报告而非实时报告,那么报告数据库可以以异步和低优先级的方式进行更新。这种方法适用于不需要实时分析的软件系统,例如商业保险系统,但不适用于证券交易系统或银行现金柜台支持应用程序。

无论 MVA 数据存储的设计和分布如何,都应该尽可能将处理过程放置在数据位置附近。出于类似的原因,通常在同一时间被访问的数据应该被放置在一起,以避免网络流量和延迟开销。

例如,如果在商业云中使用多个无服务器函数作为移动应用程序 MVA 的一部分,可能会面临满足性能 QARs 的挑战。需要频繁访问存储在公司数据中心中的数据的无服务器函数将需要在公司数据中心和托管无服务器函数的数据中心之间建立非常快速的网络连接,以便为移动用户提供快速响应——这是非常不太可能的。更有效的方法可能是要么将无服务器函数搬回公司内部,要么将数据转移到商业云中。

MVA 应该考虑什么分布式决策

我们概述的这些问题可以用一些关键问题来表达,团队在考虑其 MVA 时应该回答这些问题:

  1. 应用程序或服务是否可以部署在新的位置,或者必须在特定环境中运行?
  2. 数据是否可以动态保存在新的位置,还是必须保存在特定的数据存储位置?例如,一些国家要求对其公民的数据不得存储在国外,或者可能出于技术原因,例如应用相互间依赖协作问题,这些约束约束都会导致难以分布式部署。
  3. 某些服务或应用程序是否必须依赖其他服务或是否必须使用特定的存储服务?
  4. 如果负载均衡器自动移动数据或进程,那么 QARs 会受到影响吗?一般而言,负载平衡器的工作方式通常会影响应用程序如何满足qar,因此与负载平衡相关的决策往往在架构上具有重要意义。

这并不是详尽的清单;通过考虑数据和应用程序之间的相互作用以及这些相互作用可能如何影响系统的能力来满足其 QARs,团队可以提出自己的问题。

总结

采用云技术很容易让团队以为不需要担心程序和数据在分布式上带来的问题,但在某些方面,它使问题变得更加困难,因为在云中更难以看到真正发生的事情。云让团队误以为计算资源是由一个巨大的均匀池组成的,但实际上,在表面下始终有物理硬件和软件运行,就像隐藏的浅滩,团队必须穿过它们航行。考虑数据和进程分布问题将帮助他们找到正确的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/502217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的温度控制器系统仿真设计

**单片机设计介绍,基于单片机的温度控制器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的温度控制器系统仿真设计概要主要包括以下几个关键方面:硬件设计、软件设计、系统仿真与…

颜值测评打分微信小程序AI智能颜值测评小程序搭建流量主收益

功能简介: 1.该小程序是AI智能颜值测评 2.可配合流量主推广,广告变现 3.后台含有区间关键词,颜值分析管理可用于公众号吸粉 (保存海报上的二维码换成公众号二维码) 4.(美容院,整形机构活动,颜值评分X分以上可到店获…

安卓手机ip地址怎么切换?简单几步轻松实现

在移动互联网时代,安卓手机作为我们日常生活中不可或缺的一部分,扮演着越来越重要的角色。而在网络世界中,IP地址则是每个设备的标识,它决定了设备在网络中的位置与身份。然而,有时我们可能出于隐私保护、网络测试或其…

PTA L2-040 哲哲打游戏

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另…

Jmeter —— 接口之间关联调用(获取上一个接口的返回值作为下一个接口的请求参数)

正则表达式: 具体如何操作: 1. 草稿保存, 此请求的响应数据的id 为发布总结的请求参数draft_id 2. 草稿保存的响应数据 3.在草稿保存的请求中,添加后置处理器- 正则表达式提取器, 提取响应数据的id信息 4. 发布总结请…

Linux+ARM 简单环境检测---软件部分

1、前言 这个是我学习linuxARM的在做的第一个软硬件结合项目,以往的类似这种整体类项目还是光单片机的时候,linux软件部分学习了差不多快一年了,因为各种事情耽搁,这个项目一直没有静下心来完成,不过终于哈哈哈哈搞完了…

【Java】:封装和包

目录 1.封装的概念 2.访问限定符号 3.封装扩展之包 3.1包的概念 3.2导入包中的类 3.3自定义包 3.4常见的包 1.封装的概念 面向对象程序三大特性:封装、继承、多态。何为封装?简单来说就是套壳屏蔽细节。 比如:对于电脑这样一个复杂的…

elementui的table根据是否符合需求合并列

<el-table :data"tableData" border style"width: 100%;" :span-method"objectSpanMethodAuto"><!-- 空状态 --><template slot"empty"><div><img src"/assets/images/noData.png" /></di…

【AcWing】蓝桥杯集训每日一题Day7|贡献法|4261.孤独的照片(C++)

4261.孤独的照片 AcWing 4261. 孤独的照片&#xff08;每日一题&#xff09; - AcWing难度&#xff1a;简单时/空限制&#xff1a;1s / 64MB总通过数&#xff1a;9889总尝试数&#xff1a;26088来源&#xff1a;USACO 2021 December Contest Bronze算法标签贡献法乘法原理 题目…

强烈推荐!13K star,一款Python开源自动化抢票神器!

马上就春节了&#xff0c;你抢到回家的票了吗&#xff1f; 别急&#xff0c;今天给大家推荐一款开源、功能强大且实用的12306抢票工具&#xff01; 1、介绍 该项目名为py12306&#xff0c;由 GitHub 用户 pjialin 创建和维护&#xff0c;用Python语言开发。 项目目前在GitHu…

【idea快捷键】idea开发java过程中常用的快捷键

含义win快捷键mac快捷键复制当前行或选定的代码块Ctrl DCommand D通过类名快速查找类Ctrl NCommand N通过文件名快速查找文件Ctrl Shift NCommand Shift N通过符号名称快速查找符号&#xff08;类、方法等&#xff09;Ctrl Alt Shift NCommand Shift O跳转到声明C…

精准定制:利用本地词库优化Jieba分词,提升景区评论数据LDA建模效果

引言&#xff1a; 在进行景区评论数据的LDA建模时&#xff0c;精确的分词是至关重要的。然而&#xff0c;通用的分词工具在处理特定领域的文本时可能表现不佳。针对这一挑战&#xff0c;本文探讨了如何利用本地词库&#xff0c;特别是搜狗词库中关于旅游领域的专业词汇&#x…

virtualbox 设置虚拟机 centos 网络

在VirtualBox中为运行CentOS系统的虚拟机配置网络连接&#xff0c;您通常可以选择以下几种网络模式之一&#xff0c;以满足不同的网络需求&#xff1a; NAT (Network Address Translation): 功能&#xff1a;允许虚拟机通过宿主机的网络连接访问互联网&#xff0c;同时也可以从…

【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了 原因&#xff1a;vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({{ goal }} - {{ index }})复制到第一个dom元素…

Python基础:标准库 -- math (数学函数)

1. 官方文档 math --- 数学函数 — Python 3.12.2 文档 cmath --- 关于复数的数学函数 — Python 3.12.2 文档 Python 中&#xff0c;可以使用内置的数学运算符&#xff0c;例如加法 ()、减法 (-)、除法 (/) 和乘法 (*) 进行简单的数学运算。不过&#xff0c;更高级的运算&a…

SpringCloud下的微服务应用技术(结尾篇)

六. Feign远程调用 6.1 替代RestTemplate RestTemplate调用问题&#xff1a;代码可读性差&#xff0c;参数复杂且URL难维护。 Feign是一个声明式的HTTP客户端&#xff0c;官方地址&#xff1a;GitHub - OpenFeign/feign: Feign makes writing java http clients easier 它可…

力扣热门算法题 128. 最长连续序列,134. 加油站,143. 重排链表

128. 最长连续序列&#xff0c;134. 加油站&#xff0c;143. 重排链表&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.26 可通过leetcode所有测试用例。 目录 128. 最长连续序列 解题思路 完整代码 Python Java 134. 加油…

Docker 部署 FRP 内网穿透 实现端口映射

Frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 官网地址&#xff1a;https://github.com/fatedier/frp 准备工作…

VS2019连接MySQL

VS2019连接MySQL 下载MySQL Connector/C配置头文件&#xff0c;库文件路径配置头文件路径配置库的路径复制dll文件 MySQL的用户设置将权限赋值给新用户 编写代码往数据库写入 老师布置的作业让我们用VS2019连接MySQL实现一个小型的日志系统&#xff0c;中间踩了很多的坑&#x…

【3】3道链表力扣题:删除链表中的节点、反转链表、判断一个链表是否有环

3道链表力扣题 一、删除链表中的节点&#x1f30f; 题目链接&#x1f4d5; 示例&#x1f340; 分析&#x1f4bb; 代码 二、反转链表&#x1f30f; 题目链接&#x1f4d5; 示例&#x1f340; 分析① 递归② 迭代 三、判断一个链表是否有环&#x1f30f; 题目链接&#x1f4d5; …