单体架构和分布式架构(应用性能管理(APM)综述)

本文目录
应用性能管理(APM)综述
APM (Application Performance Management,即应用性能管理,在分布式领域也称为分布式跟踪管理)对企业的应用系统进行实时监控,它是用于实现对应用程序性能管理和故障管理的系统化的解决方案。
随着分布式系统和微服务架构的应用和发展,应用性能管理成为系统运维管理和网络管理的一个重要方向,它能够对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本(TCO)。应用性能管理APM能够对整个企业的IT系统各个层面进行集中的性能监控,并对有可能出现的性能问题进行及时、准确的分析和处理。它能轻松地从一个IT应用系统中找到故障点,并提供有相关解决建议或方法,从而提高整体的系统性能。一个企业的关键业务应用的性能强大,可以保证企业业务应用系统的高效性和稳定性,为企业带来核心竞争力的提升。
当下成熟的互联网公司都建立有从基础设施到应用程序的全方位监控系统,力求及时发现故障进行处理并为优化程序提供性能数据支持,降低整体运维成本。国内外商业的APM有Compuware、iMaster、博睿Bonree、听云、New Relic、云智慧、OneAPM、AppDyn、Amics等。 本文主要针对Java技术体系介绍APM的框架、核心功能以及业界主流APM工具的功能特点。
随着互联网技术和应用的快速发展,应用程序本身变得越来越难以管理,因为它们从单体架构转向高度分布的、多层、多元素的分布式应用架构,应用系统在许多情况下依赖于应用程序的开发框架。APM概念框架旨在帮助企业优先考虑在IT系统架构中需要首先关注的方法,以便企业能够快速实施并全面了解五维APM模型。
APM被形象的称为应用程序的私人医生,越来越收到企业的青睐,比起通过日志方式记录关键数据显然要更加实用,APM主要包含如下核心功能:
基于Java体系的应用程序运行时的性能指标可通过Java.lang.Runtime、java.lang.Management中的方法采集。除此之外,著名的Metrics类库也能够通过这些底层技术获取Java程序性能指标。CPU利用率、内存利用率等基础数据的采集仅仅是性能监控的一部分,Metrics提供了更为丰富的五个基本度量类型,可在此基础上开发满足需求的监控指标。
大多数企业希望有一个功能完善的APM系统具有JVM性能监控、服务调用追中、监控告警功能,CAT、PinPoint、SkyWalking、Hawkular相对来讲功能更为完备,推荐企业使用。
分布式数据平台Data Mesh
自 2010 年左右兴起到现在,微服务(Microservices)已经成为事实上的软件架构范式,被企业广泛采用,并引发了围绕面向领域设计模式优缺点的激烈讨论。如今,这股浪潮开始席卷数据领域。
Data Mesh 是一种基于领域驱动和自服务的数据架构设计新模式,借鉴了微服务和 Service Mesh 的分布式架构思想,最初源于 ThoughtWorks 首席技术顾问 Zhamak Dehghani 发表在 MartinFowler 官网上的两篇文章《How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh》和《Data Mesh Principles and Logical Architecture》。
ThoughtWorks 在 2020 年 10 月发布的技术雷达中,将 Data Mesh 从“评估”调升到了“试验”(ThoughtWorks 对“试验”阶段的技术的建议是:“值得一试。了解为何要构建这一能力是很重要的。企业应当在风险可控的前提下在项目中尝试应用此项技术。”),这意味着 Data Mesh 已经通过可行性验证,转而进入建议采纳阶段。据了解,包括 Zalando、Intuit、Netflix、JPMorgan Chase 等公司都已经在尝试实践 Data Mesh 这个概念。
但对于国内开发者来说,很多人听过 Service Mesh,甚至有不少人已经在实践 Service Mesh 了,对 Data Mesh 却知之甚少。围绕 Data Mesh 的理念和架构设计、它能解决现有数据架构的哪些问题、现在是不是采用 Data Mesh 的好时机等话题,InfoQ 记者在 2021 ThoughtWorks 技术雷达峰会现场采访了 ThoughtWorks 数据智能团队技术负责白发川,一探 Data Mesh 究竟。
1从微服务的视角看数据架构
没有一个概念是无缘无故凭空冒出来的,Data Mesh 的诞生也是基于对企业数据平台架构现状和弊端的反思而提出来的。
企业数据平台的演进大致可以分为三个重要阶段:
第一阶段,专有的企业数据仓库和商业智能平台;第二阶段,以数据湖为代表的大数据生态系统;第三阶段,云上数据平台,也是当前主流的混合实践模式,包含实时数据流处理架构、整合批处理与流处理的框架,以及完全采用基于云的存储托管服务、数据流水线执行引擎和机器学习平台。而这些数据平台架构存在一些共性的挑战:
难以启动:缺少用例支持,无法获得业务支持;长时间的数据湖设计与技术评估;需要统一组织内多个业务或技术部门;数据源难以规模化:缺少手段对错综复杂的源数据系统进行疏浚与管理;难以跟上不断增长的数据源系统规模;数据消费难以规模化:数据平台项目跟不上企业创新要求;用例过窄,难以满足规模化需求;平台能力跟不上错综复杂的用例需求;数据难以商业化:极高的开发和运营成本;难以将数据平台真正转化为商业竞争力;难以形成创新文化。这背后的根本原因在于,从业务的视角来看,企业数据平台架构从第一到第三阶段的演进其实一直延续着黑盒、集中式、单体架构的核心模式,由独立且专业化的数据工程师团队维护,业务方的可操控性非常弱,数据团队很容易成为响应的瓶颈。
实际上,当前数据架构面临的挑战,与微服务架构之前的单体软件所面临的挑战非常类似:
基础设施法响应业务弹性需求:单体数据架构下,基础设施资源所有业务共享,进集中式的管理和维护,法基于业务需求灵活进资源调整;数据商业化成本:加数据以产品思路对数据进处理,因此部分数据处理结果集法以商品的形式度量其业务价值;数据处理流线复成本:每个数据流线为独的数据作空间上下,跨流线的 数据结果或者中间结果需要进复时成本较,难度较;数据处理成本较:单体数据架构模式下,部分的数据处理作进集中统管理,在涉及更多业务场景持、更多团队协作下,数据处理的成本较。Data Mesh 试图基于微服务的架构思想设计数据架构,来解决上述问题。
2Data Mesh 核心思路和架构逻辑
Data Mesh 实际上是一组数据平台架构原则,融合了分布式领域驱动的架构(Distributed Domain Driven Architecture)、自助平台设计(Self-serve Platform Design)以及将数据视为产品(Thinking Data as a Product)的思维。
有别于数据仓库 / 数据湖的集中式单体架构,Data Mesh 是高度分散的数据架构。
对于 Data Mesh 的核心设计思路,白发川将其总结为以下几点:
从业务域视角出发,将业务解耦之后映射到数据视角,再将数据解耦,减少数据冗余度;将数据作为产品,使数据服务端到端完备,就像一个微服务一样,可以被直接访问和调用;自服务的基础设施,微服务的成功很大程度上归功于它有非常成熟的基础设施,比如 Spring Cloud、K8s 等,而数据的基础设施相对于微服务的成熟架构还有所缺失,这也是未来需要持续发力的地方;生态治理,站在消费者使用数据的业务链调用看数据是怎么被消费的,制定数据治理规范,让数据更为透明和易于使用;通过网格编排的思想设计数据走向,使数据产品能够支持不同模块、不同域的衔接。
在 Data Mesh 架构下,治理的始终是具有业务价值的数据服务,而不是一个个的原始数据文件。Data Mesh 的架构逻辑如上图:底层需要可自服务的数据基础设施,至少具备稳定性和可伸缩性两项能力;基础设施之上,面向域构建一个个端到端的数据消费服务提供给上层业务,可以认为每一个服务对应的就是一个数据产品,比如某个数据仓库可能抽象成 Data Mesh 中的一个 Data Service,每一个 Data Service 会包含算力、存储和服务这三项。不同的数据服务之间会有一个数据服务注册和调度中心,可以让不同的 Data Service 形成业务所需要的一系列数据服务编排。另外,围绕数据服务中心会形成数据授信访问申请、元数据管理、数据服务管理等一系列能力。
如果从软件架构的视角来理解 Data Mesh,则微服务映射过来就是 Data Service,基于微服务编排设计出来的 Application 映射过来就是 Data Product,基于很多 Application 编排生成的网格 Service Mesh 映射过来就是 Data Mesh。
Data Mesh 目前有两种落地形态,一种是闭环服务,也就是一个平台提供工具的同时还提供结果管理服务,并且只能在平台内部完成全生命周期的管理,即 Data as a Service;另一种形态则是平台提供数据和工具能力,但是工具能力为可选项,业务可以使用自己的工具,也可以使用平台的工具,即 Data Platform as a Service。
3会改变数据团队的工作吗?
同为大数据领域近几年诞生的新概念,Data Mesh、数据中台、湖仓一体可能会让很多人感到困惑:这三者有什么本质区别呢?
针对 Data Mesh 和数据中台的区别,白发川认为,数据中台是一个概念而非架构形态,它更多强调的是站在业务视角思考企业数据消费的形态,在通过数据中台理念梳理完数据的消费模式、业务场景之后,最终还需要用一个架构来承载和实现。而 Data Mesh 可以作为数据中台的一种实践形态。
针对 Data Mesh 和湖仓一体的区别,白发川则表示,湖仓一体主要是基于数据仓库、数据湖这样的成熟架构做整合,从体验和交互上来说减少了做一件事情需要完成的步骤,属于优化式架构,但它解决的问题只在于技术维度,解决不了业务团队瓶颈问题,也解决不了基础设施和业务解耦的问题。而 Data Mesh 首先从基础设施层面对架构做了一些调整,同时还定义了在这个架构下的团队分工协作。从架构层面来看,数据湖、数据仓库、湖仓一体跟 Data Mesh 实际上是可以并存的,而非对立或替代关系,在 Data Mesh 架构中,数据湖、数仓可能被包含在一个个 Data Service 中。
从另一个维度来看,数据湖、数据仓库或者湖仓一体架构的主要受众是企业的数据团队,只有数据团队需要关注这些架构。但 Data Mesh 的受众是数据团队和业务团队,他们都需要关心这个架构,这也是一个明显的差别。
Data Mesh 将数据所有权上移给了负责某一项功能的业务团队,他们可以按照自己更便于使用的方式去创建、接触元数据,对数据进行分类和存储。对应 Data Mesh 的架构来看,业务团队负责创建自己需要的 Data Service,而数据团队的工作更聚焦于底层数据基础设施,包括为 Data Service 初始化工作空间、将云厂商的组件和企业自己的底层平台能力组合包装成业务可用的方式(可以理解为迷你版的云)、Data Service 之间的调用能力封装等等。
这是否意味着 Data Mesh 改变了企业数据团队原有的工作内容呢?
白发川对此给出了否定答案,他认为,现在很多行业都在谈数字化转型,但当企业说数字化转型的时候,通常发生改变的只有数据团队,而业务团队却不受影响,这是有问题的。数字化并不等于数字团队,Data Mesh 实际上更好地定义了,当企业需要数据能力的时候,业务团队应该做什么样的改变。原来大家会笼统地认为凡是数据相关的都由数据团队做,导致整个数据团队从基础设施到业务完全耦合在一起。Data Mesh 其实是把数据团队和业务团队的职责边界做了更清晰的划分,使数据团队的职责更加聚焦和精简,从技术角度看对数据团队当前的工作不会有特别大的影响。不过过程中可能会涉及到一些人员的调整,比如原来数据团队中负责业务相关数据分析工作的人员会直接划到业务团队去,而关注业务无关的基础设施的人员则继续留在数据团队中。
4现在是采用 Data Mesh 的好时机吗?
前文提到,包括 Zalando、Intuit、Netflix、JPMorgan Chase 等公司都已经在尝试实践 Data Mesh,但 Data Mesh 还不是一个适合所有企业广泛采纳的架构模式。尽管 ThoughtWorks 推荐“采纳”Data Mesh,但这一推荐有一个重要前提,即“风险可控”。
白发川表示,当下企业落地 Data Mesh 主要的难点和风险可以从两个角度来看:一是规划视角,需要评估对数据架构做改造的投入产出比;二是技术视角,过去从数据仓库到数据湖的转变可以认为是替代式架构(不是从数据仓库演进到数据湖,而是造一个全新的),而 Data Mesh 属于演进式架构,改造的模式和设计的思维方式都与从前不同,目前行业内在大数据演进式架构改造的人才和经验方面相对都是有缺失的。
其中,性价比是企业在考虑是否采用 Data Mesh 时首先要考虑的。不管是微服务也好,Data Mesh 也好,都存在一个最基本的底线成本。回顾前文提过的 Data Mesh 架构,它需要基于底层弹性基础设施来打造,可以认为云是做 Data Mesh 的起点,如果企业当前的数据架构不是基于云来做的,那从当前架构迭代到 Data Mesh 架构的过程中就需要更多改造步骤,比如要先做弹性化改造,这样初步投入的成本就会变高。此外,构建 Data Mesh 需要的投资还包括构建自服务的数据平台、支持对领域进行组织结构变更以长期维护其数据产品,以及一个激励机制,来奖励将数据作为产品提供和使用的领域团队等等。如果企业衡量改造的投入产出比之后,发现收益无法超过成本,可能 Data Mesh 就不适合。
除了考虑性价比问题,白发川建议企业基于三个维度来评估自己是否应该采用 Data Mesh,分别是规模化、常态化和高门槛。其中,规模化指的是企业存在大量的领域且数据接入、数据消费规模都非常庞大,比如有大量产生数据的系统和团队,或者多种数据驱动的用户场景和访问模式;常态化指的是数据的使用频率很高,而不是一次性的;高门槛指的是企业需要非常精通大数据的技术人员来驾驭自己的数据架构。如果这三点都符合,就意味着企业需要考虑数据团队和业务团队之间的分工问题了,Data Mesh 可能是一个解决办法。同时企业也需要结合自身的业务现状来评估,如果企业已经做了数据仓库、做了数据湖,但在前述三个维度下业务仍然出现了明显的不可工作或协作瓶颈导致数据平台跟不上业务发展节奏,那这可能就是一个考虑采用 Data Mesh 的比较好的时机点;反之,如果业务本身毫无问题,也就没有改造的必要了。
据白发川介绍,目前国内外有很多企业都已经在尝试实践 Data Mesh 的架构理念,尤其是一些数据规模特别庞大的企业,他们已经碰到集中式单体数据架构的瓶颈,开始探索向面向域的分布式数据架构转变以解决问题,只是他们可能没有将这个概念抽象总结成 Data Mesh。
当提及 Data Mesh 未来应用推广道路上可能遇到的挑战时,白发川特别强调了组织架构方面可能存在挑战。如前文所述,Data Mesh 并不仅针对数据团队,也不是数据团队单独就能做好的,它其实对应探讨的是在企业的业务上下文里面一种比较好的协作方式是什么样子的,需要几个团队承担什么职责才能做好这件事,并延伸到现有的团队需要做什么样的调整,以及在这样的调整下需要一套什么样的基础设施或软件来支持他们的工作。在白发川看来,数据中台、Data Mesh 都属于所谓的“CXO 工程”,Data Mesh 也需要企业自顶向下达成共识、形成决策并通过组织结构调整提供支持,否则可能也会遭遇类似于中台战略无法在企业顺利落地的窘境。
Data Mesh 标志着大规模数据分析架构和组织范式的转变,但要加速 Data Mesh 的实现,在开源或商业工具上仍存在巨大的缺口。对比微服务有 K8s,Service Mesh 有 Istio、Linkerd,目前还没有一款合适的工具可以帮助企业快速应用 Data Mesh。虽然使用现有技术作为基本构建块也是可行的,但在成熟的基础设施工具出现之前,很多企业可能还是会选择继续观望。
***隐藏网址***
软件架构的复杂性和涌现
计算机科学参与了复杂性学科的创立,并把复杂性引申为计算机科学的内涵。个人认为复杂性在软件架构领域引起重视有两个原因,其一是单体架构的承诺已经无效;其二是软件的使用者,即用户,开始深度参与到软件的架构设计中来。
随着单体架构的日渐式微,分布式架构的兴盛,微服务运动如火如荼,复杂性因此受到关注:目前,几乎所有的微服务文章开宗明义都会指出微服务架构是为了应对软件架构复杂性的挑战。
随着互联网的发展,特别是互联网+和移动互联网的发展,行业和用户开始深刻影响软件的架构和设计:软件架构设计再也不是架构师独立思考的产物,而是在和用户的互动中完成的。
复杂系统一般具有以下属性:具有大量组成成分的系统,成分互动关系的重要性大于成分本身;组成成分构成自我相似的多层级结构,高层级向下的因果关系,低层级向上的因果关系以及组成成分间的多重因果关系;系统是动态的,不停止的,具有突现,不可预测、不可化约、非线性;系统具有适应性,无中央控制,自我组织,正回馈或报酬递增等。
《Think Complexity》给出的定义是:复杂性科学是物理,数学和计算机科学交叉的跨学科领域,专注于具有许多组件相互作用的系统。如果想从更广泛意义上了解复杂性与进化、人工智能、计算、遗传、信息处理等领域的关系,可以参考梅拉妮·米歇尔(Melanie Mitchell) 的《复杂》一书。
在软件架构的领域研究复杂性,并不是要推翻还原论(比如模块化),而是探讨还原论在软件工业广泛应用之后,始终无法解决软件工程的组织效能问题,比如人月神话提出的挑战。复杂性更强调组件或者服务之间的关系,以及软件和用户之间的关系,用整体性思维观察软件开发的全过程。在企业中,架构的复杂属性往往对标系统架构师——那些在组织中缺位的一批人(很多国内架构师刚达到这个层级,就转向管理了)。系统架构师需要找到那些能够实现1+1》2的解决方案,实现整体最优。以飞机运输为例,乘客想要的是最快到达目的地,直接的方案是提高飞机的速度,但不能超过音速,以避免超过音速后引发的各种问题。从系统架构师的角度来看,这里要解决的问题并不是怎样飞的更快,而是如何缩短乘客从家中到机场,办理登机手续,过安检,上飞机,飞行,落地后取行李并达到最终目的地所需的总时间。
复杂性思考的本质就是从已知的未知向未知的未知延伸。这里的复杂(complex)并不是难懂的(complicated),难懂是已知的未知,复杂是未知的未知。传统软件开发是以实体为交付目标,逐层breakdown,整体等于部分之和。要做到这一点,软件各个实体从架构到实现都是需要提前study(已知的),需要探索的只是实现细节。所以传统软件开发特别强调需求的澄清,因为需求是可以澄清并且不会改变的。客户和开发者关注的都是成果本身,而不是成果的涌现物。而对于互联网软件来说,用整体性思维来看,需求变更本来就是常态。
涌现是系统运行过程中所表现,呈现和浮现的东西。涌现是我们构建系统的目标,是系统价值所在,也是系统思维的意义所在。功能是系统的第一层涌现,这里的功能包含基本功能和新的功能。性能是系统的第二层涌现,它是系统功能的对应。系统的第三层涌现是质量属性,包括可靠性,可维护性,可操作性,安全性,健壮性等。第三层涌现并不是立刻创造出价值,而是要通过系统在整个生命周期中的运作情况来体现。我觉得还存在系统的第四层涌现,就是软件设计者和开发者不能单独决定软件的功能和形态,而是和用户协同进化。
复杂性在软件架构领域的应用,首推《系统架构:复杂系统的产品设计与开发》一书。该书给出了一套具体的系统思考框架,供参考如下:
系统是由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些实体各自的功能之和。在软件开发中,系统不能直接和产品简单对应。以微信为例,用户安装的产品是微信APP,但是在微信构建的系统中,包含了用户,数据,电商,公众号,小程序等实体。这些实体的功能要远大于各自功能之和,其架构也不能简单用APP+Cloud来描述。系统的架构原则就是对系统中的实体以及实体之间的关系进行抽象描述。
Java的三种技术架构是什么
Java从1998年诞生到现在已经20多年了。使用它开发的软件不计其数。
在整个发展过程中,出现的架构方式有:
单体架构:将所有的功能代码写在一个工程中
垂直架构:将功能代码按业务进行拆分成一个个的单体架构模式
分布式微服务架构:将功能按照业务分为一个个微小的服务,每个服务都是独立的进程,单独部署,容易扩展,能够很好的应对高并发等
网格架构:未来的可能的架构模式。
分布式架构设计从0到1全部合集,强烈建议收藏
分布式架构设计属于进阶Java架构师的必经之路,而且大厂也特别喜欢考察,建议大家需要重点掌握。
为了方便大家更好的掌握好分布式架构,也为了让知识更系统化,这里我单独把分布式架构的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人!
完整文档,到文末获得~
单点登录是分布式大型网站必备技术,例如淘宝、天猫、聚划算等网站,用户只需要登录一次就可以访问所有系统。
这篇文章主要讲了以下几点:
负载均衡是单机到分布式集群的必经之路,高性能扩展必备。
这篇文章主要讲了以下几点:
幂等性在支付场景、下订单、以及分布式系统都是最常遇到的问题,非常重要。
这篇文章主要讲了以下几点:
大型网站淘宝都是如何从小一步步演变到分布式架构,这里会涉及到分布式服务拆分等关键点。
这篇文章主要讲了以下几点:
在大数据场景下,分布式数据库的数据一致性是分布式最重要的内核技术之一。
这篇文章主要讲了以下几点:
很多同学对分布式、集群等不是很清楚,本篇重点讲解:
大家熟知的淘宝的海量图片,这就会涉及到分布式文件存储技术。
这篇文章主要讲了以下几点:
这是完整的详解比如淘宝等大型网站是如何一步步从小演变成现在的大型网站的完整过程。
这篇文章主要讲一下几点:
1.初始阶段的网站架构
2.应用服务和数据服务分离
3.使用缓存改善网站性能
4.使用应用服务器集群改善网站的并发处理能力
5.数据库读写分离
6.使用反向代理和 CDN 加速网站响应
7.使用分布式文件系统和分布式数据库系统
8.使用 NoSQL 和搜索引擎
9.业务拆分
10.分布式服务
这篇文章主要讲一下几点:
1、单体架构
2、单体架构的拆分
3、SOA与微服务的区别
4、微服务的优缺点
5、微服务的消息
6、服务集成
7、数据的去中心化
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用,淘宝开源国内使用较多。
这篇文章主要讲一下几点:
在国内用的比较多的就是Dubbo和Spring Cloud微服务这套体系,所以单独来比较选型。
这篇文章主要比较以下几点:
这篇文章主要比较以下几点:
以上我主要从分布式演变,再到微服务拆分,以及分布式数据一致性等对分布式进行了一个完整的详解,希望这个 分布式系列 能对你有所帮助。

更多文章:
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50
perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)
2026年10月10日 17:00



