云合作开发探析——更方便快捷

小流程问世年来,业内高度关注小流程后端的控制技术重构十分多,因此为数众多小流程后端的架构、辅助工具也不断涌现,后端合作开发工作效率大大降低,而前台的合作开发设计则高度关注不多,关键点许多,具体内容痛在这儿呢?

小流程前台合作开发之痛

第三个是勒莫纳斯蒂耶县疼,怎么疼呢?

随著像百度云等的云服务供应商提供更多的云服务愈来愈快捷,销售业务穗序已经是必然趋势。但是从单纯地在云软件包上布署网页,到同时实现或者说全面性地穗序,还是有许多差别。要或者说同时实现全面性的穗序,要介绍的小东西十分多,当你第三次碰触那些基本概念的时候,学的那些小东西是两个接两个,让你名噪一时,常常零散了你的对销售业务的专注力。比如说我自己,来百度云之后,为了对云服务有更快地介绍,就去报了个百度云的专业课程。这专业课程系列产品分云CTO、云合作开发、云网络管理两门专业课程,还分最高阶、Wasselonne、高阶,需要耗费大批天数就可以厘清那些科学知识基本概念,因此更要花大批的天数去Vellore做试验。所以对于合作开发而言,要全盘弄清楚,还吗不是件难事,当然让你的屁股疼。

第三是肉疼,特别是你老板娘肉疼。

最开始当互联网还没有云服务供应商的时候,公司都得自己搭服务,不仅花大价钱买机器、买宽带流量,还得请人过来维护。如果在这种情况下要搞小流程合作开发,公司得请两个维护服务器硬件的、两个维护网络的,两个数据工程师,两个前台还有两个后端,刚好五个人。当云服务供应商开始进入变革整个市场的时候,我们就不用再自己维护硬件了,由云服务供应商来维护,因此我们可以少请两个维护硬件的,但还是得有两个网络管理去维护云服务。当云服务供应商将数据库、容器服务都抽象出来穗序之后,咱们连专业的数据库维护都可以不请了,由前台或者云维兼岗就行。云服务供应商的不断发展,确实是让云服务的成本不断下降,但投入的钱还是许多呀,要投入的人还是许多,这几年生意难做,作为老板娘肯定是想投入成本、试错成本越少越好。

第三个是肾疼。

大家都知道,合作开发是两个走肾的工作。比如说,那些年流行的前后端分离,虽然让专人专项,但却引入了联调这个事,所以也增加了肾的负担。

这里列出了三个前后端分离带来的麻烦。 1. 权责常常不清晰,有许多临界的位置,谁管都可以,难引发扯皮。 2. 沟通天数增多,因为毕竟是两个人工作嘛,需要许多的沟通 3. 除了沟通,还需要两边的代码调试,看看数据、展示通不通,这个天数也很不可控,特别是如果环境特别复杂,调起来不仅麻烦重重,还很有挫败感。

无服务合作开发小流程是未来趋势

正因为小流程前台合作开发的麻烦重重,因此业内都想出了各种各样的合作开发方案,其中一种方案,无服务合作开发小流程,我们认为,将会是未来的趋势。但这个未来,其实今天已经到来了。

那什么是无服务合作开发呢?无服务,又称为ServerlessServerless还处在两个比较初期的阶段,目前也没有权威和官方的定义,不同人不同公司有不同说法,今天我也不打算讲太复杂。顾名思义,Serverless就是指应用的合作开发不再需要考虑服务器这样的硬件基础设施,基于Serverless架构的应用主要依赖于像百度云这样的云服务供应商提供更多的前台服务。比如说说无服务云函数、云数据库、对象存储服务等等。单纯而言,相当于你现在要开个水果店卖水果,以前你还得要租店面,搞水电、装修门面。现在那些都不用了,你就在两个已经搭好各种各样设施的超市里,租两个已经帮你搞好门面的架子或者箱子,卖得好你就租大一点,卖不好就租小一点,随时随地随你的心意,十分灵活。

为什么说无服务化合作开发是趋势呢?因为云服务的进程,已经从物理机,重构到IAAS,再到PAASIAAS就是包括像云软件包、私有网络、网络专线、负载均衡等等的基础服务;PAAS则更抽象一些,比如说像云数据库、网络防护等等。基于IAASPAAS,云服务供应商发展出Serverless这类更高阶的合作开发服务。因此呢,无服务合作开发就会是今后合作开发类似小流程这类轻量应用的新的合作开发趋势。

一句话概括就是说,有了无服务合作开发之后,你就不用再处理安装、网络管理,底层了,只管写接口、写逻辑就好。总得而言,虽然你管的小东西愈来愈少,但合作开发工作效率却愈来愈高,合作开发出来的轻应用、小流程却是具备高性能、高可用、高扩展的特性。

那无服务合作开发,具体内容怎么去解决刚刚提到的前台合作开发关键点呢?

第一是让你更加高度关注你的销售业务逻辑。云服务许多好用但难理解的基本概念,什么冷备热备、弹性伸缩、负载均衡等等,通通都不用管,你只需要写好你的销售业务,服务好用户就行。

第三,更省人力更省资金,老板娘不再肉疼。因为有了无服务合作开发,网络管理工作也不用操心了,像小流程这类的轻应用,有两个全栈合作开发,或者两个后端,半个前台就可以轻松应付了,资金和人力的需求可谓大大节省。

第三,就是后端工程师向全栈工程师的转变。有了无服务合作开发,后端工程师其实也可以安全、高性能地去操作一些以前只有前台才敢操作的数据和逻辑,如果要合作开发的应用是像小流程一样轻量的、单纯的,完全可以由后端工程师完成,除非是特别复杂的,可能才需要前台的介入。这样也省缺了先前提到的前后端联调的麻烦。

小流程·云合作开发

说了这么多无服务合作开发的基本概念、优点,在小流程无服务合作开发这一块,百度云有什么样的作品呢。这就是今天要重点介绍的,小流程·云合作开发,这就是百度云与微信联合研发后,交出的答卷。

云合作开发,一共提供更多了三大能力,分别是存储、数据库、云函数。简而言之,就是提供更多了存文件、存数据和运行销售业务逻辑的能力。接下来,我会采取前后对比的方式,从方方面面去对比云合作开发和旧有的合作开发商业模式的不同。

首先是合作开发商业模式与架构上的对比。在云合作开发商业模式出来之前,旧的小流程前台合作开发商业模式就是上面这幅图,在小流程端发请求,常常你得引入额外封装好的SDK,然后你需要在云服务这边配置大批的网络管理产品就可以做出性能、可用性十分好的产品。合作开发人员要关心的内容,从后端、前台一直关心到网络管理这块。

而云合作开发的全新商业模式,只要调用小流程原生的接口,就可以操作最基本的三大资源,而云合作开发背后又有百度云的基础服务作为支撑,本身就高可用、高性能、可扩展,你要关心的事情是大大减少了。

其次是资源管理平台的对比。以前你需要管理云资源,你需要在百度云的面板里,几十上百的产品里找到你需要的产品。

而云合作开发呢,你在小流程合作开发辅助工具里,就可以找到云合作开发的控制面板入口。进入后,我们将你要高度关注的产品,做成两个独立面板供你使用,极为简洁方便。

第三,我们对比一下在小流程端调用资源。以上传文件为例,旧的合作开发商业模式,小流程端,你需要用wx.chooseImage还有wx.uploadFile小流程接口,前台要布署销售业务架构、路由,还有写逻辑上传到百度云的对象存储,你更要考虑这个前台服务的性能与安全,万一用户量峰值很大怎么办,有黑客攻击怎么办。

而云合作开发的例子,则极为单纯,十几行代码,就可以写出安全、性能好的代码上传逻辑!

假设合作开发人员是两个菜鸟,只懂JavaScript基础,对比下来,传统的合作开发商业模式,后端耗时2分钟合作开发,1小时联调,前台架构、逻辑和联调一共8小时,网络管理,要花一整天天数去学,总共要花1142分钟,对比只要写2分钟就能完成的云合作开发商业模式,足足是云合作开发耗时的571倍!

最后,我们来对比在服务端里插入数据。这里的服务端里指的包括有云函数、还有你自己买的服务器。旧商业模式下,小流程端要用两个wx.request发送请求到前台,前台搭建好架构、路由等服务之后,开始写插入数据到百度云MongoDB实例的逻辑,自然也是需要考虑服务的性能与安全。

而云合作开发的新商业模式,十几行代码,就可以合作开发出性能好、安全性高的插入数据逻辑。

假设合作开发人员是两个菜鸟,对比下来,传统的合作开发商业模式,后端要花31分钟进行合作开发与联调,前台要用6小时布署服务合作开发逻辑更要30分钟联调,而网络管理的话从学习到会用大概也得10小时,基本上是云合作开发商业模式耗时的1000多倍。

从代码、耗时等多个方面去对比新旧两种合作开发商业模式,我们可以发现,云合作开发是当然的碾压。

小流程·云合作开发背后的控制技术力量

大家现在知道了无服务合作开发是未来的合作开发新趋势,带有无服务特性的小流程云合作开发带来的各种各样的好处,那么百度云在背后,做了些什么控制技术进行支撑呢?

架构上,两个请求操作从小流程端,通过微信前台,一直到百度云这边的云合作开发服务层,云合作开发服务层调用的那些数据库、存储、云函数,其实都是基于百度云的各种基础服务。在这个请求通路上面,微信会将小流程的用户openid, 小流程appid直接带过来,将用户的信息写到云函数、数据和文件元信息里面,为更方便的权限控制打下基础。

另外,既然是复用了百度云的基础资源,那自然是具备了云资源的特性。比如说存储自动接入了CDN加速, 数据库天然就带有自动备份、无损恢复等功能,云函数有弹性伸缩、多地可用的特性,能响应峰值不同的服务。而云合作开发服务层,我们也做了负载均衡、因此与微信前台进行就近接入,让性能更快。

目前云合作开发正式上线5天(注:9月10日深夜发布,提前布局控制技术讨论会是在9月16日),我们的服务所支撑的API日调用量最大的单个小流程,已经达到1000W+的调用量了,这个调用量是什么基本概念呢?一般只有BAT,一些高频使用的独角兽合作开发的小流程就可以达到这个调用量级。因此90%以上的小流程用我们这个服务都是没有问题的。

推荐实践

讲一项控制技术,除了讲功能、讲底层,其实更重要地说讲怎么去用这门控制技术去实践。接下来,我会介绍一些我们推荐的实践方式,但我只会是点到为止,我们其实更希望社区能基于云合作开发,做出更多更快的实践。

第一点是资源操作的推荐实践。

在小流程端操作资源方面,我们是使用小流程的原生接口进行操作,而在小流程端操作资源,由于安全的考虑问题,基本上操作存储、数据库等的资源只能写用户自己的数据,而读数据则根据规则来判断是否有权限。在服务端操作资源方面,我们使用wx-server-sdk或者tcb-admin-node来处理,前者是基于后者的能力进行了封装。在服务端使用这两个SDK去操作资源,所拥有的权限是管理级的,就是意味着可以操作一切的资源。

左边的图是数据库的权限控制,右边的图是存储的权限控制。这两个控制面板都有各自不同权限的一些推荐的使用场景,大家可以打开控制去读下面每个权限的灰色的解释。

第三点,是数据库的推荐实践。这里以百度乘车码为例,像这种交通的小流程,可能会面对弱网或者无网的情况,合作开发初期为了省事,将大批的配置信息都写在小流程端中。但随著向更多城市的推进,配置文件愈来愈大,小流程的包体积愈来愈大。正好这个时候云合作开发推出了,百度乘车码就采用云合作开发的数据库,将一些不一定要在离线环境使用的配置迁移到云合作开发,另外还采用云合作开发的存储服务来存放静态资源。这就大大压缩了乘车码小流程的体积,为其它新增功能腾挪了空间。

第三点,推荐使用云合作开发的存储存放小流程中所需要的静态资源。因为云合作开发的存储天然自带CDN加速。比如说在控制面版的存储中,文件的详情里获取的下载地址,就是CDN已经加速的地址。

第四点,是云函数的使用。目前云函数暂时不支持过于耗时、太复杂的操作,目前的超时天数为20s,函数包大小控制在20M左右。但其实这也已经能满足超过80%的需求,随著服务的逐步稳定,我们会考虑将那些限制进一步放宽。

云函数另一种用法就是,我们可以将相同的一些操作,比如说用户管理、支付逻辑,按照销售业务的相似性,归类到两个云函数里,这样比较方便管理、排查问题以及逻辑的共享。甚至如果你的小流程的前台逻辑不复杂,请求量不是特别大,完全可以在云函数里面做两个单一的微服务,根据路由来处理任务。

比如说这里就是传统的云函数用法,两个云函数处理两个任务,高度解耦。

第三幅架构图就是尝试将请求归类,两个云函数处理某一类的请求,比如说有专门负责处理用户的,或者专门处理支付的云函数。

最后一幅图显示这里只有两个云函数,云函数里有两个分派任务的路由管理,将不同的任务分配给不同的本地函数处理。

云函数还有一种用法就是,可以作为中间路由,然后将appid,openid,转发给原有的服务。这里以百度相册为例。具体内容怎么操作呢。比如说百度相册之前将评论功能接入了云合作开发,但一些敏感操作,像删除、编辑评论,这个请求发送到云函数,然后云函数会将用户信息转发给相册原本的前台,然后再将该用户是否有权限返回来告诉云函数,如果有权限,就在云函数里删除评论。

最后,如果你们想在云函数调用AI服务,还有一些微信相关的操作,可以使用我封装的这两个SDK。第三个image-node-sdk覆盖面比较全,覆盖了全部的百度云智能图像服务,下面的wx-js-utils,也提供更多了微信支付、模板消息、用户信息获取等几个常用的接口。

可以高度关注我的微博或者Github获取最新云合作开发的资讯或者控制技术资料。