这十几年的工作总结(一)- 后端选型

这十几年的工作总结(一)- 后端选型
这十几年的工作总结(二)- 前端选型
这十几年的工作总结(三)- 桌面端选型

回过头看看之前的博客,竟然发现那些文字已是多年前的事了。自18年后,我几乎不再撰写博客。昨天重读了那些旧文,觉得还是有必要继续记录些什么。因此,我想借此机会回顾并记录下这十多年来的工作经历。

18年以前主线从事图形图像渲染,主要使用的语言是C, C++, C#。

  • 界面库,使用过MFC、QT、WPF和Winform等。使用C#更多的也是它的界面库,采用C#和C/C++的混合编程。(当然还有一部分,需要开放C#的二次开发接口)
  • 在图形渲染方面,则主要运用了OpenGL、DirectX、GDI和GDI+等库。
  • 图像的编解码库,印象比较深的是GDAL,当时帮助公司解决大图像的快速加载问题。
  • GPU计算 OpenCL,CUDA 等等
  • 图像处理 OpenCV 等等
  • 还有一些基础的例如boost, 其实更多的还是Windows API。

从18年至今,我的角色更多地转向了团队管理,以团队为单位来解决问题。与此同时,我的主线内容也从图形图像转移到了大数据分析、高性能计算及人工智能,这也是我在早期就埋下的支线方向之一。

促使我转变工作内容的原因主要有以下几点:

  • 工作内容基本已经做到头了,无法再有提升,一般的问题没有搞不定的。
  • 技术栈比较单一,也就是深度可以广度不够。
  • 兴趣使然,更喜欢去尝试一些新的东西。

技术选型

时间回到18年,团队组建开始,由于希望能够快速构建整个数据平台,技术栈的选择就尤为重要。主要涉及到的是招人,因为团队成员需要根据技术栈来确定。

后端的选型: 选择加班还是不加班,我们选择不加班

当时的时代背景,已经是前后端分离年代,大前端作为未来的趋势越发明显。作为后端,唯一的工作就是写API接口了。

虽然是从ASP,JSP,PHP后端渲染年代过来的,不过当前不考虑后端渲染。

现有框架的选择

对于下面语言和框架当时都研究和体验了一遍,当然Python和Nodejs这两个框架,在调研了招聘难度后,果断就放弃了。

  • Java: 虽然那时候的三剑客SSH(Struts2 + Spring + Hibernate)挺有名的,不过基本快被Spring MVC统一了。
  • PHP: 研究了yii2,ThinkPHP,Laravel这三个框架,都能满足条件。
  • Python: 研究了django
  • Nodejs: 研究了express(当时虽然没有选上,不过后面使用express+socket.io做一些主动推送的场景,还是给用上了)

在这里插入图片描述

这里主要还是对比Java和PHP

  • 编码效率上PHP完胜: 亲身体验来看,写一个Java接口,我们用PHP可以写十个。
  • 人员成本PHP完胜:当时PHP还是挺火的,人员也好招聘,整体薪资水平Java要高一些。
  • 执行效率问题:这个根本不需要前期考虑,也根本达不到语言的瓶颈。

产品设计还未完全稳定的时候,产品需要大量的试错来做迭代和优化。编码效率优先级直接拉满。

最终选择PHP的Laravel框架,因为流行度排第一,本以为会很好招人,结果被坑惨了。这个流行度是对国外而言的,国内更多的简历是ThinkPHP,直接裂开。

现在视角评论

在这么多年的使用中,PHP也有一些不尽人意的地方:

  1. PHP它是一种弱类型语言,对于简单逻辑而言,写起来确实非常的爽。但总是会有一些复杂逻辑的地方,或者编码并不怎么规范的小伙伴,维护的时候这些地方确实比较困难。这么多年的代码,写代码和维护并不一定是同一个人。相较于强类型的语言,可读性差了一个档次。

  2. 性能优化,这个不是指语言,而是指PHP的开发人员,他们本身并没有这方面的优化想法,平时这方面的思考就比较少。所以后期由于数据量增长后的,一些接口的优化也是较为头疼的事。

  3. RPC调用效率低下,如果接口要调用其他PHP的接口,接口延迟增加明细,特别是RPC调用数量增加后,几百毫秒以上是经常的事。应该是Laravel框架比较重导致的,跟语言也可能有那么点关系吧。

近几年我们也使用了GO来做后端开发。跟GO相比,当然PHP也有一些优点,特别对初级开发较为友好,因为用PHP开发,虽然上限不会很高,但是下限也不低:

  1. 超时退出机制: PHP是多进程模式的,因此当接口block超时后,会自动杀死进程,防止资源的浪费。这种模式在其他多个语言框架中都很少见的,特别是GO,是无法主动杀死协程(goroutine)的,需要自己手动去控制程序的退出。这个对初级开发者来说是有一定难度的。

  2. 内存限制机制:服务器是需要一对多服务的,当某一个接口占用内存多时,其它接口占用内存就需要变少。PHP默认对每个接口限制128M内存,是一个非常好的设计,可以非常有效的防止对资源过度占用。

PHP的优化方案

最近几年GO也变得越来越火,从前几年开始,团队也逐渐把部分逻辑转到了GO。

当然不可能把整个平台都改写,这个工程量确实挺大,也没有实质的作用。这里主要用到了两种方式

  1. RPC调用
  2. 网关(GateWay)

把部分复杂逻辑的接口,在优化时直接用GO重写,把时间拉长后,逐步替换接口变得非常的丝滑,到目前为止,平台还是以PHP和GO共存的方式维护着。

当然在使用GO的过程中,也遇到了非常多的坑,例如:当时用的Gin,虽然手撸了一个类似Laravel的框架给大伙,但是写代码时不同的人都有不同的想法。 这样的问题还有很多,这里就不展开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值