Dapr-2: 世界是分布式的
第 2 章 世界是分布的
只需要问任何达人:现代的、分布式的系统已经到来,单体应用已经过时。
但是,不仅是达人,渐进的 IT 领袖,企业架构师,以及精明的开发者,在探寻和评估现代分布式应用的时候,也在呼应这些相同的想法。许多已经踏入。遵循这些特性、模式和分布式微服务应用程序的实践,他们正在设计新的,对现存的企业应用程序重平台化。
但是,变革带来很多问题......
- 到底什么是分布式应用?
- 为什么它变得流行?
- 代价是什么?
- 以及,更加重要的,折衷了什么?
为了开始,我们重新回顾过去的 15 年,在这段时间中,我们典型地以单体式构建应用程序。图 1-1 展示了其架构。

注意对于订单、身份和市场模块是如何运行在单个服务器进程中的。应用程序的数据保存在共享的数据库中。业务功能以 HTML 和 RESTful 接口的方式暴露出来。
从很多方面来说,单体应用是简单明了的,它简单在:
- 构建
- 测试
- 部署
- 错误定位
- 纵向扩展
但是,单体架构会遇到明显的挑战
随着时间的演进,你会到达失去控制的一个点:
- 单体应用变得无比复杂,以至于没有一个人可以完全理解它。
- 你害怕做出变更,因为每次都会带来未预期的结果和昂贵的副作用
- 新的特性/补丁在实现的时候变得耗时和代价高昂
- 即使最小的变更也需要完全部署完整的应用程序,代价高昂且高风险
- 单个不稳定的组件可以导致整个系统的崩溃
- 增加新的技术和框架变得不可行
- 难于实施敏捷交付方法论
- 由于代码对于永无尽头的 "特例" 的劣化,导致架构腐化
- 顾问总是告诉你重写系统
IT 实践者称这种情况为恐怖循环。如果你在任何技术公司的时间足够长,你就会有机会体验这一点。充满压力并耗尽你的 IT 预算。没有构建新的和创建方案,你的大多数预算都花费在维护遗留系统上。
与害怕相反,业务需要速度和敏捷。它寻求一种架构风格,可以迅速响应市场的变化。它需要即时更新并可以独立扩展运行的应用程序中的单个小的部分。
早期的达到速度和敏捷的尝试是面向服务的架构,或者说 SOA。在该模型下,服务的消费者和服务的提供者之间,通过中间件消息组件协作。通常称为企业消息总线,或者 ESB。图 1-2 展示了该架构。

对于 SOA,中心化的服务提供者使用 ESB 注册。业务逻辑构建到 ESB 中来集成提供者和消费者。服务消费者随后使用 ESB 来查找,与这些提供者进行通讯。
尽管 SOA 承诺,实现这种方式通常增加了复杂性,引入瓶颈。维护费用变高,ESB 中间件昂贵。服务趋向于更大。他们经常共享依赖和数据存储。最终,SOA 经常导致 "分布式的单体" 结构,使用中心化的服务抵抗变化。
如今,大多数的组织通过适配分布式的微服务架构方式来构建系统,以实现速度和敏捷。图 1-3 展示了使用分布式技术和实践构建的相同系统。

请注意同样的应用程序是如何解构为分布式的服务集合的。每个服务是自包含并封装了自己的代码,依赖。每个服务部署在单个的软件容器中,通过容器的协调器进行改成。与多个服务共享单个数据库相反,每个服务拥有私有的数据库。其它服务不能直接访问该数据库,只能通过该服务暴露的 public API 来获取数据。请注意有些微服务需要完全的关系数据库,但是,其它的是 NoSQL 数据存储。购物车服务在分布式的键值缓存中存储其状态。请注意入站的流量通过 API 网关服务进行路由。它负责对服务的直接访问和强制横切关注点。最重要的是,应用程序获得了现代云平台的扩展性、可用性、弹性的完全优势。
但是,虽然分布式的服务可以提供敏捷和速度,也带来了一系列的挑战,考虑下面列出的这些:
- 分布式的服务如何发现其它服务,它们之间如何实现同步通讯?
- 如何实现异步消息?
- 如何在服务之间实现事务上下文的传递
- 如何在失效的情况下支持弹性服务
- 如何支持动态扩展以支持负载波动
- 如何支持监控和处理过程的可观察
对于这些挑战中的每一个,许多产品都通常是可以提供的。但是,将你的应用程序与产品细节进行隔离,保持代码的可维护性并方便性也成为一个新挑战。
本书介绍 Dapr,Dapr 是分布式应用程序运行时。它直接面对伴随分布式应用程序而来的诸多挑战。展望未来,Dapr 有可能对分布式应用程序的开发产生深远影响。
总结
在本章中,我们讨论了适配分布式应用程序的问题。比较了单体系统方式与分布式服务。在考虑分布式方式的时候,我们指出了许多公共的挑战。
现在,坐下来,放松,让我们向您介绍 Dapr 的新世界。
Dapr-2: 世界是分布式的的更多相关文章
- 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时
Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2万,超 ...
- Git是目前世界上最先进的分布式版本控制系统
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- Git是目前世界上最先进的分布式版本控制系统(没有之一)。
http://zhidao.baidu.com/link?url=NSYPiSvtGTMoqMA9vt68FRRF8WbfYVmwWeMh47_2lkp0K3jFMl--1Co1tg1R4VshTQV ...
- Dapr实现分布式有状态服务的细节
Dapr是为云上环境设计的跨语言, 事件驱动, 可以便捷的构建微服务的系统. balabala一堆, 有兴趣的小伙伴可以去了解一下. Dapr提供有状态和无状态的微服务. 大部分人都是做无状态服务(微 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式
在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- 在 k8s 以外的分布式环境中使用 Dapr
在Dapr 文档和实践案例中多是推荐采用k8s, 其实我目前也是在k8s 上操作的,有公有云TKE,AKS,还有私有云的Rancher ,它并没有传闻中的那么难,而且我认为它非常容易上手.不过,我还是 ...
- 手把手教你学Dapr - 1. .Net开发者的大时代
Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...
- Dapr 能否取代 Spring Cloud?
很多人都是使用SpringBoot 和 Spring Cloud来开发微服务.Dapr 也是开发微服务的框架,它和Spring Cloud有什么区别呢,其实这不是一个区别的问题,它是不同的时代需要不同 ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
随机推荐
- Go语言中的位运算符
位运算(bitwise operations)是计算机科学中非常基础且重要的运算类型,它直接操作二进制位.Go语言中提供了一组位运算符,用于执行位级别的操作. Go语言中的位运算符 按位与(& ...
- USB TCPM
USB TCPM(Type-C Port Manager)的主要作用是管理 USB Type-C 端口的连接和电源传输协议(USB Power Delivery, PD),确保设备正确识别.协商和切换 ...
- linux kernel 中tracing buffer
Linux内核的tracing buffer是一种用于存储内核跟踪数据的特殊缓冲区.它用于记录内核中发生的事件和活动,以帮助开发人员进行性能分析和故障排查.该缓冲区可以在内核运行时启用,并且可以通过特 ...
- Csharp的CancellationToken 案例
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...
- element-admin - 图片上传组件 ImageUpload
预览详情 : 父组件:注册引入子组件 :只需要传递一个数据 limit :这是限制显示多少张图片 : 子组件: - 图片上传 - el-upload 代码 : <template> & ...
- QToss:基于.NET架构的跨境电商的工具,助力企业实现智能数据营销
2024年10月13日下午参加了一场在深圳举办的跨境电商大佬们的聚会,现场参加的人数上千人. 大会分享嘉宾中有位来自美国的,他告诉我们不用担心美国政府会把TikTok禁掉,TikTok在全世界都很受欢 ...
- 云原生爱好者周刊:使用 Cilium 和 Grafana 实现无侵入可观测性
开源项目推荐 Cilium Grafana Observability Demo 这个项目由 Cilium 母公司 Isovalent 开源,提供了一个 Demo,使用 Cilium.OpenTele ...
- 自学PHP笔记(四) PHP变量和常量
PHP中变量有普通变量.可变变量和预定义变量,而常量就是普通变量和预定义变量. 1. 变量 在PHP中变量是内存中得一个命名单元,在系统中为程序中每个变量都分配一个存储单元,在这些存储单元中可以存储任 ...
- Visual Studio使用DotFuscator Community在Release时自动混淆并自动打包
DotFuscator Community并不支持通过项目文件定义自动混淆文件,PRO当然可以. 为了简单使用DotFuscator Community自动混淆文件,并自动打包,通过四处打听,总结了一 ...
- LLM应用实战: OpenAI多代理新作-Swarm
1.背景 本qiang~关注到OpenAI两周前发布的轻量级多代理框架Swarm,因此想要深入了解了一下,运行了官方提供的例子,整理并总结一些心得体会~ 源码非常简单,各位看官们可以小读一下,本文采用 ...