大白话说serverless:关于无服务架构

Posted 大魏分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大白话说serverless:关于无服务架构相关的知识,希望对你有一定的参考价值。

前言


本文仅代表作者的个人观点;

本文在书写过程中,请教了我的同事kylin,在此表示感谢;

本文的内容仅限于技术探讨,不能作为指导生产环境的素材;




一、Serverless是什么?


Serverless是什么?百度一下能搜出一大把介绍和广告,其本质是什么:

看不懂?


百度上的东西,其实我也看不懂。


在看了很多篇英文博客之后,加上最近补了一些Java EE的知识以后,我大致理解了Serverless的概念了。


Serverless中的server,指的是不是X86物理服务器,指的是App server,也可以叫EJB container,说简单点,就是传统WAS、Weblogic、JBoss的中间件。


所以,serverless,从字面上理解,就是要摒弃掉app server。

很荣幸,我最近正在看的JavaEE的内容,就是serverless要干掉的技术。


在搞清楚为啥要去app server之前,我先搞清楚什么是app server。



二、app server的本质是什么?


红帽的app server的名称叫JBoss EAP。它以前还有个名称,叫JBoss EJB container,听起来很拉轰。


这又带来了一个问题,什么叫EJB。


企业级软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。


J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。


上面这段话,听起来很高大上,好比这个样子:

大白话说serverless:关于无服务架构


别着急,我们来逐条剖析:


剖析1:所谓:"业务逻辑" 

我们注意到在EJB 的概念中主要提到的就是"业务逻辑"的封装,而这个业务逻辑到底是什么?说的那么悬乎,其实这个所谓的"业务逻辑"我们完全可以理解成执行特定任务的"类"。



剖析2:所谓:"将业务逻辑从客户端软件中抽取出来,封装在组件中……运行在一个服务器上"

既然我们知道了"业务逻辑"的概念就是执行特定任务的"类",那么,什么叫"从客户端软件中抽取出来"?其实,这个就是把原来放到客户端的"类",拿出来不放到客户端了,放到一个组件中,并将这个组件放到一个服务器上去运行。


 

变成大白话就是,"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。EJB 就是将那些"类"放到一个服务器上,用C/S 形式的软件客户端对服务器上的"类"进行调用。


所以,用大白话说:(从java的角度)app server实际上就是运行jar包的一个软件平台。这些jar包中,包含了很多java的类。这些类可以被客户端远程或者本地调用。将jar运行到app server的好处,是实现了应用的分布式。


脱去了马甲,他变成了这个样子:

大白话说serverless:关于无服务架构

实际上App server是一个软件组件,提供必要的运行时环境和基础结构来托管和管理Java EE企业应用程序。 应用程序服务器提供诸如并发性、分布式组件架构、多平台可移植性、事务管理、Web服务、数据库对象关系映射(ORM)、异步消息传递以及企业应用程序安全性等功能。


关于Java SE和EE的区别,这是个老生常谈的话题:

大白话说serverless:关于无服务架构

用大白话说:JavaSE应用,我们可以通过java -jar直接运行;而Java EE应用,需要部署到app server上,才能运行。



JBoss的app server方案是EAP。它能提供的功能如下:

大白话说serverless:关于无服务架构



三、serverless的核心概念


去掉了App Server,剩下的就是一堆java class和调用的方法。那么他们之间的调用和协调如何实现?


通过serverless的方案实现。也就是,通过serverless的方案,替代传统的app server的功能(FaaS)。


谈到serverless,还有具体的两种方式:BaaS和FaaS。


BaaS和PaaS的区别在于:PaaS需要参与应用的生命周期管理,BaaS则仅仅提供应用依赖的第三方服务。典型的PaaS平台需要提供手段让开发者部署和配置应用,例如自动将应用部署到Tomcat容器中,并管理应用的生命周期。BaaS不包含这些内容,BaaS只以API的方式提供应用依赖的后端服务,例如数据库和对象存储。BaaS可以是公共云服务商提供的,也可以是第三方厂商提供的,

我们举个例子,在典型的PaaS平台,Openshift中,我们部署一个tomcat的web sever,将war包拷贝到容器中企业运行;不用的时候,将pod停掉(将rc设置为0)。在这个过程中,我们对应用进行了全生命周期的管理,我们叫PaaS。

BaaS(后端即服务:Backend as a Service)公司为移动应用开发者提供整合云后端的边界服务。例如AppCan,它可以提供的服务有:

  • 信息推送。为androidios终端分别提供基于MQTT和APNS技术的可靠高效信息推送能力,并保证推送信息到达的即时准确。

  • 数据库。为移动应用提供了库、表、记录等级别的DDL和DML操作接口,支持多表关联处理和数据批量处理,提供记录导入、导出和检索管理能力,交付灵活的权限控制手段。

  • 文件存储。为移动业务应用提供灵活的文件存储、上传、下载服务,支持存储配额操作接口,提供后台统计分析手段。

  • 第三方接入。为企业业务应用提供第三方平台(新浪微博、微信、QQ)的接入能力,支持接入授权,快速降低应用注册门槛,方便用户快捷登录


我们可以将BaaS看作PaaS的一个子集,即使用第三方提供的PaaS服务。

在serverless中,FaaS是它的核心。而FaaS,正是上文提到的,通过新的技术,去掉传统app server的功能。那么,将传统的app server去掉以后,应用怎么运行呢?

这就需要看一下serverless的方案了。


四、serverless的方案

Serverless 在当前市场上主要有开源和闭源两类实践,如下表:

大白话说serverless:关于无服务架构

  • 闭源的方案以 AWS Lambda 为代表,它以服务的方式呈现,在开发者一端,开发者参与到服务的构建,通常实现某特定方法,而在服务器端则需要依赖广泛的 AWS 上服务,如 API 网关、存储、数据库等

  • 开源的方案以 Apache OpenWhisk 为代表,这种实现主要是围绕容器对应用开发标准化、规范化、自动化的特性去打造 Serverless,目前它的社区活跃,传统应用开发厂商积极参与,发展势头迅猛


在开源领域,Apache OpenWhisk是很火的。用大白话说,就是用Apache OpenWhisk 替代传统的app server的功能。


Serverless和微服务的区别是什么呢?

从笔者的角度看,微服务是将一个单体应用,拆成多个小的模块,每一个模块负责一个功能,各个模块通过zuul(spring cloud)串起来。而serverless,可以对一个小的功能模块接着拆,最终可以拆成java类的方法,所以serverless的最高境界-FaaS的F,指的就是类的方法、功能。或者,我们可以将FaaS理解成微服务的高阶阶段。

大白话说serverless:关于无服务架构


我们举个例子,一个传统的三层应用:

大白话说serverless:关于无服务架构

客户端的访问,通过浏览器:html + javascript,应用运行在app server上,连接后端的数据库使用JPA。

将这个架构改造成serverless,将会变成什么样子呢?

看起来好像更复杂了?没关系,解释一下就明白了。

大白话说serverless:关于无服务架构

组件1表示:新的架构,删除了原有架构的认证组件,采用第三方的BaaS服务。如使用Auth0。这里,还得简单介绍一下Auth0。

Auth0是一个“身份即服务”创业公司,同时也是重度的云服务用户。  Auth0提供给了程序员和公司构建模块,使得保护应用程序变成一件简单的事,开发者不需要成为安全领域的专家,即可以轻松构建安全的应用。我们可以将任何应用(基于任何栈的任一种语言)连接到Auth0,也可以定义你想要使用的身份提供者(你想怎样让用户登录)。我们可以基于应用程序所使用的技术来选择相应的SDK(或者调用我们的API)来连接你的应用。每次用户试图登录,Auth0都会验证他们的身份并传回一些应用程序所需要的信息。

大白话说serverless:关于无服务架构

组件2:也提供BaaS提供:我们允许客户端直接访问我们数据库的一个子集(用于产品列表),它本身完全由第三方托管(例如,Google Firebase)。我们可能有不同的安全配置文件客户端以这种方式访问数据库,而不是访问数据库的服务器资源。


组件3:此前app server:Pet Store 中的某些业务逻辑,抽取出来,放到客户端内,例如:跟踪用户会话、了解应用程序的UX(UX是User experience的缩写,中文翻译为:用户体验。UX指用户体验,UX设计指以用户体验为中心的设计)结构,从数据库读取数据并将其转换为可用的视图等。由此,客户端正在成为单页应用程序。


组件4:我们可能需要保留一部分可客户体验相关的功能在app server上。这种通常是它的计算密集型或需要访问大量的数据。在我们的宠物商店应用中,典型的就是“搜索”。在这种情况下,我们也不需要像改造之前的架构,长期保留app server,我们可以通过API网关响应HTTP请求。这样也能实现FaaS。


组件5:我们用另一个单独的FaaS功能替换“购买”功能。由于这个功能比较重要,出于安全原因选择保留在服务器端,而不是在客户端实现。因此和搜索功能一样,它也被API网关管理。


我们对比一下新旧架构的区别:


在旧架构中,所有访问流量、控制和安全都由app sever管理。在新的架构中,app server,每个组件都扮演着更具架构意识的角色。以这种方式构建的系统通常“更灵活,更易于改变”。



 四、serverless在私有云中的技术实现


serverless在私有云中的技术实现:Apache OpenWhisk on Openshift。


其架构如下:

大白话说serverless:关于无服务架构

Apache OpenWhisk 架构分三个核心:

  • 以 API 网关为中心的服务治理 - 云原生应用包括 Serverless 将一切服务化、与传统架构相比,对服务治理的需求更高,现代应用开发需要着重考量服务分类、流量控制、多级安全、记费、API 文档等。

  • 以 Kafka 为中心的分布式消息处理层 - Kafka 在现代应用架构中的作用与日俱增,不管是分布式系统,流数据处理,业务集成、数据整合,企业数据湖构建等领域

  • 以文件数据库 + 内存计算为中心的数据持层 - CouchDB 是一个文件数据库,基于 NO-SQL key/value 的实现方式,但在内存计算层有比较好的实践

  • 以容器为中心的计算层 - 容器在计算层的优势在于可细粒度利用计算资源,可标准化计算单元,这些优势降低应用架构的复杂度,增强了应用架构的敏捷性


大白话说serverless:关于无服务架构

我们简单介绍一下工作原理:

事件:触发器(Trigger) - 可能触发一个活动的事件,例如,当一个叫贝克汉姆的人加入到聊天室 (newPersonJoin)


方法:一段短生命周期的代 码处理一个事件,例如,一个 Javascript 输出 "hello! welcome 贝克汉姆,你好帅!"


而方法的运行平台,就是Apache OpenWhisk on Openshift的pod里。


细心的朋友在看上图的时候,会发现JBoss少了个组件:EAP,没错,serverless就是为了去除EAP功能的,放大点看:

大白话说serverless:关于无服务架构


所以说,Apache OpenWhisk是将一堆很潮的技术攒到一起,替代了传统app server干的事情。很关键的一点是,Apache OpenWhisk 与当下基础架构中最火的容器有了联系,赋予了它更强的生命力与关注度。也就是说,最终OpenWhisk在Openshift上,将会以一堆pod呈现:

大白话说serverless:关于无服务架构


具体实验内容,请参照如下链接:

https://learn.openshift.com/serverless


所以说,serverless与微服务、API管理并不冲突;相反,这三个部件一起,组成了完整的私有云serverless解决方案:


参考文档:

https://github.com/apache/incubator-openwhisk-devtools/tree/master/java-action-archetype

http://ksoong.org/docs/content/jboss/faas/openwhisk.html?from=timeline&isappinstalled=0

https://martinfowler.com/articles/serverless.html

https://www.cnblogs.com/nineep/p/6828469.html

http://www.yunweipai.com/archives/16746.html

https://www.csdn.net/article/2014-12-24/2823285


魏新宇

  • "大魏分享"运营者、红帽资深解决方案架构师

  • 专注开源云计算、容器及自动化运维在金融行业的推广

  • 拥有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鉴定级)等管理认证。

  • 拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技术认证。



以上是关于大白话说serverless:关于无服务架构的主要内容,如果未能解决你的问题,请参考以下文章

Serverless无服务应用架构纵横谈

深入理解无服务器架构(Faas/Serverless)

什么是Serverless架构

Serverless(无服务器架构)初识篇

干货!互联网公司都在研究的无服务器架构(Serverless)!

对接Serverless:从了解无服务器架构原则开始