对几种编程语言进行冷启动性能测试,分别使用这几种语言来实现helloword函数,然后给函数设置定时触发器,每半个小时执行一次,这样函数执行时基本就是冷启动了。使用链路追踪来采集冷启动耗时,最后统计每个语言的耗时以及不同内存下的冷启动时间。
- • 函数计算中PHP冷启动最快,Node.js、Python次之,Java最慢
- • Java冷启动耗时大约是Node.js或PHP的三倍,Node.js、Python、PHP的冷启动耗时基本在1s内
- • 随着内存增加,冷启动耗时逐渐缩短
除此之外也针对Lambda进行测试,Node.js冷启动耗时最短,大概200毫秒,性能是函数计算的3~4倍。国产的Faas产品还有很高的提升空间。
小结
- • 尽量选择Node.js、Python、PHP等冷启动耗时短的语言编程
- • 为函数设置合适的内存、内存越大,冷启动耗时越短,但成本也越高,所以要设置一个合适的内存
- • Serverless性能优化的一些实践方案:提前给函数预热、减少代码体积减少不必要的依赖、为函数设置并发、为函数设置合适的内存、使用预留资源、执行上下文重用,选择冷启动耗时少的编程语言。
- • 除了自己的优化之外,Serverless性能还有一部分需要提供服务的云厂商去优化,比如各种编程语言的运行时,比如Java冷启动耗时很长,这个优化也只能优化云厂商了,开发者很难去优化,只能尽量避免。
访问控制:如何授权访问其他云服务
权限问题
比如没有权限访问发布函数、没有权限访问其他云服务
直接使用具有AdministratorAccess权限的访问凭证去部署应用设置管理云资源,这是非常不安全的。
当企业规则逐渐变大,企业中有不同角色的成员。为了云上资源的安全性,你就需要为不同角色配置不同权限,限制不同成员能够访问的云资源。
不同云厂商的访问控制产品
- • AWS IAM
AWA Identity and Access Management
- • 阿里云 RAM
Resource Access Management
不同云厂商的实现细节可能有所差异,但工作原理基本一致。
设计访问控制系统
如果你是一个云产品的架构师,那你要怎么设计一个访问控制系统,实现这样几个很常见的需求呢?(实现分权、云服务授权、跨账号授权)
分权
如何使不同成员拥有不同的权限?
比如运维同学才能购买云产品;Serverless开发同学只能使用Serverless产品而不能购买;财务同学只能使用费用中心查看账单等。
云服务授权
如何使云服务能够访问某个云资源?
比如只允许函数计算读对象存储中的文件而不能删除或创建。
跨账号授权
如何使其他账号能够访问你的云资源?
比如某个大型企业有两个云账号,其中一个云账号A是用来开发生产的,另一个B用于审计,存储所有日志,那么A如何使用B里面的日志?
通过子账号、角色和权限策略来实现云上的访问控制
当创建一个云账号的时候,你的账号就是主账号,主账号有所有的权限,而你可以使用主账号来创建子账号和角色。子账号一开始创建的时候是没有任何权限的,你可以通过给子账号添加权限策略来为子账号授权。
权限策略
权限策略就是一组访问权限的结合。
系统策略
- • AdministratorAccess
管理所有云资源的权限
- • AliyunOSSFullAccess
管理对象存储OSS的权限、OSS存储桶以及文件的增删改查
- • AliyunOSSReadOnlyAccess
只读访问对象存储OSS的权限,只能读取OSS存储桶以及文件,不能创建和修改
在子账号和权限的基础之上,就可以给不同的成员创建子账号,给他们不同的权限,这样就达到了分权的目的。
有两种使用子账号的方式
- • 控制台访问
通过子账号登录控制台管理云资源
- • 编程访问
在代码中使用子账号的AK来调用云产品的API进而管理云资源
当我们资源数量越来越多时,通常会通过编程的方式来使用和管理云资源。
一个应用包含大量函数的时候,通常会使用开发框架创建、更新、发布函数。开发框架的本质就是通过编程的方式来管理函数。
当使用Fun或Serverless framework等工具去部署函数的时候一定要记着使用子账号的AK,并且要为子账号使用最小化的权限。
除了子账号访问控制还有一个重要的功能就是角色。
角色
角色是一个虚拟用户,必须被某个具体用户(子账号、云服务等)扮演使用,可以通过添加权限策略为角色授权。同时创建角时,需要指定角色能够被谁扮演即角色的可信实体。
角色可信实体包括云账号、云服务以及其他身份提供商。
要想使用账号A访问账号B的OSS角色,先为账号B创建一个角色RoleReadOSSAccess,将角色的可信实体设置为账号A,这样账号A就可以使用自己的AK扮演账号B的RoleReadOSSAccess角色,进而读取账号B的OSS。
基于角色扮演的方式,你就可以实现云服务授权和跨账号授权了。
怎么通过权限策略给用户或角色授权?
从形式上来讲权限策略就是有特定语法的Json字符串,可以通过配置Json字符串来实现授权。
权限策略分为两种:系统策略、自定义策略。
系统策略是云厂商内置的,预先定义的Json配置,通常包括AdministratorAccess以及各个云服务的完全访问和只读权限,但是有时候系统权限可能没有办法满足你的需求或者想在一个访问策略里面包含访问多个云服务的权限,那就可以使用自定义权限策略。
不同云厂商权限策略语法几乎一样。
通过权限策略给用户或角色授权