涅槃重生!字节大牛力荐大型分布式手册,凤凰架构让你浴火成神

简介: 从大型机到单体架构,从微服务架构到无服务架构,每一次架构模式的演进都是一次涅槃。每一个软件系统都是由大量服务构成的生态体系,个体服务的“死亡”和“重生”是整个系统能否持续可靠运行的关键因素。笔记从5个方面全面剖析了如何构建一个可靠的分布式系统,同时给出了Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda五种架构风格的样例工程。

前言

从大型机到单体架构,从微服务架构到无服务架构,每一次架构模式的演进都是一次涅槃。每一个软件系统都是由大量服务构成的生态体系,个体服务的“死亡”和“重生”是整个系统能否持续可靠运行的关键因素。笔记从5个方面全面剖析了如何构建一个可靠的分布式系统,同时给出了Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda五种架构风格的样例工程。

由5个维度全面探索如何构建可靠的大型分布式系统:

  • 从架构演进
  • 架构设计思维
  • 分布式基石
  • 不可或缺的基础设施
  • 技术方法论

由于篇幅限制,文档内容过多,只能展示部分内容,感兴趣的朋友,可以点击此处来获取就可以了!

第一部分 演进中的架构

架构并不是被发明出来的,而是持续演进的结果。本章我们暂且放下代码与技术,借讨论历史之名,来梳理软件架构发展历程中出现过的名词术语,以全局的视角,从这些概念的起源去分析它们是什么,它们取代了什么,它们为什么能够在竞争中取得成功,为什么变得不可或缺,以及它们为什么会失败,在斗争中被淘汰,逐渐湮灭于历史的烟尘当中。

第二部分架构师的视角

远程服务将计算机程序的工作范围从单机扩展至网络,从本地延伸至远程,是构建分布式系统的首要基础。而远程服务又不仅仅是为分布式系统服务的,在网络时代,浏览器、移动设备、桌面应用和服务端的程序,普遍都有与其他设备交互的需求,所以今天已经很难找到没有开发和使用过远程服务的程序员了,但是没有正确理解远程服务的程序员却不少。

事务处理几乎在每一个信息系统中都会涉及,它存在的意义是为了保证系统中所有的数据都是符合期望的,且相互关联的数据之间不会产生矛盾,即数据状态的一致性(Consistency)。按照数据库的经典理论,要达成这个目标,需要三方面共同努力来保障。

现代的企业级或互联网系统,“分流”是必须要考虑的设计,分流所使用的手段数量之多、涉及场景之广,可能连它的开发者都未必能全部意识到。这听起来似乎并不合理,但笔者认为这恰好是优秀架构设计的一种体现,“分布广阔”源于“多级”,“意识不到”谓之“透明”,也即本章我们要讨论的主题“透明多级分流系统[1]”(Transparent Multilevel Diversion System)的来由

即使只限定在“软件架构设计”这个语境下,系统安全仍然是一个很大的话题。我们谈论的计算机系统安全,不仅仅是指“防御系统被黑客攻击”这样狭隘的安全,还至少应包括(不限于)以下这些问题的具体解决方案。

第三部分布式的基石

在正式探讨分布式环境中面临的各种技术问题和解决方案前,我们先把目光从工业界转到学术界,学习几种具有代表性的分布式共识算法,为后续在分布式环境中操作共享数据准备打好理论基础。

微服务架构的一个重要设计原则是“通过服务来实现独立自治的组织件”(Componentization via Service),强调应采用“服务”(Service)而不是“类库”(Library)来构建组件化的程序,这两者的差别在于类库是在编译器静态链接到程序中的,通过调用本的方法来使用其中的功能,而服务是进程外组件,通过调用远程方法来使用其中的功能。

容错性设计(Design for Failure)是微服务的另一个核心原则,也是笔者书中反复强调的开发观念转变。不过,即使已经有一定的心理准备,大多数首次将微服务架构引入实际生活产系统的开发者,在服务发现、网关路由等支持下,踏出了服务化的第一步以后,很可能仍会经历一段阵痛期,随着拆分出的服务越来越多,随之而来会面临以下两个问题的困扰。

微服务提倡分散治理(Decentralized Governance),不追求统一的技术平台,提倡让团队员有自由选择的权利,不受制于语言和技术框架。在开发阶段构建服务时,分散治理打破了由技术栈带来的约束,好处是不言自明的。但在运维阶段部署服务时,尤其是在考量安全问题时,由Java、Go、Python、Node.js等多种语言和框架共同组成的微服务系统,出现安全漏洞的概率肯定要比只采用其中某种语言、某种框架所构建的单体系统更高。为了避免由于担忧一旦服务节点出现漏洞被攻击者突破,进而导致整个系统和内网都遭到入侵,我们就必须打破一些传统的安全观念,以构筑更加可靠的服务间通信机制。

随着分布式架构渐成主流,可观测性(Observability)一词也日益频繁地被人提起。最初,它与可控制性(Controllability)一起,是由匈牙利数学家Rudolf E.Kálmán针对线性动态控制系统提出的一组对偶属性,原本的含义是“可以由其外部输出推断其内部状态的程度”。

第四部分 不可变基础设施

容器是云计算、微服务等诸多软件行业核心技术的共同基石。容器的首要目标是让软件分发部署过程从传统的发布安装包、靠人工部署转变为直接发布已经部署好的、包含整套运行环境的虚拟化镜像。在容器技术成熟之前,主流的软件部署过程是由系统管理员编译或下载好二进制安装包,根据软件的部署说明文档准备好正确的操作系统、第三方库、配置文件、资源权限等各种前置依赖以后,才能将程序正确地运行起来。Chad Fowler在提出“不可变基础设施”这个概念的文章“Trash Your Servers and Burn Your Code”[1]的开篇就直接吐槽:要把一个不知道打过多少个升级补丁、不知道经历了多少任管理员的系统迁移到其他机器上,毫无疑问会是一场灾难。

本章我们将讨论虚拟化网络方面的话题,如果不加任何限定,“虚拟化网络”是一项内容十分丰富,研究历史十分悠久的计算机技术,是计算机科学中一门独立的分支,完全不依附于虚拟化容器而存在。网络运营商常提及的“网络功能虚拟化”(Network FunctionVirtualization,NFV),网络设备商和网络管理软件提供商常提及的“软件定义网络”(Software Defined Networking,SDN)等都属于虚拟化网络的范畴。对于普通的软件开发者而言,要完全理解和掌握虚拟化网络,需要储备大量开发中不常用到的专业知识,消耗大量的时间成本,一般并无必要。

容器是镜像的运行时实例,为了保证镜像能够重复地产出具备一致性的运行时实例,必须需要求镜像本身是持久且稳定的,这决定了在容器中发生的一切数据变动操作都不能真正写入镜像当中,否则必然会破坏镜像稳定不变的性质。为此,容器中的数据修改操作大多是基于写入时复制(Copy-on-Write)策略来实现的,容器会利用叠加式文件系统(OverlayFS)的特性,在用户意图修改镜像时,自动将变更的内容写入独立区域,再与原有数据叠加到一起,使其从外观上看来像是“覆盖”了原有的内容。这种改动通常都是临时的,一旦容器终止运行行,这些存储于独立区域中的变动信息也将被一并移除,不复存在。由此可见,如果不进行额外的处理,容器默认是不具备持久化存储能力的。

调度是容器编排系统最核心的功能之一,“编排”一词本身便包含“调度”的含义。调度是指为新创建的Pod找到一个最恰当的宿主机节点来运行它,这个过程成功与否、结果恰当与否则,关键取决于容器编排系统是如何管理与分配集群节点的资源的。可以认为调度是必须的容器编排系统的资源管控为前提,那我们就先从Kubernetes的资源模型谈起。

容器编排系统管理的最细粒度只能到达容器层次,在此粒度之下的技术细节,仍然只能依赖程序员自己来管理,编排系统很难提供有效的支持。2016年,原Twitter基础设施工程师William Morgan和Oliver Gould在GitHub上发布了第一代服务网格产品Linkerd,并在很短的时间内围绕Linkered组建了Buoyant公司。随后,在担任CEO的William Morgan发表的文章“What’s A Service Mesh?And Why Do I Need One?”中首次正式地定义了“服务网格”(Service Mesh)一词,自此,服务网格作为一种新兴通信理念开始迅速传播,越来越频繁地出现在各个公司以及技术社区的视野中。服务网格之所以能够获得企业与社区的重视,是因为它很好地弥补了容器编排系统对分布式应用细粒度管控能力不足的缺憾。

第五部分 技术方法论

附录A技术演示工程实践

附录B部署Kubernetes集群

如何获取?

可以点击此处来获取就可以了!

相关文章
|
3月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
116 5
|
2月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
513 57
|
6月前
|
存储 缓存 NoSQL
分布式系统架构8:分布式缓存
本文介绍了分布式缓存的理论知识及Redis集群的应用,探讨了AP与CP的区别,Redis作为AP系统具备高性能和高可用性但不保证强一致性。文章还讲解了透明多级缓存(TMC)的概念及其优缺点,并详细分析了memcached和Redis的分布式实现方案。此外,针对缓存穿透、击穿、雪崩和污染等常见问题提供了应对策略,强调了Cache Aside模式在解决数据一致性方面的作用。最后指出,面试中关于缓存的问题多围绕Redis展开,建议深入学习相关知识点。
477 8
|
1月前
|
设计模式 开发者
一、HarmonyOS Next 开发者手册项目之项目架构设计
该项目是一个基于HarmonyOS Next的开发者学习手册应用,旨在帮助开发者系统学习HarmonyOS开发知识。项目采用分级学习方式,从基础到高级逐步深入讲解技术与实践案例。前四章重点介绍应用架构相关内容,助力快速掌握应用核心。 项目结构清晰,包含主入口、源代码目录、公共资源和工具等。页面导航分为多个阶段:萌新小白(基础入门)、登堂入室(进阶学习)、进阶高手(高级开发)。支持Markdown解析,使用`@luvi/lv-markdown-in`插件展示内容,并定义了多种数据结构以规范开发流程。 源码已开源,持续更新中
46 1
|
2月前
|
消息中间件 缓存 算法
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
136 0
分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
|
4月前
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
170 14
文生图架构设计原来如此简单之分布式服务
|
4月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
275 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
4月前
|
人工智能 运维 监控
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
|
6月前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
307 41
|
6月前
|
存储 缓存 安全
分布式系统架构7:本地缓存
这是小卷关于分布式系统架构学习的第10篇文章,主要介绍本地缓存的基础理论。文章分析了引入缓存的利弊,解释了缓存对CPU和I/O压力的缓解作用,并讨论了缓存的吞吐量、命中率、淘汰策略等属性。同时,对比了几种常见的本地缓存工具(如ConcurrentHashMap、Ehcache、Guava Cache和Caffeine),详细介绍了它们的访问控制、淘汰策略及扩展功能。
151 6

热门文章

最新文章