前端圈从来不缺少新的技术、点子和话题,有些留下来了而有些则转瞬即逝。在决定一种新技术是否能够长久的所有因素里,最核心的必然是自身实力过硬能够经受住实践检验。而除此之外,这项技术所解决问题的广泛程度、受众群体规模等“非技术因素”也至关重要。

比如一经问世便话题性十足的React时至今日不论是自身还是其优秀的效仿者们都仍旧高歌猛进,高性能的vdom和高效率的数据驱动开发模式固然是其立足的基本,但React能够高度普及的另一个关键因素也不容忽略,那就是它解决了前端开发最表面也是最广泛的问题:UI编程。这可以说是从前端这一岗位自诞生以来最核心的关注点,而且不论什么类型的web应用都无法脱离它。

但是很少人知道React的数据驱动UI的模式早在2011年的D3.js中就有很成熟的应用,一个重要的原因是面向SVG编程的D3.js受众群体太小,只有从事SVG数据可视化编程的人才会使用它,所以没有很高的传播度。

之所以讲React和D3,是因为今天我们要讨论的是一种不论从普及的速度上还是话题性上都非常惊人的技术理念-Serverless。

Serverless解放了后端和运维,前端呢?

业内对于Serverless的正式得名来自何处并没有绝对统一的看法,但一种相对普遍的认知是始于亚马逊AWS Lambda。自2014年始,在AWS Lambda之后,Google、IBM、Microsoft、腾讯等国内外云厂商们相继推出类似的云函数计算平台,称为FaaS。时至今日Serverless=FaaS的误解仍未完全消除,不过Serverless=FaaS+BaaS的理论模型已经趋于标准。各类社区、论坛和技术大会对此的讲解有很多,本文便不再赘述。

提一个有趣的东西,早年间折腾过“梯子”的小伙伴肯定熟悉一个很好用的工具:Google App Engine,简称GAE。虽然Google将GAE定位为一种SaaS产品,但GAE本身可以被拆解为很多细分的功能,在这些能力之上开发可以开发自己的SaaS产品。在这个角度上GAE很符合目前技术圈对于Serverless的解读。

Serverless最直观的优势是解放了传统后端和一部分运维工程师的生产力。原本由web server承载的业务逻辑转交给FaaS平台的一个个函数,没有了服务器硬件的束缚,也舍弃了MVC之类的架构模式,只剩下业务逻辑本身。服务部署在云端能够节省很多运维成本,什么交换机、路由器、刀片服务器等等全都与开发者无关。

Serverless可以称得上是一种转变软件开发范式的理论。软件开发技术经历几十年的发展历程到今天,开发者在Serverless的加持之下,从原始的聚焦于系统架构和软件架构两者,转变为只关注软件架构本身。

Serverless无疑是一个伟大的理论,但不论是系统架构还是软件架构,交付给用户的形式终究要依托应用端。而Serverless本身并没有关注于解决对端问题上。这像极了通信技术领域的“最后一公里”问题:通信服务商们克服了重重困难将电缆跨过了陆地和海洋,最终却在抵达用户计算机的最后一公里之前遇到了瓶颈。

在对端的最后一公里,Serverless还缺少什么?

这个问题其实已经超越了狭隘Serverless的范畴,更准确地表达是:在Serverless的基础上,如何设计合理的对端解决方案?

解决问题的关键在于FaaS层。

目前市场上提供FaaS服务的云计算厂商中,包括AWS Lambda、Azure Functions、阿里云的Function Compute以及腾讯云的SCF,在应用端调用函数的方式大都以http API的形式为主。这跟传统的web server接口在调用方式上并无本质区别。

http api本身没有任何问题,问题在于调用请求直接送达FaaS函数有很多不便和隐患。FaaS函数很接近函数式编程思想里的纯函数。函数本身是无状态的,但是业务逻辑是有状态的,最典型的场景是用户鉴权。这并不是很复杂的业务逻辑,但是如果一个FaaS函数来承担的话,那么这个函数便跟业务有了强耦合性,变得不再“纯”,成为了一个“高阶函数”,同时还有一定的安全隐患。

对于这类FaaS平台,比较普遍的做法是在FaaS之上另行搭建一层API Gateway,用来做鉴权、session维护等与业务相关的工作,同时充当FaaS层代理的角色。

部分厂商提供了API Gateway能力。

这是一种比较合理的接入方式,但需要开发者付出一定的成本,不论是自行搭建API Gateway还是使用云厂商提供的能力。没有做到“开箱即用”的便捷性,这也是最能够体现云开发优势的一点。

云开发:Serverless最后一块拼图

云开发并不是Serverless,准确地说,它不是Serverless的全部。在目前技术圈对Serverless的认知基础之上,云开发以“最后一块拼图”的形态弥补了Serverless对端能力的不足。

云接入层不仅仅是一层传统的API Gateway,同时会对应用端的每一次请求进行权限验证,包括云函数、存储以及数据库在内的所有能力都有细分的权限管理策略。

端与云接入层的通信流程隐藏在端SDK中,开发者使用比http API更便捷、更具语义化的函数语法进行调用。

关于函数语法与http API的优劣对比后续文章会详细讲解,敬请关注。

在云开发体系下,开发者省去了搭建API Gateway的人力和经济成本,真正做到了“开箱即用”。

总结

“含着金汤匙出生”的Serverless仅用不到5年的时间便经历了从诞生到普及的历程,在当前的时间节点业内对于Serverless虽有公知但仍未绝对统一,大家都是踩着石头过河。云开发自2018年9月在小程序落地之后,从一开始的质疑大过认可到成为小程序开发的标配仅用了不到一年的时间,未来也将以成为标准的Serverless对端解决方案为目标。

云开发如何解决serverless对端的最后一公里问题的更多相关文章

  1. 0.1+0.2不等于0.3,微信小程序云开发如何解决JavaScript小数计算精度失准的问题

    先看图 这个是JavaScript语言自身存在的一个问题.说道这里不得不提一下网上流传的JavaScript搞笑图 我们在使用云开发来开发微信小程序的时候,会经常遇到JavaScript小数计算精度失 ...

  2. TVP专家眼中的云开发:定是未来,尚不完美

    TVP专家眼中的云开发:定是未来,尚不完美 C++之父 Bjarne曾说,"世界上只有两种编程语言,一种被人骂,一种没人用".这句玩笑话道出了软件开发行业的真谛,不怕被人吐槽,就怕 ...

  3. FEDay会后-Serverless与云开发,可能是前端的下一站

    进化本身是生物体与环境之间持续不断的信息交换的具体表现. -- 摘自<信息简史> 很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识 ...

  4. Serverless介绍篇(一)云开发在Serverless方面取得了怎样的新成果?

    过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注.本文介绍了腾讯云CloudBase 的 Ser ...

  5. 聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!

    4月14日,由云加社区举办的TVP&腾讯云技术交流日云开发专场,暨"腾讯云-云开发圆桌论坛"在北京.深圳两地同步举行. 当天下午,一场主题为"基于大前端和node ...

  6. 热度3年猛增20倍,Serverless&云开发的技术架构全解析

    『 作为一个不断发展的新兴技术, Serverless 热度的制高点已然到来.』 或许,Google Trends 所显示的 3 年猛增 20 倍的" Serverless " 搜 ...

  7. 支付宝小程序云开发(Serverless)

    支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...

  8. 华为云对Kubernetes在Serverless Container产品落地中的实践经验

    华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...

  9. 用小程序·云开发两天搭建mini论坛丨实战

    笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数.数据库.存储三大能力.关于云开发,可参考文档:小程序·云开发. 个人感觉云开发带来 ...

随机推荐

  1. 【数据结构与算法】--JavaScript 链表

    一.介绍 JavaScript 原生提供了数组类型,但是却没有链表,虽然平常的业务开发中,数组是可以满足基本需求,但是链表在大数据集操作等特定的场景下明显具有优势,那为何 JavaScript 不提供 ...

  2. Linux常用命令大全(全全全!!!)

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  3. [转]Linux下 tar.xz格式文件的解压方法

    现在很多找到的软件都是tar.xz的格式的,xz 是一个使用 LZMA压缩算法的无损数据压缩文件格式. 和gzip与bzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案 ...

  4. Spring Boot 整合 Web 开发

    这一节我们主要学习如何整合 Web 相关技术: Servlet Filter Listener 访问静态资源 文件上传 文件下载 Web三大基本组件分别是:Servlet,Listener,Filte ...

  5. 带你入门SpringCloud 之 通过SpringCloud Bus 自动更新配置

    前言 在<带你入门SpringCloud统一配置 | SpringCloud Config>中通过 SpringCloud Config 完成了统一配置基础环境搭建,但是并没有实现配置修改 ...

  6. Java基础学习笔记(一) - 基础语法

    1.Java程序开发过程 编译: 是指将我们编写的Java源文件翻译成JVM认识的class文件,javac编译器会检查我们所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功. 运行: ...

  7. 使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载

    一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.NET 运行时无法回收它们,如果我们要实现插件热加载 (例如 Razor 或 Aspx 模版的热 ...

  8. javascript关键字typeof、instanceof、constructor判断类型

    鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型.对于这个问题,JavaScript 也提供了多种方法,但遗憾的是,不同的方法得到的结果参差不齐. 下面介绍常用的几 ...

  9. 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题

    最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...

  10. ZGC介绍

    zgc是一款可拓展的低时延,为实现以下几个目标而诞生的垃圾回收器: 停顿时间不超过10ms 停顿时间不会导致堆大小增长 堆大小范围可支持几G到几T 再看一下zgc的标签: region-based ( ...