周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless
Jerry一直认为,金庸的《天龙八部》里的武学建模已经有点脱离传统武侠小说的范畴了,像已经走上玄幻道路的灵鹫宫“八荒六合唯我独尊功”,以及杀伤力足够能被视为现代激光武器的鼻祖,大理段式的“六脉神剑”之类。而另一部经典的射雕三部曲里很多的武功设定则中规中矩,其中周伯通自创的七十二路空明拳,是金老独具匠心的创造之一。
周伯通被黄药师困在桃花岛,宅了十余年,从《道德经》中参悟到「以虚击实」,「以不足胜有余」的武学(编程)思想。《道德经》有云:「天下莫柔弱于水,而攻坚强者莫之能胜,其无以易之。弱之胜强,柔之胜刚,天下莫不知,莫能行。」

而这套拳力“若有若无”的武功,使用在生产环境最经典的一幕,就是在百花谷和杨过的“黯然销魂掌”PK的时候:
周伯通生性好武,虽在百花谷隐居,每日仍是练功不辍,但以他如此功力,普天下哪里找对手去?这时见杨过愿意比武,自是心痒难搔,跃跃欲试,心想若再多言,只怕他忽而又不愿动手了,岂不是错过良机?当下左掌一提,喝道:“看拳!”右手一拳打了出去,使的是七十二路的“空明拳法”。
杨过左手还了一掌,猛觉得对方拳力若有若无,自己掌力使实了固然不对,使虚了也是极其危险,不禁暗暗吃惊,当下展开十余年来在狂涛怒潮中所苦练的掌法还击出去。

无独有偶,在车田正美笔下的《圣斗士星矢》里,也有很多像周伯通一样,拥有一套招式若有若无的好手。如果按照动漫里越晚出场的人物实力越强的设定,那么最强的人物无疑是Jerry这张卡片里秀的,冥界三巨头之首,天贵星的狮鹫米诺斯,第一域的最高主宰者。


米诺斯的绝技星尘傀儡线,能够用一根根看不见的丝线将对手的身体缠绕起来,从而使其像一具傀儡一样,只能按照自己的意志来活动,是一种非常可怕的招式。在对手眼中,这些由米诺斯小宇宙形成的丝线若有若无,根本无从防御。米诺斯最高光的战绩,就是一度全面压制在黄金圣斗士中实力位居中上游的加隆,后者尽管拥有威力“能让星星粉碎”的银河星爆,但是在米诺斯的星尘傀儡线面前,毫无反击的机会。


同样,Jerry第一次接触SAP Kyma基于Serverless架构的Lambda Function时,感受同周伯通和米诺斯的对手一样有些疑惑:名字都叫Serverless了,没了服务器,那我的函数代码到底运行在什么地方的?
比如在最近Jerry写的一系列SAP Kyma的文章里介绍过,我在Kyma上创建了一个名为zjerry-lambda的函数,基于nodejs8:

可以直接在Kyma的测试控制台里调用这个Lambda Function:

Serverless的字面意思,不是暗示我们没有服务器了吗?那么这段函数代码到底运行在哪里的?
米诺斯的星尘傀儡线,在冰系法师,百鸟座冰河的冻气之下,终于被冻结成肉眼可见的丝线了。同样的,因为SAP Kyma是基于Kubernetes的,因此我们还是可以通过Kubernetes提供的一些工具,来探索SAP Kyma上Lambda Function运行原理的一些蛛丝马迹。跟Jerry一起看看吧。

首先找到zjerry-lambda函数创建后,对应生成的pod,把名字抄下来:zjerry-lambda-86668f75d4-pfbk6

使用kubectl的交互式参数-ti,进入这个pod内部:
kubectl exec -ti zjerry-lambda-86668f75d4-pfbk6 -n ctu-demo -- /bin/sh

进入之后,查看进程列表,发现了node kubeless这个进程,Jerry顿时觉得有点眉目了:

看样子,SAP Kyma的Lambda Function是通过一个node进程执行的。查看一下这个pod里都有哪些文件:

打开kubeless.js看看里面的内容:

如果您是一位nodejs开发人员,看到上面Jerry高亮的红色内容,一定会恍然大悟。SAP Kyma的Lambda Function,其实运行在对应的Kubernetes pod里启动的express应用框架上。
Express的依赖定义在pod内部的package.json里:

而待执行的Lambda Function逻辑,通过环境变量FUNC_HANDLER进行注入,在Jerry这个例子里,函数体名称为main:


在Lambda Function的Serverless框架,即kubeless.js运行时,会从pod内部的kubeless这个文件夹里,找到应用开发人员编写的Lambda Function,加载并运行。
大家可以看到,Jerry红色高亮的位于pod内部的handler.js, 其内容就是Kyma控制台里编写的函数体。

至此,SAP Kyma的Lambda Function实现,在Jerry眼中没有任何神秘可言了。回到Serverless这个术语本身,并不意味着整个场景里不再需要服务器的参与,而是服务器的这个关注点,在Serverless架构下,已经从应用开发人员的视角中隐藏起来罢了。
感谢阅读。
更多阅读
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless的更多相关文章
- SAP云平台和第三方CRM解决方案(火锅)互联
光看封面配图,这篇文章很容易被误认为在讲成都的美食之一:火锅. SAP成都研究院坐落在被联合国教科文组织授予过"美食之都"称号的成都,所在的天府软件园,半径1公里左右星罗棋布着很多 ...
- 当ABAP遇见普罗米修斯
Jerry每次在工作场合中同Prometheus(普罗米修斯)打交道时,都会"出戏",因为这个单词给我的第一印象,并不是用go语言实现的微服务监控利器,而是名导雷德利·斯科特(Ri ...
- 【Other】希腊诸神大全-中英文名称
希腊诸神大全-中英文名称 希腊诸神的名字_百度搜索 希腊诸神_百度百科 希腊神话人物名字大全_极客百科 希腊神话人物名称大全 希腊神话中的人物名称大全 希腊神话即口头或文字上一切有关古希腊人的神. ...
- SAP成都研究院CEC团队三巨头之一:M君的文章预告
国人总倾向于把特点或者作用类似的人或物放在一起比较并做出排名,于是就有了许多"某某某三巨头"的称谓. 最举世闻名的莫过于二战三巨头:丘吉尔,罗斯福和斯大林. 还有陪伴咱八零后童年时 ...
- 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫
定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...
- PI控制器的由来
20世纪20年代初,一位名叫尼古拉斯·米诺斯基(Nicolas Minorsky)的俄裔美国工程师通过观察舵手在不同条件下如何驾驶船只,为美国海军设计了自动转向系统. 根据Wikipedia.org, ...
- 高射炮打蚊子,杀鸡用绝世好剑:在SAP Kyma上运行UI5应用
国人在表述"大材小用"这个场景时,总喜欢用一些实物来类比,比如:高射炮打蚊子. 英国QF 3.7英寸(94mm)高射炮,战斗全重超过9.3吨,全长近5米,最大射程约18公里,最大射 ...
- lydsy 2600(二分+中位数前缀和)米仓
2600: [Ioi2011]ricehub Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 691 Solved: 359[Submit][Stat ...
- 2016福州大学软件工程第三次个人作业-K米软件产品评测
K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...
随机推荐
- Qt编写自定义控件47-面板区域控件
一.前言 在很多web网页上,经常可以看到一个设备对应一个面板,或者某种同等类型的信息全部放在一个面板上,该面板还可以拖来拖去的,这个控件首次用在智能访客管理平台中,比如身份证信息一个面板,访客信息一 ...
- 关于jmeter+ant+jenkins性能自动化将测试结果文件jtl转换成html文件遇到的问题。
1.ant自身缺陷,返回结果中有特殊字符,乱码字符,无法识别,jtl文件转换时报错. 2.jtl文件过大转换成html文件时出现内存溢出. 针对以上情况:可考虑使用BeenShell Sampler: ...
- Docker Swarm 集群(十七)
目录 一.Docker Swarm 概念 1.集群 2.Docker Swarm 3.重要概念 swarm node service 二.创建 Swarm 集群 1.环境准备 2.创建 swarm 3 ...
- Laravel用户认证系统的实现细节
原文地址:http://www.php.cn/php-weizijiaocheng-406076.html 这篇文章主要介绍了关于Laravel用户认证系统的实现细节,有着一定的参考价值,现在分享给大 ...
- Win10利用CodeBlocks搭建Objective-C开发环境(二)
工程文件已经建好:但此时会发现main.m文件为灰色,且无法点击,此时需右键点击main.m文件,在option选项中勾选 compile file和 link file选项. 设置完成后,双击mai ...
- vue中的$listeners属性作用
一.当组件的根元素不具备一些DOM事件,但是根元素内部元素具备相对应的DOM事件,那么可以使用$listeners获取父组件传递进来的所有事件函数,再通过v-on="xxxx"绑定 ...
- redis相关操作命令
一.相关命令列表: 命令原型 时间复杂度 命令描述 返回值 KEYS pattern O(N) 时间复杂度中的N表示数据库中Key的数量.获取所有匹配pattern参数的Keys.需要说明的是,在我们 ...
- Redis内存数据库的基本语法
Redis: - nosql数据库,非关系型数据库 - 支持5大数据类型 (字符串String,列表list.字典hash,集合set,zset) - 与之相似的有memcache,但memcache ...
- Jmeter逻辑控制器: If控制器的解读
Jmeter官网其实有很详细的文档,点此跳转到官网,下面我来解读一下官网的文档,如有错误,欢迎指出. 一.官网解读 Name 在结果树中显示的名字. Comments 备注.相当于代码中的注释. Ex ...
- 事务的ACID
事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚. 简单地说,事务提 ...