首页 > 企业站 > 企业站_资讯眼> 正文

如何避免云原生复杂性

佚名 整合编辑: 王珂玥 发布于:2023-10-26 10:13

在今年早些时候的一篇文章中,我谈到了技术债务在云原生应用程序复杂性中的作用。然而,复杂性不仅仅是技术债务。

事实上,复杂性的核心来自于一个简单的概念:选择。添加到软件系统中的每一个选择不仅仅是增加了一条路径——它通常增加了多条潜在路径。

你看,你给一个系统添加的选择越多,这个系统就变得越复杂。选择会增加选项,而选项又会增加选择,这样用户在系统中的路径就不清晰了。一旦你给你的用户选择,你有多条路径可以遵循,你的系统的复杂性显著增加。

如果您想了解这种现象的一个很好的例子,只需看看AWS的复杂性即可。AWS刚开始的时候,它只有几个基本的服务,仅此而已。有对象存储(Amazon S3)、服务器实例(Amazon EC2)、队列(Amazon SQS)和基本数据库(Amazon SimpleDB)。就是这样。它很容易理解,使用起来也很简单。当然,使用AWS可以做的事情比现在更有限,但它的产品很容易理解。

与今天的AWS相比。现在,有超过200种不同的产品和服务,有数千种选择和替代方案。其中许多服务可以很好地协同工作,而其他服务则是独立且不相关的。有些甚至看起来像是彼此的竞争对手(看看Amazon ElastiCache和Amazon MemoryDB)。

AWS不再简单。事实上,要真正了解AWS的所有产品,您需要一位经过AWS培训的认证AWS专家来为您构建系统。然而,尽管如此复杂,AWS几乎可以用来解决任何软件应用程序需求。

大多数云原生系统介于早期AWS的简单、基本产品和现代AWS的巨大复杂性之间。但随着时间的推移,大多数系统倾向于增加选择和选项的数量,从而增加它们的复杂性。不受控制的复杂性,就像熵一样,总是在增加。

在云原生应用程序中控制复杂性和复杂性的增长是很困难的,但是管理复杂性的一个很好的步骤是管理应用程序的选择和选项。

这可能是相当具有挑战性的,特别是考虑到客户和他们的要求。通常,来自产品管理的变更请求需要向系统添加额外的选项。您希望能够添加新功能,而不会对当前没有使用该功能的客户产生负面影响。一种常见的方法是添加一种功能,而不是强迫每个人都迁移到新功能,您给客户一个选择—保持旧功能或迁移到新功能—这种选择增加了复杂性。

事实上,在几乎所有情况下,单个增强请求总是会增加系统的复杂性。不可避免地,一个请求会增加选择,你的系统复杂性会急剧上升。

避免这种复杂性的增加是无法一次管理一个功能的。相反,你必须采用整体方法来改进你的应用程序,以便找到支持新功能的方法,而不是简单地在应用程序中添加额外的新路径。需要这种整体方法来发现趋势和模式。这些趋势和模式可用于合并和简化代码库,在不牺牲客户能力的情况下减少选项。最终,这会降低复杂性。

有时,我们没有时间对功能请求采取全面的方法——有时,我们需要做一个快速而仓促的实现,只是为了向客户提供一些东西。事实上,这就是敏捷开发过程的本质。但是,如果你不偶尔停下来看看你的应用程序的大局,那么你的复杂性将急剧上升。

在敏捷开发过程中,偶尔后退一步,从整体上审视应用程序,看看是否有可以依赖的模式和趋势来重构应用程序,以降低系统复杂性,这一点很重要。这是所有成功的现代应用程序开发的一个关键方面,对于防止应用程序落入一次性决策所带来的复杂性的深渊是绝对必要的。

 

原文《How to Avoid Cloud-Native Complexity》

by / Lee Atchison

网友评论

聚超值•精选

推荐 手机 笔记本 影像 硬件 家居 商用 企业 出行 未来
二维码 回到顶部