|
内卷化involution,在经济学中指的是边际效用持续递减,它是出自于「1963年美国人类学家克利福德·格尔茨在印度尼西亚做田野调查时发现,在殖民地时代和后殖民地时代的爪哇岛,人口没有向资本和技术密集型产业集中,而是不断地投入到有限的水稻生产,导致农业生产内部精细化」。换成人话来说,以前你只要会Hadoop、MapReduce,你就可以很容易找到月薪1W的工作,而现在你可能都找不到工作了;以前一周你工作5*8小时就可以了,现在就要工作6*12小时。总的来的,就是个人的价值被拉低了,变得不值钱了。今天我们就来讲讲程序员如何避免内卷化?
作为程序员,只聚焦业务逻辑开发、CRUD是远远不够的,架构、性能优化、新技术这些都是必须要掌握的,只有不断努力的打磨技术,紧跟技术发展趋势,以当下最优的方式解决业务诉求,保障高可用、高性能、高并发,才能避免内卷化,立于不败之地。
在架构知识学习中,我们需要了解架构的变迁(从单体服务→SOA架构→微服务架构→无服务架构)、架构模式的设计(分层架构、客户端服务器架构、事件驱动架构)。
单体架构就是把web服务器&业务程序&数据库&后台服务器全都放在一起(典型的Linux+Apache+Mysql+PHP),刚入门的开发来说可以快速搭建完整的应用网站;SOA架构就是将单体式服务进行拆分,由不同的团队开发不同的服务,再通过ESB企业服务总线连接起来,业务规模不复杂的企业一般采用此架构;微服务架构就是把业务的每个服务模块原子化,由不同的团队开发维护上线不同的服务,服务与服务之间通过MQ消息中间件或RPC远程调用连接起来,业务规模中上的企业一般采用此架构;中台架构就是把多个业务模块共用的能力抽象出来,由专门的团队进行开发维护,并对上层提供接口,快速生成应用和迭代产品。
分层架构设计模式主要是把整个架构分为展现层、业务层、持久层,“高内聚、低耦合”的设计思想让每一层专注干自己的事情,展现层负责用户界面数据展示、业务层负责处理业务逻辑、持久层负责数据持久化。在Java的设计开发中经常都采用这种模式(Service→Controller→DAO)。事件驱动架构主要思想是所有的业务动作触发都由事件进行驱动、处理,这种模式能实现简单小型系统到复杂大型系统的扩展。在分布式系统中常见的架构模式便是事件驱动,所有业务层发生的事项都通过消息中间件MQ传递,后台监听MQ消息队列数据,进行业务处理。
在性能优化中,我们需要了解接口设计、系统监控。在接口设计层面通过算法调优、技术架构升级、技术组件升级可以实现,此处我们不展开讨论,主要看看系统监控模块。监控就像我们的眼睛,帮我们监控着每笔业务操作、每次业务调用,通过选择合适的监控工具、设定对应的监控指标,能提前发现问题、遇到问题及时解决。一个应用体系的全栈监控包含APP监控、浏览器监控、服务器监控、网络监控、日志监控、基础设施监控、物理环境监控。作为业务研发,我们主要关注App监控、浏览器监控、服务端监控就好,其余的交给运维同学关注。
APP监控是通过打包时将探针安装在对应的应用包里,形成正式包对外发布。当用户手机下载了APP后,在使用APP的各个功能时,整个的行为轨迹也被探针记录下来了,采集的数据包含开发的APP用户日活、访问区域、访问版本等运营数据;用户打开APP是否白屏、是否卡顿、是否缓慢、是否网络被运营商劫持等运维数据,获取到这些数据后可以帮助产品研发同学快速解决问题,提高用户留存率、性能优化系统。
Browser浏览器监控是把浏览器探针(一段js代码)嵌入前端页面,通过浏览器的onload事件、navigation事件等获取页面访问的数据,比如浏览器基本信息、采集页面性能数据、采集ajax性能数据和请求响应数据、JS错误数据、页面追踪数据等,再发送给到后台处理加工,形成用户运营数据(比如页面PV、运营商信息、浏览器信息、访问城市省会信息)、运维数据(比如ajax错误信息、js缓慢页面信息)获取到这些数据后可以帮助产品研发同学快速解决问题,提高用户留存率、性能优化系统。Server服务器监控主要是在部署代码的容器(比如tomcat、jvm、docker)中安装探针,获取服务调用链路、接口调用次数、函数执行堆栈、SQL执行情况、服务器CPU内存磁盘网络等,帮助后端研发进行知道业务运行情况、进行系统性能优化。
在新技术中,我们需要了解持续集成交付CICD、云原生、DevOps等。云原生应用就是运行在云平台的应用,具备要有云的特点,比如弹性伸缩、分布式、快速部署、快速迭代、高效、持续,云原生的四大核心要素是微服务、DevOps、持续交付、容器化,可以说云原生已经容纳了CICD、DevOps的设计思想,因此我们就以云原生展开进行讲解。要实现云原生,这可不止是简单的把原先在物理服务器上的应用迁移到虚拟机里,除了基础设施和运行平台在云上,应用架构、应用开发方式、应用部署方式、应用维护方式全都要做出改变。微服务技术使得应用原子化,所有的应用都可以独立的部署、迭代;DevOps使得应用可以快速编译、自动化测试、部署、发布、回滚,让开发和运维一体化;持续交付让应用可以频繁发布、快速交付、快速反馈、降低发布风险;容器使得应用整体开发以容器为基础,形成代码组件复用、资源隔离。
避免内卷化的三大法宝(架构、性能优化、新技术)我们便介绍完了。当然随着技术的不断发展,还会有源源不断的新技术新理念提出,我们不断的关注、学习、打磨自己基本功就好。在互联网圈内还有一个潜规则便是程序员年龄不超过35岁,除了这批人上有老下有小、战斗力不如年轻人之外,其次是正常的业务技能不够过关。事实上,只要你稳扎稳打的夯实技术,不断的提升自己能力,年龄根本不是任何问题,在疫情期间找工作,也完全没有问题。避免内卷化的最核心因素,永远都不是外在环境,而是你自己。所以,努力吧,后浪们,越努力越幸运! |
|