继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

一个原创 FaaS 架构

慕码人8056858
关注TA
已关注
手记 1271
粉丝 350
获赞 1323

引子

“当2006年校内网的用户量暴增后,王兴没有钱增加服务器和带宽,只能饮恨将校内网卖给千橡互动集团 CEO 陈一舟,后者从日本软银融得4.3亿美元,并将校内网改为人人网,2011年人人公司上市。”——摘自百度百科词条“王兴”。

这是关于王兴早年创业时的一则特别悲壮的故事,几乎是一分钱难倒英雄汉的典型案例。即便人人网已经从70亿美金的市值下降到10亿左右,也至少比当年的服务器和带宽高几万倍吧!如果当初校内网挺过了那个难关,也许今天我们就可以在“中国脸书”上一边聊天一边游戏一边订外卖,好不惬意。

然而用工程师视角重新审视这个问题,“用户量暴增”的解决方案怎么可能只是“增加服务器和带宽”?也许媒体所能理解的技术难关实在有限,也许它只是冰山之一角。

业内解决这个问题的办法只有一个:分布式架构。无论是小规模的拆热点,还是大规模的重建微服务,最终都会得到一个或大或小的分布式系统。从来没有人通过成千上万倍的复制原系统能获得相应计算力,那会像一个没有信号灯的大都市,交通一定直接瘫痪成停车场。那么问题就来了,分布式技术一直牢牢掌握在“集团军”手里,民兵级创业者完全没有能力应对。从这点来看,当时的校内网除了卖给更大的资本,真的没有更好的出路。

可是,如果他们能再等 10 年,也许会有惊天大逆转。“用户量暴增”在今天的解决方案已经真的可以只是“买更多的服务器和带宽”那么简单了。请注意“可以”这个词,我的意思是,如果仅仅使用目前市场上的云服务方案的话还远不够,在此基础上再加上我的这套 FaaS 解决方案,他们真的可以用民兵打世界大战了。

FaaS

什么是 FaaS?可能很多人听说过 IaaS、PaaS、SaaS 等等,FaaS 是近两三年新提出来的一种平台级服务方式:Function as a Service,让“函数”成为在线服务。也有人称之为“功能即服务”。这种表述方式有些洋气,换一种直白些的说法也许更好理解一些:这是一套服务化的分布式系统(as a Service),服务商已经把这套分布式系统中的某些层面的计算能力提炼成了可供用户直接使用的服务,比如 I 表示 Infrastructure(基础设施),也就是服务器、网络、机房等硬件设施被封装成了可直接使用的服务;P 表示 Platform(平台),也就是程序的运行环境;S 表示 Software(软件),一些在线工具比如 Microsoft Office Online。而 Function as a Service 略有区别。目前最知名的 FaaS 服务商有 Google Cloud Functions、Amazon Lambda、Ali Function Compute、Microsoft Azure Function 等,把用户提交的函数包装成可按需动态伸缩的在线服务。但是用户函数中对其他服务的调用任然与传统方式一模一样。这些平台可以理解成在 PaaS 基础上,把用户函数注册到约定的运行环境里构成在线服务,帮助用户省去了构建 Server 的环节,因此也被称作Serverless。

纵观分布式架构的发展历程,出现这样的趋势是必然的。早期,构建分布式系统就像从加工硅晶体开始制造计算机一样,每一块电路板、每一个焊点、每一个元器件都要精密计算仔细设计,工程及其浩大复杂。二十多年来,在互联网浪潮的推动下,分布式架构被不断抽象、提炼,如今人们终于不必关心底层细节,比如交换机、路由器、主机、数据库、甚至电源、空调、机房等等,都可以交由基础设施团队或第三方服务商去整合,形成 IaaS 平台;借助虚拟化技术,我们甚至不必关心计算力的动态分配,只要小心的设计好系统的不同层面,为服务划分好边界,剩下的都交给 PaaS 平台去处理,这时系统结构和业务架构达成了对等映射。但是系统是离散的,业务架构也是离散的;前者是我们期望的,而后者却不那么友好。对于应用系统的设计者来说,离散意味着更多的细节,更多的成本,更多的风险点。当服务平台上升到函数层次,就已经进入到了业务层,离散的业务架构很有可能被整合起来,这意味着分布式系统的门槛将再一次降低,很有可能带来生产力的再次飞跃。

BND

然而 Serverless 距离真正的 FaaS 可能还有点远,至少还不完备。我认为 FaaS 应该至少包含两层意思,在把用户的函数包装成在线服务的基础上,FaaS 平台上的一切服务都应该以函数形式存在,也就是说可以用函数调用的方式访问该服务。一旦做到这点,就有可能让构建分布式系统变得象写程序那么简单快活——虽然还达不到面向对象的境界,但至少函数式编程是能做到的,去年我就做了这么一个原型框架 BND。

迭代过程真的象孕育一样,从一个简单的概念,逐渐发展,逐渐拆分模块,每一次重构都在概念层次上更上一个台阶。一路上指引我的,是一个很简单的初心:让小微团队甚至独立开发者无障碍零成本开发和维护大规模高可用在线应用系统。就像王兴说的那样:“科技是普惠的,科技创新的根本目的是要服务于大众。” 以下是 BND 的四大技术特点:

  1. 一种新式通信方法(专利申请中,暂不便公开)



  2. 去中心化分布式架构

    webp

    去中心化分布式架构



  3. 零成本的服务拆分和组合

    webp

    零成本的服务拆分和组合



  4. 极简 MVC

    webp

    极简 MVC

基于这样的技术框架,用户提交的应用在 PaaS 平台的支持下可以在运行时被按需动态拆分成可动态伸缩的分布式系统,而用户并不需要关心这一点。对于用户来说,服务 1 个用户和服务 10 亿用户的应用系统几乎是一样的,只需要关心如何创造出更有价值的业务。

中台

分布式系统的归宿也许就是中台。三年前马云从 SuperCell 学来的经验既有偶然性,也是一种必然。凑巧的是,FaaS 是目前为止最完美的中台解决方案,确切的说是构建“业务中台”的最佳方案。理由相对比较直接:FaaS 最贴近甚至已经切入了业务层。

不妨反过来站在用户的角度看。如果你的背后有一个强大的中台,作为业务开发团队,你更希望它是一堆冰冷的接口说明文档,还是一组随时处于运行时的函数?以及你将会怎样设计可被纳入中台的业务系统——这句话问的也许很外行,业务和中台的边界决定了业务系统不可能轻易被纳入中台;但是中台系统也是在不断演化的呀,这种演化正是对源源不断的业务需求的沉淀;然而中台系统的持续演进,将比业务系统的迭代更加痛苦,因为每一个动作都会产生牵一发而动全身的影响——幸好我有一个应对系统变化的法宝——零成本服务拆分和组合。

技术细节和案例

因为涉及到一些暂时不便公开的信息,比如专利,很抱歉暂时只能给出概念性的说明,我仍在努力中,敬请期待。

尾声

如果说分布式架构是大规模高可用系统中负责动力和负载的动态调配的变速箱,那么 FaaS 就让它进入了无级变速时代。这确实是一个最好的时代,真正有价值的创意和业务将不再受技术壁垒的限制;这也确实是一个最坏的时代,为什么要让一切都跑得如此之快。欢迎大神们指教。



作者:Lyall
链接:https://www.jianshu.com/p/c2d722488d9f


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP