当前位置: 首页 > news >正文

Serverless:云时代的软件架构核心思想

作者:bluedavy

来源:HelloJava

Serverless绝对是这两三年来业界最火的词(UC Berkley写的一篇新的Serverless的观点的文章里有Serverless的搜索热度和当年MapReduce最热的时候一样),在AWS这几年的reInvent大会上也是绝对的主角,各种挂着Serverless xx的产品也层出不穷,但是估计你问十个人,会有十种解读,我认为目前Serverless更主要的是一种思想,但具体怎么实践还在探索期,这篇文章就来讲讲我认为的Serverless。

AWS眼里的Serverless

讲自己的观点之前先引用一些AWS的观点,毕竟目前Serverless主要是AWS在引领:

"大概12年之前,我们深知云将给软件带来翻天覆地的变化,我们创造了AWS。一直以来AWS希望与软件开发者密切合作,打造出一个现代化的软件开发框架。而不是告诉客户,你们需要什么工具。在AWS的信念中,我们认为真正知道软件应该如何开发的只有一个人,就是客户本人。"


“现代化的架构是使用AWS的服务、Lambda的功能,把它们连接在一起。没有中间层、没有应用层,也没有数据库层,它是一系列web服务连接在一起,由功能连接在一起,无需服务器,而安全、可靠性、规模、性能、成本管理这些事项由AWS做好”。

这两段话是AWS的CTO在2018年8月中国的AWS Summit上讲的,在AWS的观点里,我认为Serverless不是指FaaS,而是指上面讲的这个现代化架构。

"Everyone wants just to focus on business logic."

这句话是在刚过去不久的AWS reInvent 2018大会上讲到的,这句话其实对应了前面的现代化架构的价值点。

从上面这些引用的观点,我们能看到对于AWS而言,并不是FaaS或者说Lambda==Serverless,而是很多的东西组合在一起才是Serverless,它的最大价值则是让使用者能够just to focus on business logic,而要做到这样的效果其实是需要业务系统的架构演进到AWS说的现代化架构。

UC Berkley一篇关于Serverless观点的文章

除了主导者AWS外,UC Berkley最近也发表了一篇关于Serverless观点的文章:"Serverless Computing: One Step Forward, Two Steps Back",大家可以点击阅读原文来看这篇文章,文章里首先阐述了下Serverless:

"As a result, cloud providers are quick to emphasize that serverless is not only FaaS. It is FaaS supported by a 'standard library': the various multitenanted, autoscaling services provided by the vendor. In the case of AWS, this includes S3 (large object storage), DynamoDB (key-value storage), SQS (queuing services), SNS (noti- fication services), and more. This entire infrastructure is managed and operated by AWS; developers simply register FaaS code that uses these services and receive 'pay-as-you-go' bills that scale up and down according to their storage and compute usage."

这个观点和前面说的FaaS!=Serverless是一个意思。

关于One Step Forward的观点为:

“By providing autoscaling, today’s FaaS offerings take a big step forward for cloud programming, offering a practically manageable, seemingly unlimited compute platform.”

可以看到这里的观点是Serverless带来的主要是云资源的弹性的使用。

关于Two Steps Back的观点为:

“First, they painfully ignore the importance of efficient data processing.”

这个观点指的主要是他们认为Function的情况下,每个Function是独立的,Function之间的交互是通过持久或临时的存储、事件驱动来完成,导致了完成交互的时间比以前慢了很多很多。

“Second, they stymie the development of distributed systems.”

这个观点指的主要是通常分布式系统会依赖很多的类似leader election协议、数据一致性、事务机制等,而这些在目前的FaaS类型的平台里是很难去实现的。

我眼里的Serverless

看到Serverless现在的状况,太像当年的SOA时代了,我在07年加入淘宝做服务化,那几年SOA思想满天飞,但真的要开始做服务化的时候,会发现完全不知道该怎么做,因为压根就没有地方定义清楚什么是服务化,用什么框架来开发服务化的业务系统,于是当年淘宝完全是自己摸索,做了HSF来作为服务化的开发框架,演进形成了经典的Service Provider/Service Consumer、Soft Load Balance服务框架结构,再后来又做了各种工具来满足服务化后的Tracing、排查问题、服务治理等诉求,服务化现在基本成为了大部分业务系统的核心架构思想,它解决了超百人规模的研发团队协作效率问题、以及单体系统的水平伸缩问题。

软件发展到今天,多数企业的业务系统开始越来越复杂化,开发一个业务系统需要掌握和关注的知识点越来越多,并且系统中出现了越来越多的非业务的基础技术系统,例如分布式cache等等,在这种情况下,研发的门槛在上升,效率在下降,而Serverless思想我觉得很重要的就是用于解决研发门槛和效率的问题,让业务系统研发能更专注的关注在业务逻辑上(和AWS说的现代化架构的观点一致),而不仅仅是按量付费。

那么Serverless思想怎么来解决研发门槛和效率的问题,我觉得核心的点就在于把业务系统开发时需要用到的各种基础技术产品都隐藏起来,并将要用到的一些基础技术进行归纳抽象,例如存储、服务交互,这样对于开发人员来说要学习的东西可以大幅减少,并且也不用管一堆依赖的基础技术产品的运行状况等,如果能做到这样呢,意味着在开发业务系统时可以更加聚焦的纯粹关注业务逻辑就好,目前看到的各种FaaS平台思想上其实会很像这种,但我觉得做的很不够。

为什么我说这是云时代的软件架构思想呢,因为Serverless这种思想我觉得只适用于云时代,要把一堆的基础技术产品隐藏,并提供丰富的选择,这个基本只有在云时代才可能做到,在以前各自部署业务系统的情况下,这个模式很难去做到和规模化,但在云时代,这就完全有可能了,其实可以认为现在已经在使用一些云存储服务、中间件服务、数据库服务的业务系统或多或少已经在进入Serverless时代,只是由于目前多数一方面还很难做到高度抽象,另一方面很难做到完全不用管依赖的这些基础云服务,以及云服务的选择还是不够丰富,导致离Serverless的价值还有距离。

可以依靠强大的云厂商的基础技术团队(当然,这个框架一定不能是lock-in某家云厂商的,并且要能非常容易就切换,这个只要框架强大,就可以倒逼各云厂商支持事实标准)。

Serverless为什么到现在还没怎么流行起来呢,我觉得非常大的原因就是像复杂的企业业务系统是完全没办法基于目前这样简单的FaaS平台方式来实现的,这个观点和UC Berkley那篇文章里的The Second Step Back很一致,目前多数用Serverless的用户都只是把它用于一些非关键场景里,一个架构级的思想、框架要成为主流,必须是应用到企业业务系统的主流程中,所以怎么结合Serverless的思想、目标落地到企业业务的核心系统中,展现价值,并沉淀出Serverless开发框架(就像阿里当年做服务化,沉淀的HSF、Dubbo、SOFA),那么Serverless才能成为新一代的业务系统的主流架构,我很坚信这一天不会太远,所以我是强烈推荐各位开发者们从现在开始就应该多学习和试用Serverless,按照这个标准,能看出目前市场上其实完全没有类似的东西(iron.io在做的open source serverless computing在探索支持request/response这种类似在线业务系统的典型结构方式),架构级的演进机会可不是年年都有,甚至是5年/10年都不一定能碰到一次,所以这也同样意味着这是个巨大的机会,几年后再来看看这篇文章,这个市场是谁家的,一定会很有意思。

结合Serverless、还有之前各种的软件架构发展来看,其实软件架构的发展很多时候都在围绕着研发门槛和效率(最典型的就是各种基础技术产品:TensorFlow等等,让业务研发更聚焦业务逻辑),并推进形成更大规模的社会协作和分工,所以很多的技术创新如果能围绕好这个本质问题,是一定能推进软件架构发展的。

References

  1. "亚马逊CTO 沃纳·威格尔:AWS不是技术导向而是客户导向" https://www.iyiou.com/p/79020.html

  2. "Serverless Computing: One Step Forward, Two Steps Back" https://arxiv.org/pdf/1812.03651.pdf

延伸阅读

1

长按二维码
了解及购买

《深入浅出Serverless技术原理与应用实践》

作者:陈耿

微软全球黑带技术专家撰写。详细介绍Serverless 技术原理、应用架构,以及容器、微服务、PaaS、FaaS等与之相关的技术主题;

深入讲解公有云和私有云下的各种主流Serverless平台、架构和工具的原理和使用细节,如AWS Lambda、Azure Functions、OpenWhisk、Kubeless、Fission及OpenFaaS等。

2

长按二维码
了解及购买

《Serverless架构》

作者:卡格特·古尔图克

译者:周翀 栾云杰 姜明魁

本书由eBay资深软件工程师撰写,全面、系统阐述无服务器架构设计的基础知识、实用技术及实践,是快速掌握无服务器架构的入门指南。通过本书,你不仅可以学到AWSLambda功能,还可以看到如何通过Lambda函数将其他AWS服务粘合在一起。你将通过CRUD应用的例子,学到如何轻松构建可扩展的软件系统。

3

长按二维码
了解及购买

《Service Mesh实战:基于Linkerd和Kubernetes的微服务实践》 

作者:杨章显

作者是思科的高级工程师,是国内Service Mesh领域的早期实践者,是的架构师和微服务技术专家。  详细讲解Linkerd的配置、部署、管理、运维和监控,以及它的工作原理,对理解其他Service Mesh产品也有帮助。

你与世界

只差一个

公众号

相关文章:

  • 新书推荐 |《C# 7.0本质论(英文版)》
  • 新书推荐 |《机器学习精讲:基础、算法及应用》
  • 1/10个iPhone Xs = 英伟达最便宜AI计算机,这是唯一的“核弹”?
  • 新书推荐《嵌入式实时操作系统:RT-Thread设计与实现》
  • 新书推荐 |《硅谷设计之道:探寻硅谷科技公司的体验设计策略》
  • 叫板 Android 开发!跨平台应用开发神器 Flutter 又添开源插件!
  • AI大牛推荐的八本必读NLP书籍(建议收藏)
  • 新书推荐 |《HTML 5与CSS 3权威指南(第4版•上下册)》
  • 以女大学生相亲为例,给你讲明白数据挖掘算法
  • 新书推荐 |《网络空间安全防御与态势感知》
  • 新书推荐 |《Hyperledger Fabric技术内幕:架构设计与实现原理》
  • JVM核心知识体系
  • 新书推荐 |《Kubernetes进阶实战》
  • 福利丨45本好书等你来领!
  • Python 编程 5 年后,我转向了 Go!
  • 收藏网友的 源程序下载网
  • 2017年终总结、随想
  • CSS盒模型深入
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • k个最大的数及变种小结
  • mysql 5.6 原生Online DDL解析
  • PHP 的 SAPI 是个什么东西
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端
  • 移动端解决方案学习记录
  • 鱼骨图 - 如何绘制?
  • HanLP分词命名实体提取详解
  • # 安徽锐锋科技IDMS系统简介
  • $NOIp2018$劝退记
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (力扣)1314.矩阵区域和
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (篇九)MySQL常用内置函数
  • (三)uboot源码分析
  • (四)Android布局类型(线性布局LinearLayout)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)菜鸟学数据库(三)——存储过程
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net/c# memcached 获取所有缓存键(keys)
  • /usr/bin/env: node: No such file or directory
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [AIGC] Redis基础命令集详细介绍
  • [Android Studio] 开发Java 程序
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BT]BUUCTF刷题第4天(3.22)
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]