避免内卷化,互联网程序员必掌握的架构设计模式
内卷化指的是社会或文化模式在某一发展阶段达到一种确定的形式之后,便停滞不前或无法转化为另一种高级模式的现象,简单来说,就是“不进步便是退步”。所以作为一名互联网程序员,只聚焦业务逻辑开发、CRUD是远远不够的,架构、性能优化、新技术这些都是必须要掌握的,只有不断努力的打磨技术,紧跟技术发展趋势,以当下最优的方式解决业务诉求,保障高可用、高性能、高并发,才能避免内卷化,立于不败之地。今天我们所介绍的便是软件架构设计模式~
那么什么是软件架构设计模式呢?它指的是软件开发人员在开发过程中所面临的一般问题的解决方案,是一套被反复使用的、多数人知晓的、经过分类的、代码设计经验的总结。通过设计模式的使用,保障所有开发人员的认知是在同一水平,实现代码重用,并且所写的代码可靠性更高、也更容易被他人理解。常见的设计模式包含客户端-服务器模式、分层模式、代理模式、主从模式、管道-过滤器模式、MVC模式。
· 客户端-服务器模式
现在最互联网通用的场景便是用户通过客户端进行应用程序访问、服务端响应请求、返回数据。在客户端-服务器模式中,主要是多个客户端向同一个服务端进行数据的请求,并且服务端持续监听来自客户端的情况。现在的设备终端非常多,往上有电脑、手机、iPad、智能硬件,往下有API接口调用,因此这些都是在软件设计过程中必须要考虑的点。
· 分层模式
现在的软件系统都是非常复杂的,比如我们平时最常用的淘宝app、美团app、滴滴app,它并不是一个简单的app,背后承载着上千个系统。如果不对该系统进行分层的话,那么对于系统的迭代更新、维护都是非常困难的。分层模式的思想就是把系统拆分成多层,每一层独自开发、演化,每个小团队关注自己的这一层就好,整个业务程序运行则按层层调用即可。
典型的分层模式设计实践便是微服务了。微服务通过把整个系统所能提供的服务都拆分成原子化,微服务与微服务之间低耦合,微服务内部高内聚。通过服务拆分微服务,实现了复杂系统简单化,提高软件团队开发效率。
· 代理模式
这种模式主要是在分布式系统中最常见,分布式系统是把软件或软件模块部署在不同的地区、服务器上,集合一群计算机的能力对外提供高可靠、高性能的服务,解决了传统集中式系统的单点问题。代理模式便是提供一个代理,让所有的请求、消息都发送到代理,服务端也从代理层获取数据进行处理。常见的最佳实践有软件部署模式中的Nginx分层设计、消息队列的设计、服务注册中的注册中心等。
· 主从模式
在微服务架构、分布式系统中,承载着上千万、上亿万的服务请求,除了业务层需要高可用之外,在数据层也是需要的。主从模式的设计思想是把整个数据系统分为master-slave,master节点是写操作、处理用户数据,slave节点是读操作、从master节点同步数据、业务从slave节点读取数据。常见的最佳实践便是数据库的主从复制方案了。
· 管道-过滤器模式
在大数据领域最常见的设计模式便是管道-过滤器模式了。整个数据分析处理任务在一个管道内完成,数据在管道中流通,而每一个处理步骤,比如数据采集、数据清晰、词义转化、语义转化等就是一个个的过滤器,把数据从上一阶段转到下一阶段。我们熟悉的MapReduce模型,也是这种设计,从源HDFS文件系统中获取数据,经过Filter1的Map操作处理成中间结果,再经过Fliter2的Reduce操作处理成分析结果,最后呈现给到用户。
· MVC模式
MVC即Model-View-Controller,在模型中包含核心模块、核心功能设计,通过视图将信息呈现给到用户,再通过控制器处理输入输出数据。该模式将信息的内部表示和呈现方式分离出来,保障了代码的有效复用。在Java程序设计中还会细分为Service、Controller、DAO层。
这是一个最好的时代,也是一个最坏的时代。社会的快速发展带来了人类文明的进步、更方便便捷的生活方式,但同时使得打工人们生活变得繁忙、焦虑、压力大。当面对工作和生活中的内卷化时,我们不应该自怨自艾,而应该思考如何才能快速成长起来,提升自己的能力,避免内卷化。
推 荐 阅 读
AI课工场
人工智能也可以如此轻松好玩