云本机应用程序简介
另一天,在办公室,你正在处理“下一件大事”。
你的手机响了。 这是友好的招聘人员,每天都会打电话,带来激动人心的新机会。
但这次情况不同:初创企业、股份和大量资金。
提到云、微服务和先进的技术,你的能力需要发挥到极限。
很快几周后,你现在作为一名新员工在一个设计会议中构建一个大型电子商务应用程序。 你将与领先的电子商务网站竞争。
你将如何构建这个应用程序?
如果遵循过去 15 年的指导,你很可能会构建图 1.1 所示的系统。
图 1-1。 传统的整体式设计
你将构造包含所有域逻辑的大型核心应用程序。 它包括标识、目录、排序等模块。 它们在单个服务器进程中直接相互通信。 模块共享大型关系数据库。 核心通过 HTML 接口和移动应用公开功能。
恭喜! 你刚刚创建了一个整体式应用程序。
并不是完全不好。 整体式应用程序具有一些独特的优势。 例如,它们易于...
- 生成
- 测试
- 部署
- 故障排查
- 纵向缩放
目前存在的许多成功应用在创建时都采用整体式。 这种应用非常受欢迎,不断发展、迭代,增加更多功能。
但在某些时候,你会感到不安。 你发现自己失去了对应用程序的控制。 随着时间的推移,你的这种感觉越来越强烈,最终进入一种称为 Fear Cycle
的状态:
- 这种应用变得过于复杂,以致于没有人能够理解。
- 你害怕进行更改,因为每次更改都会带来意想不到且成本高昂的副作用。
- 新功能/修补的实现会变得棘手、耗时且成本高昂。
- 每个版本都变得尽可能小,并需要完全部署整个应用程序。
- 一个不稳定的组件可能会使整个系统崩溃。
- 不能选择使用新技术和框架。
- 很难实现敏捷交付方法。
- 代码基会因为不断发生的“快速修复”而发生退化,从而导致体系结构变弱。
- 最后,顾问会来通知你重新编写应用程序。
听起来很熟悉?
许多组织都采用云原生方法构建系统以解决这种对整体式应用程序的恐惧。 图 1-2 显示了通过应用云原生技术和做法构建同一系统。
图 1-2。 云原生设计
请注意,应用程序如何在一组小型独立微服务中分解。 每项服务都是独立的,并封装其自己的代码、数据和依赖项。 每一项都部署在软件容器中,由容器业务流程协调程序管理。 每个服务都拥有自己的数据存储(而不是大型关系数据库),数据存储的类型因数据需求而异。 请注意,某些服务如何依赖于关系数据库,以及其他服务如何依赖于 NoSQL 数据库。 一个服务将其状态存储在分布式缓存中。 请注意,所有流量如何通过 API 网关服务进行路由,该服务负责将流量路由到核心后端服务,并强制执行许多交叉问题。 最重要的是,应用程序会充分利用新式云平台中的可伸缩性、可用性和复原能力功能。
云原生计算
嗯 ... 我们刚刚使用了“云原生”这一术语。 你的第一个想法可能是“这是什么意思呢?”软件供应商编造的用于增强营销效果的另一个行业流行用语?
幸运的是,并不是这样,希望这本书能帮助你明白它的含义。
在短短的时间里,云原生已成为软件行业中的驱动趋势。 这是一种用于构建大型复杂系统的新方式。 此方法充分利用新式软件开发做法、技术和云基础结构。 云原生可以改变设计、实现、部署和操作系统的方式。
与推动我们行业的持续炒作不同,云原生是认真的。 想一想云原生计算基金会 (CNCF),一个由超过 400 家大型公司组成的联盟。 其宗旨是推动云原生计算的跨技术和云堆栈普及。 作为最具影响力的开源组织之一,它在 GitHub 中托管了许多增长很快的开放源代码项目。 这些项目包括 Kubernetes、Prometheus、Helm、Envoy 和 gRPC。
CNCF 促进独立于供应商的开源生态系统。 在这方面之后,这本书介绍了与技术无关的云原生原则、模式和最佳做法。 同时,我们讨论 Microsoft Azure 云中提供的用于构造云原生系统的服务和基础结构。
那么,到底什么是云原生? 放轻松,让我们来帮助你探索这一新的世界。