第 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. `operator++(int)` 和 `operator++()`

    operator++(int) 和 operator++() 是 C++ 中重载的两个不同的自增运算符函数,它们分别用于后置自增和前置自增.它们的区别在于调用方式以及自增行为的不同. 1. 前置自增运 ...

  2. USB Type-C Power Role

    USB Power Role 是指 USB 设备在供电方面所扮演的角色,主要分为供电方(Provider)和受电方(Consumer).在 USB 供电协议中,电源角色的管理尤为重要,尤其是在 USB ...

  3. C++第六节课 引用变量 指针的升级版

    #include <iostream> using namespace std; // C++的引用 是C指针的升级 可以提高代码的稳定性和健壮性 // const 修饰的引用 是 常引用 ...

  4. KubeSphere 边缘节点 IP 冲突的分析和解决思路分享

    在上一篇监控问题排查的文章中,笔者分析了 KubeSphere 3.1.0 集成 KubeEdge 中的边缘监控原理和问题排查思路,在介绍 EdgeWatcher 组件时提到了"边缘节点的内 ...

  5. 链表反转(反转全部,前n个,中间)

    链表反转 反转全部 // 迭代 struct ListNode *reverseList(struct ListNode *head) { struct ListNode *pre = NULL; s ...

  6. 12C RAC 故障分析 - ORA-17503: ksfdopn:2 Failed to open file +DATA/EIC1/PASSWORD/pwdeic1.256.957086685

    一.故障描述 Oracle 12C PDBS(PDB NAME = WRYPC) 在note1节点上是MOUNTED状态,在note2节点上是READ WRITE状态.note1节点上启动该PDB长时 ...

  7. WEB 新手篇

    xctf在线场景以使用了,一直想写web题来着 001 view_scoure X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了. 解: 查看网站源码,注释里有 flag 00 ...

  8. CentOS 7环境下DM8数据库的安装与配置

    一.环境准备 首先,确保你的系统已经安装了CentOS 7,并且具有足够的磁盘空间和内存来支持DM8数据库的运行.此外,你还需要具备管理员权限,以便进行后续的安装和配置操作. 二.下载DM8安装包 访 ...

  9. Python爬虫基本库

    3 基本库的使用 1)使用 urllib 是python内置的HTTP请求库,包含request.error.parse.robotparser urlopen() urllib.request.ur ...

  10. delphi 图形图像处理 Image32

    delpher 越来越少了,但不能掩盖它的优秀,很外前看到了 Image32,但发现用它的人很少,这段时间整理了它的资料,重新组合了一个DEMO,也可以说是个小工具,分享出来. Image32 关于I ...