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的更多相关文章

  1. SAP云平台和第三方CRM解决方案(火锅)互联

    光看封面配图,这篇文章很容易被误认为在讲成都的美食之一:火锅. SAP成都研究院坐落在被联合国教科文组织授予过"美食之都"称号的成都,所在的天府软件园,半径1公里左右星罗棋布着很多 ...

  2. 当ABAP遇见普罗米修斯

    Jerry每次在工作场合中同Prometheus(普罗米修斯)打交道时,都会"出戏",因为这个单词给我的第一印象,并不是用go语言实现的微服务监控利器,而是名导雷德利·斯科特(Ri ...

  3. 【Other】希腊诸神大全-中英文名称

    希腊诸神大全-中英文名称 希腊诸神的名字_百度搜索 希腊诸神_百度百科 希腊神话人物名字大全_极客百科 希腊神话人物名称大全 希腊神话中的人物名称大全   希腊神话即口头或文字上一切有关古希腊人的神. ...

  4. SAP成都研究院CEC团队三巨头之一:M君的文章预告

    国人总倾向于把特点或者作用类似的人或物放在一起比较并做出排名,于是就有了许多"某某某三巨头"的称谓. 最举世闻名的莫过于二战三巨头:丘吉尔,罗斯福和斯大林. 还有陪伴咱八零后童年时 ...

  5. 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫

    定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...

  6. PI控制器的由来

    20世纪20年代初,一位名叫尼古拉斯·米诺斯基(Nicolas Minorsky)的俄裔美国工程师通过观察舵手在不同条件下如何驾驶船只,为美国海军设计了自动转向系统. 根据Wikipedia.org, ...

  7. 高射炮打蚊子,杀鸡用绝世好剑:在SAP Kyma上运行UI5应用

    国人在表述"大材小用"这个场景时,总喜欢用一些实物来类比,比如:高射炮打蚊子. 英国QF 3.7英寸(94mm)高射炮,战斗全重超过9.3吨,全长近5米,最大射程约18公里,最大射 ...

  8. lydsy 2600(二分+中位数前缀和)米仓

    2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 691  Solved: 359[Submit][Stat ...

  9. 2016福州大学软件工程第三次个人作业-K米软件产品评测

    K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...

随机推荐

  1. MySQL数据库之多线程备份工具mydumper

    Mydumper介绍: 1)Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具 2)特性: 轻量级C语言编写 执行速度比mysqldump快10倍 快速的文件压缩 支持导 ...

  2. 请求头User-Agent作用?

    请求头User-Agent作用 答: User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所 ...

  3. kafka和zookeeper的配置文件优化配置

    zookeeper的配置 日志自动清理这两个参数都是在zoo.cfg中配置的:    autopurge.purgeInterval 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默 ...

  4. 解析python 命令的-u参数

    在shell脚本中运行python 命令时后面加了-u 参数(python -u xx.py),这个-u表示什么? import sys sys.stdout.write("stdout1& ...

  5. LeetCode_189. Rotate Array

    189. Rotate Array Easy Given an array, rotate the array to the right by k steps, where k is non-nega ...

  6. python reduce和偏函数partial

    functools模块 reduce方法: reduce方法 reduce方法,顾名思义就是减少 可迭代对象不能为空,初始值没提供就在可迭代对象中去一个元素 from functools import ...

  7. 统一建模语言UML

    目录 1. UML定义 2. UML结构 2.1 视图(View) 2.2 图(Diagram) 2.3 模型元素(Model element) 2.4 通用机制(General mechanism) ...

  8. 各种 Java Thread State 分析

    转自:https://www.cnblogs.com/zhengyun_ustc/archive/2013/03/18/tda.html 1,线程状态为“waiting for monitor ent ...

  9. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  10. Go之gob包的使用

    gob包("encoding/gob")管理gob流——在encoder(编码器,也就是发送器)和decoder(解码器,也就是接受器)之间交换的字节流数据(gob 就是 go b ...