第 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: 世界是分布式的的更多相关文章

  1. 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

    Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2万,超 ...

  2. Git是目前世界上最先进的分布式版本控制系统

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  3. Git是目前世界上最先进的分布式版本控制系统(没有之一)。

    http://zhidao.baidu.com/link?url=NSYPiSvtGTMoqMA9vt68FRRF8WbfYVmwWeMh47_2lkp0K3jFMl--1Co1tg1R4VshTQV ...

  4. Dapr实现分布式有状态服务的细节

    Dapr是为云上环境设计的跨语言, 事件驱动, 可以便捷的构建微服务的系统. balabala一堆, 有兴趣的小伙伴可以去了解一下. Dapr提供有状态和无状态的微服务. 大部分人都是做无状态服务(微 ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式

    在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...

  6. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  7. 在 k8s 以外的分布式环境中使用 Dapr

    在Dapr 文档和实践案例中多是推荐采用k8s, 其实我目前也是在k8s 上操作的,有公有云TKE,AKS,还有私有云的Rancher ,它并没有传闻中的那么难,而且我认为它非常容易上手.不过,我还是 ...

  8. 手把手教你学Dapr - 1. .Net开发者的大时代

    Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...

  9. Dapr 能否取代 Spring Cloud?

    很多人都是使用SpringBoot 和 Spring Cloud来开发微服务.Dapr 也是开发微服务的框架,它和Spring Cloud有什么区别呢,其实这不是一个区别的问题,它是不同的时代需要不同 ...

  10. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

随机推荐

  1. iManager for K8S 配置https证书流程步骤

    针对10.1及之前版本,需要手动去配置证书,未来版本会考虑进行界面化配置. 一.提前准备 1. 证书需要准备三个文件 *.key *.crt private.pem 2. 如果没有修改iManager ...

  2. 智能化IT运维平台建设方案,基于智和信通运维体系的高敏捷二次开发

    随着企业信息进程不断加速,运维人员需要面对越来越复杂的业务和越来越多样化的用户需求,不断扩展的应用需要越来越合理的模式.越来越智能的工具来保障运维能灵活便捷.安全稳定地开展.企业网络规模的不断扩大,从 ...

  3. WPF下使用FreeRedis操作RedisStream实现简单的消息队列

    Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息, ...

  4. 小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM

    小米 13T Pro 是一款性能卓越.设计精美的旗舰机型,具备多项领先配置,且在与前一代产品及友商机型的对比中优势明显,值得深入探讨. 性能提升 小米 13T Pro 搭载了最新的 天玑 9200+ ...

  5. ftrace options 中的irq-info

    /sys/kernel/debug/tracing/options/irq_info 是 ftrace 中的一个选项,用于启用或禁用有关中断的详细信息的跟踪. options/irq_info 的具体 ...

  6. torch和numpy的相互转换

    import torch x = torch.rand(2,2) x1 = x.numpy() # torch转换到numpy x2 = torch.from_numpy(x1) #numpy转换to ...

  7. Transformer原理+代码详解

    简介 Transformer是一种深度学习模型,它在自然语言处理(NLP)领域中非常流行和有效.它最初由Vaswani等人在2017年的论文<Attention is All You Need& ...

  8. 九问 GBase | 如何看待“科技制裁”?如何助力中国数据库国产化落地?

    导读: Oracle.SAP.Apple.Google.Github等国际科技巨头纷纷宣布停止在俄罗斯业务,英特尔.AMD.戴尔等科技企业也被曝已中断向俄供货.当全面科技制裁来临,俄罗斯将如何应对此次 ...

  9. 第三方的开源库FluentVaidation校验字段的

    内置的 using System.ComponentModel.DataAnnotations; 基本使用: 1. 安装包 FluentValidation.AspNetCOre 2. 注册服务 bu ...

  10. 容器化部署nacos 1.4.6报错caused: The specified key byte array is 0 bits which is not secure enough for any JWT

    nacos2.0+ 与nacos 1.x区别 nacos在2.0+版本开始使用grpc与客户端通信,并且通过非8848端口通信 主要是有两个端口 端口 与主端口的偏移量 描述 9848 1000 客户 ...