云开发如何解决serverless对端的最后一公里问题
前端圈从来不缺少新的技术、点子和话题,有些留下来了而有些则转瞬即逝。在决定一种新技术是否能够长久的所有因素里,最核心的必然是自身实力过硬能够经受住实践检验。而除此之外,这项技术所解决问题的广泛程度、受众群体规模等“非技术因素”也至关重要。
比如一经问世便话题性十足的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对端的最后一公里问题的更多相关文章
- 0.1+0.2不等于0.3,微信小程序云开发如何解决JavaScript小数计算精度失准的问题
先看图 这个是JavaScript语言自身存在的一个问题.说道这里不得不提一下网上流传的JavaScript搞笑图 我们在使用云开发来开发微信小程序的时候,会经常遇到JavaScript小数计算精度失 ...
- TVP专家眼中的云开发:定是未来,尚不完美
TVP专家眼中的云开发:定是未来,尚不完美 C++之父 Bjarne曾说,"世界上只有两种编程语言,一种被人骂,一种没人用".这句玩笑话道出了软件开发行业的真谛,不怕被人吐槽,就怕 ...
- FEDay会后-Serverless与云开发,可能是前端的下一站
进化本身是生物体与环境之间持续不断的信息交换的具体表现. -- 摘自<信息简史> 很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识 ...
- Serverless介绍篇(一)云开发在Serverless方面取得了怎样的新成果?
过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注.本文介绍了腾讯云CloudBase 的 Ser ...
- 聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!
4月14日,由云加社区举办的TVP&腾讯云技术交流日云开发专场,暨"腾讯云-云开发圆桌论坛"在北京.深圳两地同步举行. 当天下午,一场主题为"基于大前端和node ...
- 热度3年猛增20倍,Serverless&云开发的技术架构全解析
『 作为一个不断发展的新兴技术, Serverless 热度的制高点已然到来.』 或许,Google Trends 所显示的 3 年猛增 20 倍的" Serverless " 搜 ...
- 支付宝小程序云开发(Serverless)
支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- 用小程序·云开发两天搭建mini论坛丨实战
笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数.数据库.存储三大能力.关于云开发,可参考文档:小程序·云开发. 个人感觉云开发带来 ...
随机推荐
- APP功能测试要点
1.功能性测试 根据产品需求文档编写测试用例而进行测试,包括客户端的单个功能模块以及功能业务逻辑(功能交互)如:涉及输入的地方需要考虑等价类,边界值,异常或非法等 1.1 安装与卸载测试 >软件 ...
- 高通电源管理qpnp-vm-bms驱动
1. compatible节点: qpnp-vm-bms.c使用来控制电池曲线的和BMS功能的,其compatible节点是"qcom,qpnp-vm-bms" 2. probe函 ...
- select2 分组后的选项无法被选中
在使用select2组件的过程中发现分组下的选项无法选中,与分组在同一级的选项可以被选中! 1.所用select2版本select2-4.0.32 2.HTML代码: <input id=&qu ...
- JMeter 压测Server Agent无法监控资源问题,PerfMon Metrics Collector报Waiting for sample,Error loading results file - see file log, Can't accept UDP connections java.net.BindException: Address already in use 各种疑难杂症
如何安装插件此博主已经说得很详细了. https://www.cnblogs.com/saryli/p/6596647.html 但是需注意几点: 1.修改默认端口,这样可以避免掉一个问题.Serve ...
- JS中数据类型转换
JS中数据类型转换汇总 JS中的数据类型分为 [基本数据类型] 数字 number 字符串 string 布尔 boolean 空 null 未定义 undefined [引用数据类型] 对象 obj ...
- linux centos安装zabbix 4.0服务端
1.服务器安装docker sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manag ...
- Ubuntu使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母解决方案
原因是系统只装了vi,没有装vim.因为vi是不能直接按退格键删除字符的.所以重新装下vim指令即可: # sudo apt-get install vim 重新使用vi命令进行文件编辑.
- EJB生成代码后遇到transient错误
启动服务的时候遇到这样的错误: 解决方案: 1.找到对应的模块的SesBean文件 2.去掉transient 3.重启服务即可
- .Net Core 商城微服务项目系列(十五): 构建定时任务调度和消息队列管理系统
一.系统描述 嗨,好久不见各位老哥,最近有点懒,技术博客写的太少了,因为最近在写小说,写的顺利的话说不定就转行了,哈哈哈哈哈哈哈哈哈. 今天要介绍的是基于.Net Core的定时任务调度和消息队列管理 ...
- .Net Core 商城微服务项目系列(三):Ocelot网关接入Grafana监控
使用网关之后我们面临的一个问题就是监控,我们需要知道网关的实时状态,比如当前的请求吞吐量.请求耗费的时间.请求峰值甚至需要知道具体哪个服务的哪个方法花费了多少时间.网关作为请求的中转点是监控品牌的要塞 ...