目录

体验阿里云Serverless

Serverless是什么

运行时Runtime

BaaS化

FaaS冷启动

总结

自己动手搭建Serverless

安装istio

安装knative


体验阿里云Serverless

前面的文章《进化的架构》讲了单体、SOA、微服务、云原生等架构,并针对云原生动手搭建了k8s集群。这里接着讲一讲serverless架构。在云原生时代,我们借助k8s、自动化工具实现了devops,较少关注运维。但是serverless可以让我们做到不关注运维,当然绝对意义的不关注是不可能的,只是很少的关注。

可以先去阿里云体验一下serverless开发流程,选择产品——计算——函数计算FC——服务及函数、serverless工作流,如下图所示:

概念解释

  • 服务及函数:‘服务’代表一个具体的服务,‘函数’代表服务中各个功能模块。一个服务可以包含多个函数
  • serverles工作流:使用‘流程定义语言’将多个服务的多个函数编排起来,形成流程,比如付款——购买商品——发邮件——扣减库存——发货...
  • serverles工作流—应用:多个工作流组成一个应用

我们使用官网提供的例子,简单搭建一个应用。打开应用中心,选择旅行订单demo——配置并部署

等待创建完毕,去服务函数管理界面查看,发现帮我们创建名为fnf-sample-22d1e0-tripOrderProcessingService-A04B5EBE2C6C的服务

点击进去,有六个函数,分别是:创建火车订单、创建酒店订单、取消飞机订单、取消火车订单、创建飞机订单、发送信息。选中一个函数进行编辑或查看,你将能够指定资源、并发度、实例回收时间、触发器,能够查看日志、实例状态、监控等等。

另外,你会发现这些函数的实例数都是0,只有真正执行时(触发器触发、手动执行、工作流调用)才会创建实例,过一段时间后又自动回收。

如何将这六个函数组织起来形成订票流程呢,我们可以写代码编排,也可以使用官方提供的serverless工作流来完成,刚刚的demo已经帮我们生成好了

进入该流程,选择‘定义’tab,能够看到一个定义好的流程图。如何自定义流程、参数如何传递等等请看官方文档。

Serverless是什么

如上所见,我们编写代码时,完全无需考虑基础设施,没有了服务器、操作系统、网关、网络调用......做到了NoOps(算力、存储、网络可以认为是无限的,但是要考虑自己钱包是否能够承担)。一句话概括,就是服务端无运维,使我们能够专注业务代码编写。具体到上面的例子,我们其实接触了很多概念,比如函数、触发器等(一定要去阿里云上操作一番,很多东西一操作就自然明白其含义了),把它们归纳成为一种实现方式:FaaS。

FaaS在实现上有很多特点,下面一一道来

运行时Runtime

内置运行时是官方提供的,是我们函数运行时的上下文环境。联想一下运行本地函数,加载代码到内存——执行——结束,serverless函数的生命周期与此类似,连同它的runtime一同被创建、运行、销毁。能够看出来这个函数是无状态的,只要函数的入参、参数相同,那么出参一定是固定的。除了内置运行时,还有自定义运行时容器镜像运行时。

BaaS化

既然函数是无状态的,那么我们想要保存数据如何做呢,答案是后端设施BaaS化。后端设施对外提供基于http的api来代替以往的交互方式:客户端启动时维护一个连接池。(后端设施是指数据库、消息队列、日志、存储,等等这一类用于支撑业务逻辑运行,但本身无业务含义的技术组件)

以官网的serverless mysql为例,它提供了http接口来对mysql进行增删改查、事务等操作,并且其提供的特性与serverless的按需付费、无运维是一致的。具体特性参考文档。

FaaS冷启动

我们的函数执行流程如下所示,中间会经过多个步骤,这就是冷启动的概念。这里会涉及到一个重要问题,冷启时间。如果冷启时间过长,会导致第一次调用超时失败。如何避免这个问题呢?

官方提供了以下几个建议

而且根据我们应用的特点,平台允许选择函数模式,是用完既销毁型,还是常驻型。用完既毁型适合对耗时不敏感、冷启时间短的应用。而常驻型与此相反,函数实例的创建销毁由我们手动控制,可以指定预留的实例数量,当实际执行时的压力超过预留实例,会自动启动用完既毁类型的实例,如下图。这样既避免了冷启动的延时,又实现了极高的资源利用率。

最后补充一点,后端设施BaaS化也是降低冷启时间的有效措施。

总结

通过上面的资料,能够看出serverless的一些优点

  • 按量付费,节约成本
  • NoOps,专注业务开发

但如果你实际体验了一番阿里云serverless,会发现有一些限制

  • 服务编排要使用它特定的流程语言
  • 所有扩展项都是勾选框,如果你要特殊需求,可能要花费一番功夫
  • 代码要按照规定的要求编写
  • 某些组件的价格比较贵

自己动手搭建Serverless

安装istio

《搭建k8s集群》已经搭建好了k8s集群,这里会继续安装istio、knative组件。

# 下载最新版本istio
curl -L https://istio.io/downloadIstio | sh -# 进入目录
cd istio-xxx/bin
cp istioctl /usr/local/bin/# 安装
istioctl manifest apply --set profile=demo# 空间default下的pod在部署时都会注入sidcar
kubectl label ns default istio-injection=enable# 部署kiali面板
cd istio-xxx/samples/addons/

kiali和Jaeger的服务暴露用的是LoadBalancer,我用的是本地的环境没有公网SLB使用,所以要修改为NodePort模式
vim kiali.yaml

vim jaeger.yaml

# 安装addons下的所有yaml
kubectl apply -f .# 将istio-ingressgateway改为NodePort方式
kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'

访问kiali:http://139.224.137.71:32700/

访问Jaeger:http://139.224.137.71:32701/

删除我们之前的应用,重新部署。但是我发现kubectl apply -f xxx它不自动注入,所以只好用命令行手动注入

kubectl apply -f <(istioctl kube-inject -f k8s-test-com.yaml)

安装knative

请参考以下。官方提供的仓库国内连不上,这篇博客做了一些修改Knative 介绍-谢先斌的博客Knative是一个开源的企业级解决方案,用于在kubernetes平台中构建Serveless和管理事件驱动的应用程序。https://www.xiexianbin.cn/cloud-native/knative/index.html

serverless架构相关推荐

  1. 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  2. 何为 Serverless 架构模式?这 5 大场景来告诉你!

    作者 | Hongqi  阿里云高级技术专家 本文整理自阿里云<Serverless 技术公开课> 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义 ...

  3. 我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )

    文章目录 一.后端服务器架构发展 二.Serverless 与 ServerFul 三.Serverless 定义 四.Serverless 优缺点 [本文正在参与 "100%有奖 | 我的 ...

  4. 未来我们对微服务和 Serverless 架构有什么期望

    Juan Ignacio Giro | 作者 梁桂钊 | 译者 技术正在以令人难以置信的速度发展,所以在市场上看到新的技术趋势并不新奇.由于微服务的进步,更强大的云计算,以及 Serverless 架 ...

  5. Serverless 架构模式及演进

    作者:西流 编辑&排版:雯燕 Serverless 架构 按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS(后端服 ...

  6. 常见 Serverless 架构模式

    作者 | Hongqi 阿里云高级技术专家 究竟什么是 Serverless 架构? 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架 ...

  7. Serverless 架构下的服务优雅下线实践

    作者 | 行松 阿里巴巴云原生团队 应用发布.服务升级一直是一个让开发和运维同学既兴奋又担心的事情. 兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值:担心的是上线的过程会不会出现意外情 ...

  8. 从零入门 Serverless | 一文详解 Serverless 架构模式

    作者 | Hongqi  阿里云高级技术专家 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复 入门 ,即可获取 Serverl ...

  9. Serverless 选型:深度解读 Serverless 架构及平台选择

    作者 | 悟鹏  阿里巴巴技术专家 **导读:**本文尝试以日常开发流程为起点,分析开发者在每个阶段要面对的问题,然后组合解决方案,提炼面向 Serverless 的开发模型,并与业界提出的 Serv ...

  10. 盘点 Serverless 架构的六个特质

    作者 | Wisen Tanasa 编译 | 刘雅梦 策划 | 辛晓亮 本文介绍了 Serverless(无服务器)架构的六个特质(Traits):入门门槛低(Low barrier-to-entry ...

最新文章

  1. c++解析csv 存入数组_使用Apache Commons CSV在Java中读写CSV
  2. ASP.NET(C#) 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数
  3. 深入浅出 消息队列 ActiveMQ
  4. linux下intel无线网卡安装失败,ubuntu 16.04无法安装无线网卡驱动
  5. cartographer探秘第四章之代码解析(五) --- 后端优化 --- 闭环约束2 --- FastCorrelativeScanMatcher2D
  6. 2017大学网考计算机b,(热)2017年4月网考 大学英语b网考 电大英语网考 计算机应用.doc...
  7. 犯2一周后,做一做一年多的总结
  8. python 绝对值最小值的 正数_找出有序数组中绝对值最小的数
  9. 计算机英语面试翻译,计算机面试英文自我介绍范例
  10. PIAO网址PIAO
  11. 训练集和测试集的分布差距太大有好的处理方法吗?
  12. 基于django的轻量级CMS Mezzanine搭建笔记
  13. keras运行时指定显卡及限制GPU用量
  14. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 15
  15. 无法清除计算机的主dns,无法清除DNS缓存的解决办法
  16. java.sql.SQLException: The server time zone value‘xxxxxxxx‘ is unrecognized
  17. NBU 配置ORACLE备份
  18. Xcode 下载加速及安装指南
  19. php写html就错误500,php – 简单的html dom解析器返回错误500
  20. stm32外设-DMA

热门文章

  1. 诗和远方:蚂蚁金服 Service Mesh 深度实践 | QCon 实录
  2. 【程序源代码】医院预约挂号小程序
  3. ImmunoChemistry艾美捷高级钙素AM细胞活力试剂盒方案
  4. 当Zerotier遭遇三大运营商
  5. 【客户价值】 SaaS 环境中的价值实现——客户成功的信条
  6. 仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)
  7. 4G模块CA7600操作笔记
  8. 无中生有之突击NOIP(4)--搜索
  9. 本科毕业论文评语-优秀,良好,中等,及格
  10. java 限制控制台字数_限制用户在文本框输入的字数