2019 年终云时代的 Node FaaS 技术展望

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
函数计算FC,每月15万CU 3个月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 任何大规模技术变革都逃不 开一个驱动力:商业价值。今天世界经济不确定性陡增、主要互联网市场人口红利消失、流量被市场寡头控制......,整个互联网行业从没像今天这般短兵相接、剑拔弩张,这就要求互联网市场从业者更加注重商业价值。

image.png

概要

这几年很少写文章,一方面确实很忙,另一方面怕误人子弟,一家之言望指正。

今天分享一下云时代的前端技术展望,在开始之前,先聊聊云时代的背景。任何大规模技术变革都逃不 开一个驱动力:商业价值。今天世界经济不确定性陡增、主要互联网市场人口红利消失、流量被市场寡头控制......,整个互联网行业从没像今天这般短兵相接、剑拔弩张,这就要求互联网市场从业者更加注重商业价值。

云时代带来了: 极致效率、高可用、精细化成本控制,从而满足商业价值的要求。极致效率让招聘成本和研发成本大幅度降低,资本对互联网从业者提供的加速性能爆棚。高可用让运维成本大幅度降低,现在的互联网基础设施在云端为商业保驾护航,丝滑的阿里双十一验证了这一点。精细化成本控制让基础设施如: 服务器、带宽、存储空间......等,可随着业务发展按需投入,业务初期节约的资本可以投入到获取用户等更加迫切的事情中去。因此,云计算为互联网商业带来了前所未有的优秀环境。

作为所有技术栈里最爱折腾的前端,拿着亚⻢逊云Lambda超过60%的JavaScript市占率,面对云计算和云时代的大考,究竟应该怎样备考呢? 本文将按照从环境到应用的顺序,逐步揭开云计算时代的面纱。

云游

伪屏蔽:Serverless下的Node

容器技术起源于虚拟化,从Parallels Desktop,Vmware,VirtualBox,Virtual pc 到Xen、KVM、Hyper- V......。云计算起源于容器技术,从cgrpups、Docker的基础容器到FaaS函数容器。从最早的虚拟技术,到后来的容器化技术,在前端技术领域里使用容器技术实现Serverless的开发方式,把Node从一个 包管理技术和开发调试工具,真正意义上变成生产力技术,还是跨越了许多坎坷。

首先需要真正意义上实现IaaS,对于应用来说,底层的基础设施服务化从Devops到Nops,最大的转变 在于Devops不是谁都能用好所以不具备普世价值。Devops提供了通过编程控制基础设施的能力,但是,如果不深入理解分布式系统架构、不了解容错容灾和一致性问题......,并不能使用好Devops,他不仅仅是启动服务器、挂载硬盘、安装运行环境、设置环境变量、启动服务、InitD启动脚本、启动守护进程这么简单。

其次,从架构设计⻆度上看,一个分布式系统和一个非分布式系统有着本质的区别,并非把服务用Node开发,借助容器技术部署到云端这么简单。从接入层来看,流量的负载均衡、流量分发、安全......。从服务层来看,服务注册发现机制、任务分发、任务结果的Reduce、事务性支持、一致性支持、调度、消息通信机制、服务监控......。分布式系统最核心问题就是引入网络通信带来的不确定性,这也是为什么编程问题里最复杂的是网络。

最后,从研发体系上看,无论C/C++还是Python、Java,都针对服务开发沉淀积累了大量技术生态,尤其是针对分布式系统、大规模部署的复杂系统、大数据量和高并发系统、高实时性系统......都有成熟的技术方案和研发体系支撑。Serverless出现可以作为传统服务开发的一个加速器和技术补充,Node服务端开发远不如传统服务开发技术体系成熟,从技术生态上完善这个体系还有很⻓的路要走。

综上所述,Node进入到Serverless技术体系并涉足传统服务开发领域,看似表面光鲜的虚拟化技术、容器技术、容器编排技术、服务注册发现技术、服务编排技术......,实则对技术细节做了伪屏蔽。技术上看,虽然带来了充分的技术保障和实施可能性,但完善Node服务端开发技术体系,还需要Node FaaS和Node Serverless生态在未来很⻓一段时间深耕技术细节,完善配套设施做到真屏蔽。

从思想上看,无论这个技术体系多厉害,从用户侧发起请求到服务侧响应,在云技术和Serverless体系 下依旧非常复杂,需要有体系化的技术思想和架构思想去理解,这也要求Node开发人员更多去了解学 习:MDA分析法、五视图分析法、领域模型......等设计思想和设计范式。

超级胶水:Fission看FAAS

理论

Javascript诞生之初,作为一⻔解释执行的语言,天生的动态性就决定了其“胶水”的特性。起初, Javascript把DOM和BOM粘在一起实现了DHTML;后来,Javascript把DHTML和HttpWebRequest粘在 一起实现了动态⻚面。十余年发展下来,Javascript自从加入ECMA语言层面增加了十来个特性,W3C 标准却带来了成百上千的浏览器特性,这意味着胶水自身的特性是够用的。这让我想起502,不管是啥,擦干净抹上502一按就粘住了。

Node.js的出现让Javascript成为了真正的502,不仅在浏览器上可以粘这粘那的,在服务器上也可以粘这粘那了。比如你可以把一个HTTP Request Accept下来,把Token粘到鉴权Service判断用户是否合法,然后用AWK粘上Post内容来个文本分析,再粘个云端存储服务的REST API把某个Key的Value更新 一下,然后挂着200的状态返回个Response。

在Serverless下的Node技术体系更进一步,聪明的程序员发明了FaaS(Function as a Service)函数即服务。经历了基础设施既服务、平台即服务、软件即服务的收敛过程,个性化诉求伴随着市场激烈竞争所带来的业务压力,市场迫切需要在集中式的服务为基础的云上,快速构建个性化服务。云服务商把不同的业务逻辑包装在函数里直接在云端函数容器执行的方案,从众多解决方案中迅速脱颖而出。究其原因就是极致效率、高可用、精细化成本控制,业务有需求写个函数立刻构建、测试、发布上线,函数容器背后的云技术乃至云原生来保证高可用,弹性缩扩容保证成本精细化控制,完美!

实战

Step 1
Fission需要Kubernetes 1.9以上版本,好在安装Docker后在GUI里可以简单的安装启动Kubernets,具体安装过程这里就不在赘述,请参考:https://www.docker.com/get-started

image.png

Step 2
安装Fission:

$ kubectl create namespace fission
$ kubectl -n fission apply -f \
    https://github.com/fission/fission/releases/download/1.7.1/fission-all-1.7.1.yaml

Install Fission CLI:
MacOS

$ curl -Lo fission https://github.com/fission/fission/releases/download/1.7.1/fission-cli-osx \
&& chmod +x fission && sudo mv fission/usr/local/bin/

其他系统:https://docs.fission.io/docs/installation/#install-fission
查看安装状态:

zhenyankun.zyk@zhenyankunzykdeMacBook-Pro ~  kubectl --namespace fission get svc
NAME                                      TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE

controller                                    ClusterIP10.106.180.23<none>80/TCP         32m

executor                                      ClusterIP10.102.255.150<none>80/TCP         32m

fission-1-7-1-prometheus-alertmanager         ClusterIP10.111.38.166<none>80/TCP         32m

fission-1-7-1-prometheus-kube-state-metrics   ClusterIPNone<none>80/TCP         32m

fission-1-7-1-prometheus-node-exporter        ClusterIPNone<none>9100/TCP       32m

fission-1-7-1-prometheus-pushgateway          ClusterIP10.107.84.192<none>9091/TCP       32m

fission-1-7-1-prometheus-server               ClusterIP10.97.30.142<none>80/TCP         32m

influxdb                                     ClusterIP10.102.33.131<none>8086/TCP       32m

nats-streaming                                ClusterIP10.105.145.227<none>4222/TCP       32m

router                                        LoadBalancer10.97.124.224    localhost     80:30532/TCP   32m

storagesvc                                   ClusterIP10.102.11.13<none>80/TCP         32m

这里用Fission来演示一下FaaS的魅力:

# Add the stock NodeJS env to your Fission deployment

  $ fission env create --name nodejs --image fission/node-env

# A javascript one-liner that prints "hello world"

  $ curl https:
//raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js > hello.js

# Upload your function code to fission

  $ fission 
function
 create --name hello --env nodejs --code hello.js

# Map GET /hello to your new function

  $ fission route create --method GET --url /hello --
function
 hello

# Run the function.  This takes about 100msec the first time.

  $ fission 
function
 test --name=hello

Hello
, world!

  $ curl http:
//localhost:80/hello

    hello, world!

可以看到,只要一个CLI即可解决所有问题,本地装个Docker和K8S立即能跑起来。推荐这个的原因是 方便的在本地搭建实验环境,真正动手学习K8S的容器编排、Docker的容器技术之强大,不用去 Amazon 花钱开Lambda服务就能体验FaaS的魅力。通过Fission实践可以掌握:

1.K8S加持的云原生开发方式 了解容器池化如何应对冷启动和瞬间高并发问题

2.如何进行服务编排

3.什么是LSTIO服务网格

4.如何借助Prometheus这种云工具来攫取指标观察数据

5.测试Javascript和其他语言在函数容器中的性能表现

6.......其他花式玩法等你探索

image.png

由此,即可顺利跨上云计算这匹宝⻢良驹,驰骋疆场应对⻜速变化的市场环境和新技术,精确无误的把 各种云能力用Node FaaS这管强力胶黏合在一起。

云上开瓶器:Web IDE

作为一个1990年拥有电脑的编程老⻦,Delphi是我⻅过的第一个集成开发环境(IDE)。在Pascal的改进版语言Object Pascal加持下,各种UI控件和自定义控件可以实现几乎所有的GUI,相较之下, SourceInsight只能算代码编辑器。这也是很多人不理解微软把VS Code叫做代码编辑器,把Visual Studio称为IDE的根本原因。

因为VS Code的开放,各种插件加持下,VS Code的IDE能力一点儿不比Visual Studio弱,是不是很神奇?所以,数千人有组织的研发团队,依旧赶不上开源社区的强大,这是包括阿里巴巴、Apple等大公 司拥抱开源生态的本质原因。所以,今天的开源VS Code成为地表最强IDE已极少有人质疑。

VSC Team 由著名工程师 Erich Gamma 领导,Erich 是《设计模式》作者之一,Eclipse 之父,拥有多年的 IDE 开发经验。Erich举重若轻的利用Node把Extensibility管理的井井有条,为开放的插件生态创造了无限可能。

image.png

多进程的架构不仅带来了优秀的性能,后台进程、UI和编辑器、I/O、插件、Debug、Search各司其 职。因此,只要网络带宽允许,理论上可以把任何一部分服务化。举个例子,只要你愿意,可以下载VS Code的源码,把I/O部分服务化,利用云存储服务来替换本地I/O,就可以简单的保证源代码、资源文件 等在云端的环境里安全可控。又或者,你可以把插件部分服务化,不论你在家里还是在公司启动VS Code,云端存储一致的插件,立即带给你一致的IDE和一致的开发体验。最后,干脆把后台进程和Renderer process也放在云端,⻬活了,一个云上的IDE就此诞生。当然,你不愿自己折腾,可以试试:
微软的VS Code Online:https://visualstudio.microsoft.com/services/visual-studio-online/
或者Github上的Gitpod:https://gitpod.io/#https://github.com/alibaba/pipcook
或者在本地跑一下: https://github.com/cdr/code-server

image.png

如果把本文前半部分所讲的云端技术比作一瓶82年的拉菲,那云上的IDE无疑就是一把开瓶器,消除阻挡品尝云技术美酒的瓶塞。挡在这瓶美酒之前的瓶塞主要是:能力发现、调试、部署。

能力发现有两个层面,一个是表面上、文档上云服务能力是什么?一个是本质上、代码上云服务能力是什么?对于一个程序员,文档写的再详细,不亲自进去敲个Hello World、Echo Server,大抵是不放心的。有了云上的IDE,你即刻可以“打开”云服务的能力,用代码去一探究竟。

调试是应用任何新技术、新研发模式的基础,因为你无法预测自己的想法是否能被那些自以为是的代 码,在陌生的运行环境里被正确执行。要驾驭分布式系统和现代云技术体系,尤其当面对混合云的时 候,要完整搭建整个调试环境是一件很痛苦的事情。云上的IDE因为其云原生的先天优势,可以方便的 在云端利用云技术、容器技术、容器编排技术快速的创建应用调试环境,甚至可以借助云测试和真机模 拟环境来进行调测、拨测。

部署在云服务和云设施之上,不同的云技术对应不同的持续交付和持续集成,构建过程、构建环境、构 建对象和容器技术的依赖等,都让部署过程变得复杂。部署过程中流量分桶、热更新、服务一致性保障 等问题,也面临复杂的环境。尤其在多人协作的场景中,如何良好进行发布的管控,成为亟待解决的软 件工程问题。云上的IDE可以几乎无痛的解决上述问题,通过在云上维护统一的持续交付和持续集成环 境、自动化管控部署过程、借助源码和编译构建卡口代码发布,所有部署过程都在一个受控和受保护的 云环境中进行,开发人员可以放心大胆的用代码构建整个世界。

展望

未来最让我期待的就是云技术和机器学习,机器学习有https://imgcook.com这个作品在前端研发提效这个方向持续探索,为前端智能化充当排头兵,云技术在前端和Node FaaS技术体系下,需要怎样的突破创新?

首先,如何吸收借鉴传统服务开发的经验、分布式系统设计实践经验,将是首要问题。初生牛犊不怕⻁ 也意味着无知者无畏,即便有云技术良好的基础设施和基础能力,如何训练自己拥有良好的架构思想、 面向失败的设计习惯?只有不断学习吸收传统服务开发的经典架构思想和经典设计范式,并充分进行实 践和反思,将其融入到Node FaaS技术体系。

其次,学习速度和学习深度都是因人而异的,每个人都有不同的理解力、不同的技术背景,又分处在不 同的业务场景中,对Node FaaS技术体系的理解必定各有差异。如何在自己擅⻓的方向上、自己熟悉的 领域中持续积累,沉淀出Node FaaS的最佳实践,并使用VS Code插件或开源项目的方式分享出来,共 同借助社区的力量丰富和完善Node FaaS技术生态。

最后,云时代为前端技术人员织就了一张全新的互联网,以往在UI交互技术孤岛上的前端技术人员被联上了网,各种新技术都能够为前端所用,终于可以站在C/C++、Java、Python......等程序员面前自豪的说:你们能干的我们也能干,而且,干的更好!

image.png
关注「Alibaba F2E」
把握阿里巴巴前端新动向

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
1月前
|
JavaScript 前端开发 API
探索后端技术:Node.js的优势和实际应用
【10月更文挑战第6天】 在当今数字化时代,后端开发是任何成功软件应用的关键组成部分。本文将深入探讨一种流行的后端技术——Node.js,通过分析其核心优势和实际应用案例,揭示其在现代软件开发中的重要性和潜力。
121 2
|
1月前
|
存储 运维 监控
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
本文解析了Elasticsearch Serverless在智能日志分析领域的关键技术、优势及应用价值。
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
|
13天前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
30 1
|
21天前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
51 1
|
1月前
|
缓存 前端开发 Serverless
前端技术新趋势:从PWA到Serverless架构
【10月更文挑战第1天】前端技术新趋势:从PWA到Serverless架构
47 3
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的图像识别技术深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第27天】本文将介绍深度学习中的图像识别技术,包括其原理、应用领域及未来发展。我们将探讨如何通过神经网络实现图像识别,并分析其在医疗、交通等领域的应用。最后,我们将展望图像识别技术的发展前景。
|
3月前
|
运维 Cloud Native JavaScript
云端新纪元:云原生技术深度解析深入理解Node.js事件循环及其在异步编程中的应用
【8月更文挑战第27天】随着云计算技术的飞速发展,云原生已成为推动现代软件开发和运维的关键力量。本文将深入探讨云原生的基本概念、核心价值及其在实际业务中的应用,帮助读者理解云原生如何重塑IT架构,提升企业的创新能力和市场竞争力。通过具体案例分析,我们将揭示云原生技术背后的哲学思想,以及它如何影响企业决策和操作模式。
|
3月前
|
运维 Cloud Native 开发者
云原生技术演进:从微服务到无服务器的旅程
【8月更文挑战第20天】在数字化时代的浪潮中,云原生技术如同一艘航船,承载着企业转型的梦想与挑战。本文将深入探讨云原生技术的发展路径,从微服务的兴起到无服务器架构的革新,揭示这一技术演进背后的逻辑与动力。通过分析云原生技术的优势、面临的挑战以及未来的发展趋势,我们将描绘出一幅云原生技术演进的宏伟蓝图。
|
3月前
|
Cloud Native Serverless 云计算
云原生时代的技术演进:从微服务到Serverless
在数字化转型的浪潮中,云原生技术正成为推动企业IT架构现代化的重要力量。本文将探讨云原生技术的关键组成部分—微服务与Serverless架构—如何助力企业实现敏捷开发和高效运维。通过深入分析这两种架构模式的优势与挑战,我们旨在为读者揭示云原生环境下的最佳实践和未来发展趋势。