ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

erlcloud 两种使用模式深度解析:进程字典 vs 配置对象,如何选择?

erlcloud 两种使用模式深度解析:进程字典 vs 配置对象,如何选择? erlcloud 两种使用模式深度解析进程字典 vs 配置对象如何选择【免费下载链接】erlcloudAWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc)项目地址: https://gitcode.com/gh_mirrors/er/erlclouderlcloud 是 Erlang 生态中最流行的 AWS API 客户端库AWS APIs library for Erlang覆盖 Amazon EC2、S3、SQS、DynamoDB、ELB 等数十个 AWS 服务。对于刚接触 erlcloud 的开发者来说最容易困惑的问题就是配置到底应该用configure/2,3还是new/2,3这两种模式底层有什么区别生产环境中又该如何选择本文就带你一次搞清楚 erlcloud 的两种使用模式并给出可直接套用的选型建议。一、为什么 erlcloud 会有两种使用模式翻开 erlcloud 的源码会发现几乎所有服务模块如erlcloud_ec2、erlcloud_s3、erlcloud_sns都同时导出了两组函数configure(...)—— 把凭证存起来之后调用 API 不用再传配置new(...)—— 生成一个配置对象调用 API 时显式传进去。这个设计源自函数式语言的一个经典取舍隐式全局状态 vs 显式参数传递。理解这一点你就掌握了 erlcloud 的命脉。二、模式一进程字典模式configure 一键配置这是 erlcloud 最传统的用法。以 EC2 为例只需一行erlcloud_ec2:configure(AKIA..., SecretKey...).之后所有 API 调用都不需要再带配置erlcloud_ec2:describe_images(). erlcloud_s3:list_buckets(). % 同样生效它的实现原理非常巧妙configure/2内部只是执行了一次put(aws_config, new(AccessKeyId, SecretAccessKey))见erlcloud_ec2.erl第 285-293 行把配置写进了当前 Erlang 进程的进程字典。当你不传配置调用 API 时底层会通过default_config()用get(aws_config)从进程字典里取出来见erlcloud_aws.erl第 380-385 行。✅优点代码最简洁不需要到处传参适合单账号、单进程的脚本和演示场景。 ⚠️缺点配置藏在进程字典里调用时看不见容易踩坑不同进程之间互相隔离多账号切换时必须反复configure。三、模式二配置对象模式new 显式传参第二种模式是把配置当普通数据来处理Config erlcloud_ec2:new(AKIA..., SecretKey...). erlcloud_ec2:describe_images(Config).这里的Config是一个#aws_config{}record字段定义在include/erlcloud_aws.hrl里面不仅包含 AccessKey/SecretKey还包含各服务的主机地址、端口、协议、区域等默认值。你可以随意修改其中的字段比如把ec2_host指向自建的 VPC Endpoint然后传给任意 erlcloud 函数。✅优点显式、可控、无副作用天然支持多账号、多区域并行配置对象可复用、可测试符合函数式编程风格。 ⚠️缺点每次调用都要多传一个参数代码稍显啰嗦。四、一张表看懂两种模式的本质区别对比维度模式一进程字典模式二配置对象入口函数configure/2,3new/2,3配置存放位置进程字典put/get(aws_config)调用栈函数参数调用方式describe_images()describe_images(Config)多账号支持差需反复切换好可同时持有多个并发安全仅限单进程内无共享状态天然安全代码可读性隐式调用处看不到凭证来源显式一目了然核心洞察两种模式底层是同一套#aws_config{}对象configure本质上只是把 new 出来的对象放进了进程字典。区别只在于配置的传递方式。五、实战选型什么场景该用哪种模式快速试验 / 写脚本 / REPL 调试用模式一两行代码跑通 EC2、S3 操作体验最丝滑。生产环境单账号推荐模式二显式传参让代码可读、可测试避免进程字典带来的隐式依赖。多租户、多账号、多区域服务必须用模式二为每个账号创建独立 Config 对象并发调用互不干扰。混合使用完全可以。先用configure设默认账号特殊请求再单独传 Config 覆盖。另外提醒一点erlcloud 也支持从环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和app.config的erlcloud - aws_config段读取默认配置见erlcloud_aws.erl第 424-433 行优先级为显式传参 进程字典 应用环境变量 系统环境变量。六、快速上手与常见问题想亲自体验克隆仓库即可git clone https://gitcode.com/gh_mirrors/er/erlcloudQ1configure 之后能用 new 覆盖吗可以。再次调用configure会重新put覆盖进程字典中的配置。Q2进程字典模式在多个进程里共享吗不共享。Erlang 进程字典是进程私有的每个进程都要各自configure一次。Q3想修改 Config 里的某个字段怎么办用 record 语法更新即可Config#aws_config{s3_host s3.example.com}。总结一句话简单场景用 configure复杂场景用 new 配置对象。理解了两者进程字典 vs 显式传参的本质区别你就能在 erlcloud 项目中写出既简洁又稳健的 AWS 调用代码。【免费下载链接】erlcloudAWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc)项目地址: https://gitcode.com/gh_mirrors/er/erlcloud创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表