中年Serverless 实战:通过 Component 实现多地域部署容灾( 三 )


此处 , 有读者可能有疑问:为什么某个函数会无法提供服务?底层服务的容灾机制 , 不是云厂商要提供的么?理论上 , 这个容灾机制是云厂商提供的 , 并且函数是无状态的 , 只要确保业务逻辑无问题 , 是不需要进行某些层级的主备容灾等 。 但是实际上 , 各个云厂商均没有办法保证某个服务 100% 可用 。 例如 2019 年 6 月 2 日凌晨 2 点 , 亚马逊云 AWS 突发受大规模故障 , 直到当天下午 1 点 48 分故障解除 , 故障时间将近 12 小时 。 所以 , 虽然云厂商会提供相对安全与可靠的容灾机制和服务 , 但还是很有必要在自身层面额外处理一下 , 尽可能保证服务安全与稳定 。
2 通过 Serverless Framework 进行多地域部署与解析
函数的多地域部署
以腾讯云为例 , 基础的 Component 跨地域部署不是很容易实现 。 虽然修改区域将函数部署到多个地域是可以实现的 , 但实际部署时每个区域的函数还会有一些额外的配置 , 所以这个时候可以借助多地域部署的组件来实现:tencent-scf-multi-region
相对于传统的tencent-scf组件而言 , 这个组件的 yaml 将region字段变成了兼容list形式 , 同时增加了子地域的额外配置 , 例如 yaml:
hello_world:component: "@serverless/tencent-scf-multi-region"inputs:codeUri: ./description: This is a template functionregion:-ap-guangzhou- ap-shanghaienvironment:variables:ENV_FIRST: env1ENV_SECOND: env2handler: index.main_handlermemorySize: 128name: hello_worldruntime: Python3.6timeout: 3events:- apigw:name: serverless_testparameters:protocols:- httpdescription: the serverless serviceenvironment: releaseendpoints:- path: /usersmethod: POST- path: /usersssmethod: POSTap-guangzhou:environment:variables:ENV_FIRST: env2ap-shanghai:events:- apigw:name: serverless_testparameters:protocols:- httpdescription: the serverless serviceenvironment: releaseendpoints:- path: /usersdmethod: POST
测试部署效果:
$ sls --debugDEBUG ─ Resolving the template"s static variables.DEBUG ─ Collecting components from the template.DEBUG ─ Downloading any NPM components found in the template.DEBUG ─ Analyzing the template"s components dependencies.DEBUG ─ Creating the template"s components graph.DEBUG ─ Syncing template state.DEBUG ─ Executing the template"s components graph.DEBUG ─ Compressing function hello_world file to /Users/dfounderliu/Desktop/ServerlessComponents/test/scf_test/.serverless/hello_world.zip.DEBUG ─ Compressed function hello_world file successful