云函数与函数式编程思想结合会产生什么?

导语
  函数式编程是一种编程范式,也就是如何编写程序的方法论。随着函数式编程被更多人广泛的关注。很多古老的函数式编程语言都重获新生,就连Java这样的老牌的编程语言都开始往函数式编程的方式开始靠近。例如Python、Rudy、JavaScript等等的语言对于函数式编程都有很好的支持。并且越来越多的迹象表明,函数式编程已经从学术界往工业界开始转移,很多的用于工业实践的方式都已经在工业界大批量的投入实用,并且获得了很好的效果。

  函数式编程是即面向对象编程之后又一关键的编程范式,对现在的以面向对象编程思维为主导的程序员提出了很大的挑战,大家应该或多或少的都要懂一点函数式编程的思想。

  虽然函数式编程的概念已经看上去比较流行了,但是在网上,对于什么是函数式编程还是众说纷纭。下面就来谈谈自己的见解

函数式编程

  函数式编程最主要的基础支持是Lambda Calculus,λ演算,是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。lambda演算作为一种广泛用途的计算模型,可以清晰地定义什么是一个可计算函数,而任何可计算函数都能以这种形式表达和求值,它能模拟单一磁带图灵机的计算过程;尽管如此,lambda演算强调的是变换规则的运用,而非实现它们的具体机器,这个概念似乎有点复杂。

  首先简单的说,函数式编程是一种编程范式,也就是讨论如何编程的方法论。这里的函数并不是指计算机编程意义上的函数或者是方法,而是数学意义上的函数,也就是说表示的是某种变量的映射关系。也就是说给定一个参数就一定会有一个函数值的存在,并且这个函数值的存在不会因为其他状态的改变而改变。例如f(x) = x+1,给定一个x值就一定会有一个f(x)与之对应。无论任何时候,调用多少次,这个值始终是不变的。

  来看个小例子,下面有这样一个数学表达式

(1+2)*3-4

  很简单,在我们传统的编程过程中把它写成如下的一种方式

var a = 1+2;

var b = a*3;

var c = b-4;

  在使用函数式编程,要求将所有的操作过程定义为一个函数,然后将函数进行组合

var result = subtract(multiply(add(1,2),3),4)

  从这里可以看出来,所有的函数都完成的一件事情,就是计算输入参数的结果并且返回。也就是说将函数作为一个参数进行了传入。这有点类似于数学概念上的复合函数也就是y = f(g(h(x)))。一个函数的结果是另一个函数的输入。并且在执行过程中,最终的结果不会受到外部其他条件的干扰。

云计算

  云计算是分布式计算的一种,是指利用网络,将巨大的计算处理过程拆分成很多的小的过程,然后通过多个服务器组成的分布式系统来进行计算,将最终的结果反馈给用户的过程。

  从狭义的角度上来讲,云计算其实就是一个提供资源的网络环境。使用者可以随时的获取云上的资源,并且按照自己的需求进行计费,并且可以根据自己的需求,对于网络上的资源进行无限的拓展。只需要按照使用量进行付费就可以了。

  广义上来说,云计算是为互联网资源提供相关服务的一种资源池。将所有的计算资源统一到云资源上,用户可以从资源池中按照需求进行获取。现在很多的云服务商都在做这件事情,为很多的中小型企业提供了云计算的资源。不需要每个企业再建设自己的服务器资源、文件存储资源、以及数据存储资源等等的一些内容,而是将自己空余的资源利用虚拟化的技术进行了共享。将并行计算、网络存储、热备份、虚拟化、大数据等诸多技术进行的混合,形成了一种新的云计算理念,出现了IaaS、PaaS、SaaS等解决方案。

云函数

  云函数,其实也就是函数即服务 FaaS 的具体实现,通过函数提供计算能力,原有的计算能力,无论是容器也好,还是虚拟机也好,都是在操作系统基础上的也就是在IaaS的基础上的。云函数的实现只不过是将计算能力进行进一步的抽象。

云函数与函数式编程思想结合会产生什么?

  确实从概念上讲,两者根本就是两个相互没有关系的概念。但是如果将两者进行整合,将函数式编程思想与云函数实现方案结合会有什么样的效果。

  将复杂逻辑通过函数是编程的方式进行实现,然后提供一个公共的云函数库。通过某种方式对这些云函数进行调用。开发者从一个云函数资源池中进行函数的查找,然后组合自己的业务,通过调用链路组合的方式来实现自己的业务逻辑,包括但不限于数据存储、文件存储等等。

  或者有点类似于Spring容器这种,在使用的时候,我们将编写好的函数式代码注入到一个容器中,这个容器就是我们云函数实现方案。这样的操作完成之后,我们就可以在程序的任何地方随意的去调用这些函数。

  对于并发的控制可以通过设置一个调用函数的个数来进行一个简单的解决,当然随着技术的不断发展也会出现新的解决方案,这里只是举了一个小例子。

  例如当并发量为1000W的时候,调用的函数个数是100W个相同的函数进行业务逻辑处理。在函数式编程中有这样的一个前提,就是说一个输入只有一个输出,并且这个输出是不会随着其他条件的改变而改变的。也就说,这100W个函数会接收到1000W并发中的100W个,并且这些处理逻辑的输入是唯一的,也就意味着经过一系列的处理之后,得到的结果也是唯一的,并且对应的是这100W的输入。

  从某种程度上来说,函数式编程本身就是天然并行并发的,当然这是由函数式编程的确定性/不变性所决定的。所以说在高并发的场景下,可能更有优势。

这样做的缺点

1、需要对各个业务进行更加细粒度的拆分,推进的成本,维护的成本都是相当高的。

2、这种方案可能不适合长时间运行的系统,长时间运行本身也是对云资源的一种消耗。

总结

  基于上述的一些讨论,对于一些快速开发,并且业务逻辑较为简单的场景来说,通过上述的这种方式实现起来比较省时省力,但是对于一些复杂的业务逻辑来说,可能不太适合。对于现阶段来说,云函数的应用也只是在小范围内去使用,结合现在炒的比较火热的一个DDD(领域驱动设计)。我想在不久的将来,很多的大厂都会往上述描述的这种方案上来靠拢。函数式编程与自然语言比较相似,而DDD所提出的一个概念就是将程序员编写的代码与实际业务结合的更加紧密。基于这些,既然业务与人有关,函数式编程与自然语言有关,再结合云函数实现方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nihui123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值