作为后端开发,永远重复着「增删改查」,这些基础的操作占据了自己大部分工作时间,看到其他人成为技术大牛,而个人技术水平永远停在原地,也会很迷茫......

需要学习的仅仅如此吗?当你工作久了是否会发现你的代码越来越复杂?文件的上传下载怎么提高效率?消息推送的实时性怎么保证?同时使用人数过多,服务器爆炸怎么办......需要学习的太多了。

希望此文能重燃你的热情,更好的提升技术能力和判断力,站在更高的角度去看自己写的代码和技术方案,从中看到技术的亮点和价值。

浅谈CRUD

从CRUD的定义进行解读,CRUD是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写,CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能。

从软件分层架构的角度来看,这一层在业界被定义为DAO(DataAccessObjects数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。

顾名思义,如果把CRUD等同于为后端开发技术栈内容,那么就是偷换概念和错误总结,从大部分后端工程师日常口头禅来看:在产品需求不明确或者不是特别有价值的情况下,常常对自己所做的事情或者需求,简单的定义为CRUD,这是一种“自我调侃”和“对产品需求的轻视”。

技术持续演进

从Web时代到移动互联网时代再到人工智能时代,硬件的加速发展带来软件的飞速发展,无论是传统软件和互联网软件,软件岗位角色被一步步的细化,譬如前端、客户端、后端、算法、大数据等细分角色出现,每个角色面临的技术挑战和解决的问题域被重新定义和划分,职责更加清晰,能力范围更加专注和聚焦,技术栈更加清晰和明确,从这个划分来看后端除了CRUD,还需要具备什么?

 

冰山下的后端领域

软件应用程序就像冰山一样,用户看到的只是应用程序的极小的部分,应用程序的最大部分是看不到的,这就是令人难以捉摸又神秘的“后端领域”。

作为后端人员,不仅仅停留在用户端侧体验以及交互形式,更重要的是从用户的数据模型、业务场景、业务模型、系统架构设计、领域建模、业务流程以及高并发、高可靠、规模化等稳定性角度,去提升产品整体的体验和价值,解决用户的诉求。

后端开发即“应用服务器后端”开发,主要涉及软件系统“后端”支撑。

比如,用于支撑Web网站和App客户端的服务器,同样介于后端服务器与浏览器以及App之间的应用中间件,它们都属于后端范畴。

简单地说,那些你在屏幕上看不到但又被用来为前端提供支持的数据和服务等基础服务以及对应的业务系统就是后端开发核心需要思考和解决的范畴。

 

后端开发职责

作为后端技术同学,需要针对技术栈进行完备的技能储备,并且需要从宏观技术广度和微观技术深度进行拓展,基于业务的场景和价值映射技术的方案和策略,从业务扩展性的角度进行架构设计,更好的保证可持续产品交付能力,从需求、产品、研发、质量、运维、运营等进行过程中精细化考量,站在用户的角度提升用户的体验,提升用户对产品的忠诚度,最终实现产品业务价值。

当下,后端技术发展日新月异,一句话:“永远不要停止学习”。

以产品的生命周期作为研发的目标,从一而终直到产品下线,过程中各种产品的需求和问题,均需要后端开发持续性的投入和解决,以及通过引进新技术或技术创新,给产品带来进一步的增量价值。

举个例子,譬如现在非常热门的电商直播,涉及高清直播能力、人脸识别能力、直播间实物捕获能力、大规模实时互动能力、大型秒杀购物能力等,都需要前后端深度技术以此带来情景丰富性和实时互动性。

对于产品来说,需要保障7x24小时高可靠不停机服务,一切以满足用户的需求且高质量提供服务为遵旨,技术带来业务价值。

 

后端基础拆分

纵观近10年互联网发展,尤其是移动互联网开始兴起以后,亿级DAU用户产品大量涌现,一个单应用很难再垂直压榨硬件资源来提升性能,并且单点故障不能满足“停机不停服务SLA”要求,需要做水平架构扩展支持集群部署以及单元化异地多活部署。

前台流量入口需要基于DNS服务做VIP路由负载均衡,并且基于nginx服务器做反向代理;不仅如此,还得考虑登陆状态session问题和session的一致性。

随着业务场景和业务流程越来越复杂,我们不得不把某些业务逻辑放到一个集群上,把另外一部分业务放到另外一个机集群上,”微服务架构理念”就此产出。

显然系统的计算能力和处理能力大大增强,但是这些系统之间的通信就变成了头疼的问题,消息队列和RPC框架因此出现,为了提高通信效率,各种序列化的工具等解决数据压缩和效率问题。

当海量大数据出现的时候,单个数据库也撑不住了,开始做数据库的读写分离,如果还不行,就做分库和分表,因为数据要做跨库跨表查询和分布式事务,为了解决这个问题,又有各种各样存储方案和存储技术出现。

另外,随着VM技术和Docker/k8s技术出现,大规模部署成为可能,同样伴随单机内存大小限制以及集群共享内存诉求,缓存从应用集群剥离出去单独进行集群部署提供高质量的分布式缓存服务,同样伴随servicemesh等应用技术飞速发展。

与此同时多媒体技术越来越互动性和丰富性,基于强大的手机终端技术,随时随地拍摄照片和视频上传到云端,亿级用户在终端需要更快的下载和观看体验,基于CDN边缘节点缓存加速和OSS云存储能力诞生。

随着互联网尤其是移动互联网的快速增长以及海量信息获取的诉求,搜索引擎高速发展和应用。

近来,人工智能的飞速发展和丰富的应用场景,端到端的智能化进一步降低用户获取信息的成本和效率,转变用户主动搜索到被动接收获取有价值的信息,精准推荐帮助用户做决策。

跟随3G/4G的飞速发展,端侧即时性和实时交互的要求,其中以直播互动以及即时消息IM等应用场景出现,用户实时交互和实时感知。基础设施尤其是网络通信的发展和终端设备处理能力增强,让海量的移动设备接入和端边缘计算接入成为现实。

从传统以太网,到无线局域网的WIFI(IEEE 802.11 b/g/n/ac),到不断发展的广域网蜂窝网络(3GPP的GSM、GPRS、UMTS、LTE、LTE-Advanced……),甚至整个广域网在IoT领域兴起以及终端技术的演进(蓝牙、NFC),标志着设备的泛化连接和网络接入的丰富性爆发式增长,尤其是IoT/5G的时代的到来,技术带来的新局面和新场景伴随而生,未来可期。

后端业务拆分

聊完后端的基础中间件和移动中间件系列,后端面对业务系统应该怎么建设呢?

从技术视角去看,基础中间件已经被更多细分化和深度化,从业务视角看,首先需要掌握中间件的基本原理和应用场景,以及各个中间件的特性,针对业务场景进行选择和应用。

除了技术选型之外,作为业务后端角色需要重点聚焦在需求分析、系统架构设计、领域模型构建、产品交付质量等,包括近年来比较火的“大中台,小前台”架构理念,作为前台的一线业务会更敏捷,更快速适应瞬息万变的市场,中台将集合整个集团的运营数据能力、产品技术能力,对各前台业务形成强力支撑。

诚然,基于拆分后的每个子系统,后端同学同样需要聚焦到应用上下游依赖关系、接口API/SPI的设计、核心性能指标、业务指标和相应的流控策略、安全防控等,基于业务的需求设计出对应的领域模型和业务逻辑以及SOP操作流程等;

包含对设计模式的采用和框架的选型考量,以及对中间件(缓存、存储、文件、网络)等依赖选择,对整个的发布过程和代码质量的把控,最终完成发布上线和后期的运维过程,产品的持续交付和迭代需要进一步作出技术的判断和演进思考,推动技术演进和产品持续迭代,充分考虑技术ROI投入产出比,在业务需求下作出正确的技术判断,技术发展日新月异,将来更需要密切把握技术脉搏、又要兼具全局视野,做出关键判断和取舍,给用户带来价值。 image.png

加油后浪

互联网技术一直在变化,技术越来越更聚焦,后端的技术发展越来越精细化和分层拆分。

作为后端的同学,更需要关注业界的动态和方向,包括QCon技术峰会、架构峰会以及github和技术社区。

需要能够有敏锐的嗅觉和判断力,通过技术栈的组合和应用,作出正确判断和技术选型,提升产品能力和推动产品和技术演进,在业务飞速发展下持续交付高质量产品和缩减产品交付迭代周期,快速落地业务和解决用户需求。

后端开发需要具备全情投入,能够做到真正地掌握背后技术原理同时做到触类旁通,能够把各个技术栈转化为自己的理解,再也不会以一句“后端CRUD“作为简单定论了。

未来在5G时代,更需要技术的持续革新,新的业务场景和产品必将出现,需要我们做好技术储备和技术创新,应对新的变化和挑战,加油,奔涌中的后浪们! 最后,愿我们能与时代同行,具备技术前瞻性和创新变革,携手共进!