最近一直在了解Serverless架构的模式,其主要思想是不是真的没有服务器的,而是研发人员无需关心物理意义上的服务器(包括服务器的资源情况、部署情况操作系统以及依赖软件在内的所有细节,这一些都由平台完成),只需关注业务的实现。 虽然Serverless帮我们屏蔽了许多细节,那么是否就代表我们无需了解背后的原理,只学会用就可以了呢?当然对于那些刚毕业、刚入工作的开发者来说,目前学会使用各种编程语言去实现功能需求是最主要的内容。但是随着工作时间的加长和工作经验的积累,只要不是偏安一隅的话,只学会使用这些编程语言去解决项目需求这种事远远不够的。 软件开发行业不像其他的行业:比如开车的司机无需了解内燃机的原理也能够很好地驾驶车辆;摄影师也无需了解光学原理也能拍出很好看的照片,然而在软件行业,无论用的语言有多先进,研发人员仍需理解计算机硬件的工作原理,操作系统的运行原理、互联网是如何连接的,程序是如何编译的。 为什么会有这种现象呢?对于司机来说,如果车辆发生故障,送到4S店来维修,对于摄影师来说,如果相机发生故障,可以送到生产商去维修或者更换。对于软件开发人员来说,若程序发生了故障,由于时间上的紧迫性,并没有谁能够立即提供帮助,只能研发人员自己来解决。因此如何能够快速地定位和解决问题,这就依赖于研发人员的相关经验和对底层原理的理解程度了。 目前现在有很多优秀的开源项目,也有很多优秀的平台,这些做得越好,屏蔽的内部细节越多,研发人员使用起来就越方便,只有理解和掌握了底层原理,并通过更加深刻的思考和分析,才能设计出合理的架构。如果研发人员只是简单地使用云计算供应商提供的各种服务,那么当这些服务出现异常时,将无从下手解决具体问题。 所以对于那些不满足于整天作为CURD和接口调用工程师来说,理解和掌握底层原理是非常有必要的。