小窍门
Azure 平台的云原生 .NET 应用电子书封面缩略图。
又是忙碌的一天,在办公室研究“下一件大事”。
手机响铃。 是您的友好招聘员——每天都会打来电话,带来令人振奋的新机会。
但这一次是不同的:初创企业、公平和大量的资金。
提及云、微服务和尖端技术可推动你超越边缘。
很快几周后,你现在作为一名新员工在一个设计会议中构建一个大型电子商务应用程序。 你将与领先的电子商务网站竞争。
你将如何建造它?
如果遵循过去 15 年的指南,则很可能生成图 1.1 中显示的系统。
图 1-1. 传统的单体设计
构造包含所有域逻辑的大型核心应用程序。 它包括标识、目录、排序等模块。 它们直接在单个服务器进程中相互通信。 这些模块共享大型关系数据库。 核心通过 HTML 接口和移动应用公开功能。
祝贺! 你刚刚创建了一个整体应用程序。
并非所有都是坏的。 单块结构具有一些显著的优势。 例如,它们使用起来非常简单。
- 构建
- 测试
- 部署
- 故障诊断
- 纵向缩放
今天存在的许多成功的应用都是作为整体创建的。 应用是热门应用,在迭代后不断演变,添加更多功能。
然而,在某些时候,你开始感到不舒服。 你会发现自己失去了对应用程序的控制权。 随着时间的推移,感觉变得愈发强烈,你最终进入一个状态,被称为 Fear Cycle
:
- 应用变得如此复杂,以至于没有人理解它。
- 你担心进行更改 - 每个更改都有意想不到的和昂贵的副作用。
- 新功能/修复变得棘手、耗时且实现成本高昂。
- 每个版本都尽可能小,需要完整部署整个应用程序。
- 一个不稳定的组件可能会崩溃整个系统。
- 新技术和框架不是一种选择。
- 很难实现敏捷交付方法。
- 随着代码库因不断的“快速修复”而恶化,体系结构逐渐被侵蚀。
- 最后, 顾问 进来告诉你重写它。
听起来很熟悉?
许多组织通过采用云原生方法来构建系统,解决了这种整体恐惧周期问题。 图 1-2 显示了应用云原生技术和实践构建的同一系统。
图 1-2. 云原生设计
请注意,应用程序是如何在一组小型独立微服务中分解的。 每个服务都是自包含的,并封装其自己的代码、数据和依赖项。 每个部署在软件容器中,并由容器业务流程协调程序管理。 每个服务都拥有它自己的数据存储,而不是大型关系数据库,其类型因数据需求而异。 请注意某些服务如何依赖于关系数据库,但其他服务依赖于 NoSQL 数据库。 一个服务将其状态存储在分布式缓存中。 请注意,所有流量如何通过 API 网关服务进行路由,该服务负责将流量路由到核心后端服务,并强制实施许多跨领域关注点。 最重要的是,应用程序充分利用现代云平台中发现的可伸缩性、可用性和复原能力功能。
云原生计算
嗯。。。我们刚刚使用了术语 Cloud Native。 你的第一个想法可能是,“这到底是什么意思?软件供应商为销售更多东西而捏造的另一个行业流行语?
幸运的是,这很不同,希望这本书能帮助你说服你。
在短时间内,云原生已成为软件行业的推动趋势。 这是构建大型复杂系统的新方法。 该方法充分利用现代软件开发实践、技术和云基础结构。 云原生更改设计、实现、部署和运营系统的方式。
与推动我们行业的持续炒作不同,云原生是认真的。 考虑 Cloud Native Computing Foundation (CNCF),一个由 400 多个主要公司组成的财团。 其宪章是使云原生计算在技术和云堆栈中无处不在。 作为最具影响力的开源组之一,它在 GitHub 中托管了许多增长最快的开源项目。 这些项目包括 Kubernetes、 Prometheus、 Helm、 Envoy 和 gRPC。
CNCF 培养了开放源代码和供应商中立的生态系统。 此后,本书介绍了与技术无关的云原生原则、模式和最佳做法。 同时,我们将讨论 azure 云中可用于构建云原生系统的 Microsoft 服务和基础结构。
那么,到底什么是云原生? 坐下来,放松,让我们帮助你探索这个新世界。