近期看到Serverless的概念,简单看了几个帖子。以我个人理解,就是开发者仅仅需要编写核心业务代码,而无需投入至服务器、环境配置、负载均衡、扩容、系统监控等等。业务代码均是以函数的形式组成的,也就是Function as a Service, FaaS。另外,我看到了如下这个图,Monolith为单体应用,中间的是微服务,右侧就是FaaS的函数。单体应用可以根据业务模块拆分为多个微服务,而微服务可以拆分为多个函数。
基于以上理解,我想到了两个字,封装。将不同的逻辑功能封装为函数,再通过调用不同的函数组装成业务模块。如果很多业务模块都可以基于有限的函数进行组装,那么是否可以存在一个函数集?至于函数是如何实现的,业务开发可无需研究。这一景象是否非常熟悉??指令集和软件代码也就是这种逻辑,基于指令集开发软件,而无需了解指令集是如何实现的。
再做一些推广,有些技术的进步就是通过将底层的技术进行封装,基于该封装做出更强大的功能。比如C是对汇编的封装,Python又是高一级的封装,Verilog语法是对“与-或-非”门的封装,Spinal又是Verilog的一种封装。出现更高一级的封装形式,可能就意味着技术的进步。
既然可以将业务模块抽象为多个函数组成的,只管调用函数,而无需干涉函数是如何实现的。那么是否可以将一些函数直接用芯片逻辑实现,在调用函数时,实际上是调用芯片逻辑?这个问题包括两个方面,一是有哪些函数,可以使用芯片逻辑实现,二是如何使用芯片实现。
- 哪些函数可以使用芯片实现
从技术角度来看,几乎所有函数都可以直接使用芯片实现,不过这种说法没有意义,因为没有收益。必须综合多方面的因素,复杂度、调用频率、函数规模、部署问题、对现有技术和网络拓扑的影响、软硬件性能差距、成本等等,形成商业上的收益。基于该原则设计的函数,才是该问题的答案。这种函数是否存在,我不知道,从来没有接触过互联网应用的架构,只能通过自己浅薄的认知做一些设想。
- 如何使用芯片实现
当前的函数调用实际是软件的接口,若使用硬件实现,必然需要考虑软硬件接口,可能又带来了额外的数据搬运动作。首先要考虑的是设计合理的接口,便于调用,又不至于带来额外的损耗。比如考虑网口作为数据的输入口,在同一个系统内完成报文解析和封装,将解析后的报文丢给硬件处理模块。另外就是trade-off的问题,每个函数均设计硬件逻辑是不合理的,因此需要抽象出一个合理的模型,多个函数都可以使用该模型实现,只是存在参数配置的差别。
上述两个问题都做了一些思考,后续再展开做一些设想。
基于函数提供服务的Serverless,我觉得应该会是一个趋势。通过提供接口的方式,将开发者与底层设计进行隔离,这里包括具体的硬件设施、操作系统、文件管理、内存调用等等,仅仅需要满足其功能。函数提供商,就可以用各种技术手段提供高效的函数服务,剔除原本冗余的部分,比如虚拟化、安全等等,相关的函数功能进行集中化管理,进而带来成本上的优化,用较少的硬件设施提供服务,降低的是机房的能耗。通过芯片逻辑提供函数服务,就可以作为一种选择。
当前有较多的公司都有涉及芯片设计,基本集中在server、gpu、dpu或者ai,那么针对具体互联网业务应用的函数,通过设计芯片提供服务,是否也可以作为一个方向??
参考
所谓 Serverless,你理解对了吗?- 知乎 (zhihu.com)
作者:芯工阿文
原文链接:芯工阿文
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏。