4

技术的极简主义的再次复兴

 3 years ago
source link: https://www.jdon.com/57246
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
技术的极简主义的再次复兴

这是来自radicalsimpli.city的技术极简主义宣言,对当前复杂技术的抱怨、批判。

我们好像很享受复杂性:我们使用 SPA、Vue/React、Transpiling、Typescript、Babel、Webpack、PureCSS、GraphQL、JSON 以及在后端使用微服务、protobuf、Kafka、InfluxDB 或 NoSQL 数据库创建复杂性。

这种复杂性是偶然的,而不是在业务问题域中。

这种复杂性导致需要一个解决方案来管理它——通常是 Kubernetes。

你需要运行这些东西,而且有很多微服务,你需要很多机器。这导致了 AWS。

这又带来了它自己的复杂性。

现在我们需要编写 React 应用程序的前端工程师,编写 REST 和 GraphQL 端点的后端工程师,以及手握 Kubernetes 的运维工程师。这导致使用模拟和本地数据库、Docker 映像和构建管道进行复杂的测试设置,运行需要数十分钟。

做一件简单的事情需要很多时间,比如向表单添加一个字段 - 例如向个人资料添加生日字段。需要几分钟的事情现在需要几个小时。然后事情发生了变化,你会花一整天的时间让你的微服务能再次运行: 在其他服务之上巧妙地平衡每个服务和每个框架和工具的每个版本。

开发人员能做的最后一件事就是编写业务逻辑。如果您查看自己在做什么并计算行数,那么最少的时间就是编写真正的业务逻辑,即代码中的 IF。

但是这涉及到带有 SQL 的数据库到对象到 JSON 的序列化,通过路由到 React 存储到 UI。GraphQL、SQL、Javascript 对象和 Python 对象中的数据定义。当您需要花费大量时间围绕框架、技术堆栈和序列化进行举办仪式时,留给处理业务逻辑的时间并不多。

我们为什么要构建复杂的系统和架构?因为我们想要接受挑战,而对业务领域却涉及不深入!所以开发人员自己就发明新的框架和系统来构建自己的挑战。他们想要尝试新事物。

出现的问题是多方面的。正如雷切尔·克罗尔( Rachel Kroll)所写: “代码运行在人身上。请保持简单。” 组件和系统也是如此。在代码在计算机上运行之前,它需要在您的头脑中运行。

“如果花一个小时来弄清楚发生了什么,那么,这一个小时就没有花在做其他更有用和有趣的事情上。”

最重要的是,技术将大量时间用于自身而不是提供商业价值。管理这么多系统和组件需要知识,而且由于存在边缘情况,因此存在许多错误。这些因素结合在一起会导致效率低下、开发人员过多和成本高。

极简主义Radical Simplicity来了

什么是极端简单Radical Simplicity?极简意味着拥有尽可能少的组件和活动部件。将技术重复用于不同的目的,而不是为每个目的使用新的移动部件。与其使用 Postgres 作为数据库、Druid 作为事件存储、Redis 作为缓存、Rabbit MQ 作为消息队列和 Elastic 作为全文搜索,不如使用托管 Postgres 作为数据库,用于全文搜索、html 缓存、发布/订阅和带有 TimescaleDB 的事件存储。

这使我们能够拥有更深入的知识、更快的行动、更快的新开发人员入职、更少的故障、数十个框架和组件的升级计划,以及更多的开发人员幸福感。开发的核心是进入流程。开发人员在流程内部比在流程外部更有效率。

Basecamp 是 Rails 的创造者,它做的是 Radical Simplicity。Basecamp 使用 HTML 编写了他们的 Hey 电子邮件应用程序,没有使用 React。Stack Overflow 通过使用少量真实硬件运行他们的服务来实现这一点。具有讽刺意味的是,所有 AWS 问题都由运行在真实硬件上的 Microsoft SQL Server 回答。没有 GraphQL,没有 React,没有 Kafka,没有 Webpack,也没有 Kubernetes。

您也可以使用 Radical Simplicity。激进的简单也是激进的。一个基于HTML的单体应用:在浏览器端使用 Hotwire Turbo 以最少的 Javascript 刷新;仅使用托管 Postgres 作为数据存储、JSON、作业处理、消息队列的数据库,并使用列式存储作为数据湖和数据仓库。如果您无法抗拒,请添加 Redis 进行缓存,因为 Redis 永远不会中断。

BoringComplicatedArchitecture.png 

许多只有少数客户的初创公司拥有多个微服务、Redis、Postgres、Elastic、Kubernetes、Webpack、JavaScript SPA、REST API、带有 Apollo 和 Kafka 的 GraphQL 或用于消息队列或作业服务器的 RabbitMQ。

如果将此与仅使用托管 Postgres(而不是 PG、Redis 和 Elastic)、Unpoly的激进简单设置进行比较,极简主义是在整体式服务器上呈现渲染HTML,并使用BigQuery分析数据仓库 。

后者一个小得多的架构设置,实现相同但需要维护、学习和调试的移动部件少得多。需要监控的组件要少得多。

当某些公司拥有 50 多名开发人员和数百万用户时,才需要复杂的设置;大多数公司,尤其是刚成立的公司,需要那种复杂的设置吗?不!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK