构建程序
- 通过Web托管方式改造微服务。改造过程中,如果微服务是基于spring框架,则需要使用FunctionGraph提供的SDK,即在pom.xml文件中添加步骤1中依赖。此时,您只需修改配置以及打包方式即可将微服务改造成serverless函数。具体操作步骤如下:
- 配置微服务依赖。
- 配置微服务打包配置。
- 在微服务的pom.xml(即步骤1中的pom)文件中配置maven-assembly-plugin作为打包插件。
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2</version> <configuration> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> </archive> <appendAssemblyId>false</appendAssemblyId> </configuration> <executions> <execution> <id>auto-deploy</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assembly/zip_file.xml</descriptor> </descriptors> <finalName>${package.finalName}</finalName> <outputDirectory>${package.outputDirectory}</outputDirectory> <archiverConfig> <directoryMode>0700</directoryMode> <fileMode>0600</fileMode> <defaultDirectoryMode>0700</defaultDirectoryMode> </archiverConfig> </configuration> </execution> </executions> </plugin> </plugins>
- 在微服务项目创建src/main/assembly/zip_file.xml,并写入如下代码:
<?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" > <id>auto-deploy</id> <baseDirectory></baseDirectory> <formats> <format>zip</format> </formats> <!--配置统一打包到config目录,不要修改,不然找不到--> <fileSets> <fileSet> <directory>src/main/resources/</directory> <outputDirectory>config</outputDirectory> <includes> <include>**</include> </includes> <fileMode>0600</fileMode> <directoryMode>0700</directoryMode> </fileSet> </fileSets> <!--jar包统一打包到lib目录,不要修改,不然找不到--> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <scope>runtime</scope> </dependencySet> </dependencySets> </assembly>
- 在微服务的pom.xml(即步骤1中的pom)文件中配置maven-assembly-plugin作为打包插件。
- 构建出包。
完成后会在target目录下,生成一个${project.parent.artifactId}-${project.version}-serverless.zip包,如图3所示。
- 部署函数。
若zip包超过40M,需要通过OBS方式上传,如图6所示。
- 配置函数常规配置,如图9所示。
- 通过托管方式改造的函数入口统一固定为:com.huawei.yuanrong.function.Handler.handleRestRequest。
- 执行超时时间和内存可以根据业务属性配置。超时时间表示,当请求执行超过该配置时间时,该次请求会因为超时而失败;内存根据业务运行过程中所需的内存大小配置,当内存使用超过该配置值时,函数实例可能会被杀掉而导致请求失败。
- 配置环境变量。
- spring_start_class:SpringBoot的启动类名,如图10所示。
- cxf_enabled:CXF应用(典型的有Jalor)为true,否则为false。
- mfa-services的启动类是MfaMainApplication。
- 配置其他环境变量。
用户后续可以通过System.getProperty(“key”)的方式,获取到这里配置的环境变量。在传统微服务启动时,支持指定命令行参数,如java -Dfoo=bar xxx.jar。在Serverless函数部署时,可以通过环境变量的方式配置这些参数。
以上环境变量参数配置,如下图11所示。
- 配置函数初始化入口。
可选操作,在开启“快照式冷启动”或“预留实例”功能时为必选。函数初始化入口为固定配置:com.huawei.yuanrong.function.Handler.initializer,如图12所示。
- 开启预留实例或者快照式冷启动。
通过预留实例,或者快照式冷启动功能,可以加速函数启动时间,减少请求时延。预留实例使用可参考预留实例管理,快照式冷启动使用可参考配置快照式冷启动。
- 通过独立函数方式改造微服务。
直接函数化改造,是将微服务业务代码迁移到云函数内,基于spring框架的微服务需要剥离spring才能将微服务改造成serverless函数。
- 新建一个全新的maven工程,如图13所示。
- 业务代码迁移。
将原项目代码迁移至新项目,文件目录与原项目相同,删除使用的spring框架自动注入的标签。自动注入的类,需要用户自己创建对象。新创建的pom.xml中dependency应该为空,迁移过程中根据需要添加依赖,不用的jar包尽量不引入,根据需要在pom.xml中添加jar包依赖。
- 新增函数平台依赖,引入请求参数和响应类。
- 编写函数执行入口类。
以新建AdjustmentHandler类为例,原有接口为executeQueryAndUploadWithParam,将去spring之后的原有的executeQueryAndUploadWithParam接口逻辑放到AdjustmentHandler类中的executeQueryAndUploadWithParam方法中进行调用。
- 本地测试。
- 配置函数。
- 参照准备中创建函数的步骤,创建以mfa-import-serverless命名的函数。
- 重复托管方式改造中2-4步骤,上传函数代码包。
- 配置函数入口,入口为包名.类名.方法名,举个例子:com.huawei.xxxx.xxx.AdjustmentHandler.executeQueryAndUploadWithParam。
- 配置函数环境变量:无需再配置spring_start_class和cxf_enabled,业务按需配置其它的环境变量。
- 配置函数初始化入口。可选,用户可以自定义函数初始化时(接收请求之前)需要进行的操作。一个例子:
public void initFunction(Context context) {
// 业务自身逻辑,可以去远程拉取一些配置数据等
}
配置初始化入口:包名.类名.方法名,如图17所示。
- 开启预留实例/快照式冷启动功能,与步骤8相同。