基于亚马逊云科技无服务器服务快速搭建电商平台——性能篇

news2024/11/22 0:03:47

使用 Serverless 构建独立站的优势

在传统架构模式下,如果需要进行电商大促需要提前预置计算资源以支撑高并发访问,会造成计算资源浪费并且增加运维工作量。本文介绍一种新的部署方式,将 WordPress 和 WooCommerce 部署在 Amazon Lambda 中。Lambda 是无服务器的计算方式,无需预置资源就可以运行代码,自动响应任何规模的代码执行请求,从每天十几个事件到每秒数十万个事件,按计算时间付费(以毫秒为单位),真正做到按使用量计费,从而达到节省预置资源和运维成本。Lambda 的这种特性,让 Lambda 越来越受欢迎,越来越多的客户选择 Lambda 来部署应用,其中也包含 web 应用。了解 Lambda 的客户可能清楚,Lambda 是基于事件触发的方式,对于 web 应用,需要使用 API Gateway,接收 HTTP 请求,把 HTTP 请求转化为 Lambda 事件触发 Lambda 运行。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

在以前,对于已有的 Web 应用,需对应用代码进行轻量级的改造以处理 Lambda 事件。对于很多使用像 WordPress 和 WooCommerce 这样的成熟组件的电商客户来讲,进行代码改造不太可能,是不是就不能利用 Lambda 的优势了呢?答案是否定的。利用 Lambda 的新功能 Lambda container images 和开源组件 Amazon Lambda adapter 可以让 WordPress 在 Lambda 中运行且无需进行任何代码的修改。本解决方案通过将 Lambda Adapter,WordPress,WooCommerce 以及其他必要插件打包成容器,部署到 Lambda。同时本解决方案也利用了 Lambda 的新功能,Function URL,来代替 API Gateway,可以直接通过Function URL 来通过 HTTP(s) 访问 Lambda,从而节省 API Gateway 带来的成本。用户的动态请求,通过 CloudFront 回源到 Lambda URL 触发 Lambda 运行,在 Lambda 内部,Lambda Adapter 接收到 Lambda 事件并将其转换成 WordPress 能处理的 HTTP 请求。这样就实现了无需修改代码就能在 Lambda 中运行 WordPress。

本文着重介绍 Lambda container image 和 Lambda Function URL,关于 Lambda Adapter 的实现细节请参考这篇博客。

Lambda container image

要将容器运行在 Lamabda,容器映像需包含运行时 API 的 runtime interface clients,用于管理 Lambda 和函数代码之间的交互。客户可以自行将 runtime interface client 包含在自己的映像以支持在 Lambda 运行。Amazon 提供了一组可用于创建容器映像的开源基础映像。这些基本映像包括runtime interface clients 。Lambda 映像是只读的,但函数代码可以访问具有 512 MB 存储空间的可写 /tmp 目录。本方案使用 Docker 来创建映像。Dockerfile 里使用 Amazon 提供的基础映像Amazon Linux 2,并使用 bedrock 来管理 WordPress 和插件的安装。本方案中预配置了一些必要插件,客户可以修改 bedrock 的配置添加所需要的插件。

Lambda Function URL

现在可以通过创建 Function URL,支持使用 HTTP(s) 来访问这个 URL 来触发 Lambda 运行。在 Function URL 这个功能没有发布的时候,基于 Lambda 构建 Web 应用需要结合 API Gateway 来接收 HTTP(s) 请求。但是在 Lambda 上部署 WooCommerce 的场景下,因为是把 WordPress 等打包成一个容器,因此只需要单个 Lambda Function,API gateway 的作用只是把 HTTP 请求转化为 Lambda 事件,而 API Gateway 提供的高级功能,例如 API 管理,请求验证等,并不需要。因此有了 Function URL 的功能,就能够取代 API Gateway 在此场景下的作用,并且不会增加 Lambda 的费用,同时也节省了 API Gateway 的费用。

负载测试

在上一篇博客的基础上,我们使用 WordPress 的插件 Blocksy 快速构建一个 Starter Site,并使用这个 Site 来作为测试对象。

本方案已经开源在 Github,访问此 [Repo] (https://github.com/aws-samples/serverless-WooCommerce-workshop)可获得完整代码。

在 test/k6文件夹内,本方案也提供了进行性能测试的 k6脚本。模拟了用户进入主页,选择商品,并加入购物车,更新地址,到提交订单的完整流程。具体说明参考 test/readme.md 文件。

main.js 作为测试的入口文件,模拟了前5分钟100个用户在线,中间10分钟1000个用户在线,后5分钟100个用户在线的场景。读者可根据测试需要修改 main.js 文件。

因为默认 CDK 模版预置的 RDS Aurora mysql 实例和 Elasticahe Redis cluster 规模过小,不适合用来做测试。这里修改 CDK 代码cdk/lib/woocommerce-stack.ts,将 RDS Aurora mysql 的 r5.4xlarge。Elasticahe Redis cluster 修改为 r5.xlarge。客户也可以自行改大规模进行更大范围的测试。

image.png

通过以下命令更新资源。

make diff
make deploy

在这里我们使用一台 c5.xlarge 的 Amazon Linux 2 EC2来进行测试。并安装 CloudWatch Agent,将 k6生成的指标上传到 CloudWatch 进行可视化。注意 EC2需要有权写入 CloudWatch Metrics,这里我们使用 EC2 Role 来赋予权限。通过创建 Role,选择下图的托管策略 CloudWatchAgentAdminPolicy,并且把这个 Role 绑定给EC2。

image.png

通过以下命令安装、配置 k6和 CloudWatch Agent,并运行 k6进行测试。

sudo yum -y install https://dl.k6.io/rpm/repo.rpm
sudo yum -y install --nogpgcheck k6
sudo yum -y install git 
git clone https://github.com/aws-samples/serverless-woocommerce-workshop.git
cd ~/serverless-woocommerce-workshop/test/k6
sudo yum install -y amazon-cloudwatch-agent
cat << EOF > cw-statsd.json
{
    "metrics": {
        "namespace": "k6",
        "metrics_collected": {
            "statsd": {
                "service_address": ":8125",
                "metrics_collection_interval": 1,
                "metrics_aggregation_interval": 0
            }
        }
    }
}
EOF
sudo amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:./cw-statsd.json
K6_STATSD_ENABLE_TAGS=true k6 run --out statsd -e HOSTNAME=<your WooCommerce website domain name> main.js

下图是 k6测试运行完的统计结果。

image.png

在 CloudWatch 的 k6 metrics 中能看到每秒完成的订单数和 Lambda 的并发量。可以看出,随着随着请求/订单量的增加,Lambda 会自动进行扩展。可以看出,Lambda 能够应对对于流量的高低峰,无需任何运行操作。

image.png

总结

本篇博客在上一篇的基础上,介绍了 Serverless 建站方案的优势,并对基于 Serverless 服务的 WordPress 进行负载测试,能够看出 Lambda 能够自动应对流量高低峰而无需任何运维操作,大大节省运维成本。读者也可以根据自身需求,修改测试脚本,进行更大规模的性能测试。

附录

  • 基于亚马逊云科技无服务器服务快速搭建电商平台——部署篇
  • 无服务器独立站工作坊:Workshop Studio
  • Github code:GitHub - aws-samples/serverless-woocommerce-workshop

本篇作者

image.png

汪其香 Amazon 解决方案架构师,负责基于 Amazon 云计算方案的架构咨询和设计实现,具有丰富的解决客户实际问题的经验,同时热衷于深度学习的研究与应用。

image.png

许昌月 Amazon 解决方案架构师,负责基于 Amazon 的云计算方案架构咨询和设计,实施和推广,擅长软件开发,具有丰富的解决客户实际问题的经验。

文章来源:https://dev.amazoncloud.cn/column/article/630b30932ecbae73705ffb63?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/936859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++信息学奥赛1149:最长单词2

#include <iostream> #include <string> using namespace std; int main() {string str1;// 输入一行字符串getline(cin,str1);int n0;string MaxArr"";string MinArrstr1;string arr"";for(int i0;i<str1.length();i){if(str1[i] or str1…

电阻器件的分类

电阻器的种类碳膜电阻膜式电阻器中的一种。气态碳氢化合物在高温和真空中分解&#xff0c;碳沉积在瓷棒或者瓷管上&#xff0c;形成一层结晶碳膜。改变碳膜厚度和用刻槽的方式变更碳膜的长度可以得到不同的阻值。碳膜电阻成本较低&#xff0c;电性能和稳定性较差&#xff0c;一…

Win 11 电脑的 Win + E 快捷键失效

报的错误信息如下&#xff1a; 该文件没有与之关联的应用来执行该操作。请安装应用&#xff0c;若已经安装应用&#xff0c;请在”默认应用设置"页面中创建关联。 报错原因&#xff1a;系统注册表被改写了导致的出错 解决办法&#xff1a; 1、首先&#xff0c;按键盘上…

【Linux】以太网协议以及MTU

以太网协议 数据链路层的功能以太网的数据格式MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响 数据链路层的功能 数据链路层的主要功能是&#xff1a;控制链路。包括数据链路的建立、链路的维护和释放。MAC寻址也是它的功能&#xff0c;寻址是指计算机网卡的MAC地…

算法通过村第四关-栈青铜笔记|手写栈操作

文章目录 前言1. 栈的基础概要1.1 栈的特征1.2 栈的操作1.3 Java中的栈 2. 栈的实现&#xff08;手写栈&#xff09;2.1 基于数组实现2.2 基于链表实现2.3 基于LinkedList实现 总结 前言 提示&#xff1a;我自己一个人的感觉很好 我并不想要拥有你 除非你比我的独处更加宜人 --…

低代码与低代码平台的概念解析

随着数字化转型和软件需求的不断增长&#xff0c;传统的手写代码开发方式已经无法满足迅速推出应用程序的需求。为了加快软件开发的速度并降低技术门槛&#xff0c;低代码开发模式应运而生。本文将介绍低代码的概念&#xff0c;探讨什么是低代码什么是低代码平台&#xff1f; 一…

JAVA中如何知道某项目使用什么数据库类型

文章目录 1. 前言2. 先说结论3. 代码案例 1. 前言 最近在写第三方工具的时候&#xff0c;需要判断使用方项目具体使用了什么数据库类型&#xff0c;从而进行不一样的实现逻辑。当然可以让用户在YML中配置说明项目用什么数据库&#xff0c;但用户不一定填写正确。因此需要想其他…

华为OD机试 - 求满足条件的最长子串的长度 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

day-03 基于TCP的服务器端/客户端

一.理解TCP和UDP TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种常见的传输层协议&#xff0c;用于在计算机网络中提供可靠的数据传输。 1.TCP&#xff1a; 连接导向&#xff1a;TCP是一种面向连接的…

麦淘商城系统 商城系统源码 电商系统源码 分类商城网站系统源码

麦淘商城系统 商城系统源码 电商系统源码 分类商城网站系统源码 麦淘商城系统源码 | 提供完整可定制的电商解决方案 电商系统源码 商城网站系统源码

【C++笔记】C++之类与对象(下)

【C笔记】C之类与对象(下&#xff09; 1、再看构造函数1.1、构造函数的初始化列表1.2、C支持单参数的构造函数的隐式类型转换1.3、匿名对象 2、Static成员2.1、为什么要有静态成员变量&#xff1f;2.2、一个类的静态成员变量属于这个类的所有对象2.3、静态成员函数 3、友元3.1、…

围棋与育种

最近因为娃子报名了围棋课&#xff0c;我本着交一次课学两个人的态度&#xff0c;入门围棋&#xff0c;买了些书&#xff0c;听了些课&#xff0c;有所得。学了两个多月&#xff0c;现在6级水平&#xff0c;了解了基本的攻杀技巧&#xff0c;会判断输赢。 下面截图是今天的一盘…

Kotlin协程flow的debounce参数timeoutMillis特性

Kotlin协程flow的debounce参数timeoutMillis特性 <dependency><groupId>org.jetbrains.kotlinx</groupId><artifactId>kotlinx-coroutines-core</artifactId><version>1.7.3</version><type>pom</type></dependency&…

[笔记] 阿里云域名知识

文章目录 前言一、域名二、域名常见分类2.1 泛域名2.2 为什么要设置子域名 三、记录类型3.1 A- 将域名指向一个PV4地址3.2 CNAME- 将域名指向另外一个域名3.3 AAAA- 将域名指向一个PV6地址3.4 MX- 将域名指向邮件服务器地址3.5 SRV- 记录提供特定的服务的服务器使用场景 3.6 TX…

【C++】5、构建:CMake

文章目录 一、概述二、实战2.1 内部构建、外部构建2.2 CLion Cmake 一、概述 CMake 是跨平台构建工具&#xff0c;其通过 CMakeLists.txt 描述&#xff0c;并生成 native 编译配置文件&#xff1a; 在 Linux/Unix 平台&#xff0c;生成 makefile在苹果平台&#xff0c;可以生…

PCB设计常见问题

Fill Mode中存在3个选项 Solid&#xff08;Copper Regions&#xff09; Hatched&#xff08;Tracks/arcs&#xff09; None&#xff08;outlines&#xff09; 区别Solid&#xff08;Copper Regions&#xff09;过大电流的能力更强&#xff0c;且对于电路板存在的分布电容的干扰…

为什么学嵌入式还要学单片机和人工智能?

从企业用人需求的角度来看&#xff0c;许多企业在招聘嵌入式工程师时都希望其具备一定的技能要求。其中&#xff0c;熟悉STM32单片机开发、熟悉嵌入式Linux开发以及熟悉实时操作系统开发&#xff0c;如FreeRTOS等&#xff0c;是常见的要求。掌握这些技术点的课程将为学生提供更…

Linux之iptables防火墙

目录 一.网络安全技术 二.防火墙 2.1.防火墙分类 2.2.iptables工具简述 2.3.iptables基本语法 2.4.控制类型 2.5.查看规则 2.6.添加规则 2.7.黑白名单 2.8.根据规则编号删除 清空 替换规则 2.9.默认策略 2.10.隐藏扩展模块 2.11.显示扩展模块 三.iptables保存规则…

LabVIEW开发干扰对无线网络基础设施进行隐蔽影响测试

LabVIEW开发干扰对无线网络基础设施进行隐蔽影响测试 针对各种级别和类型的信息资源的DDoS攻击因其相对容易创建和应用的高效率而最为流行。同时&#xff0c;现有的机制不足以检测它们。因此&#xff0c;防范此类攻击的问题变得越来越紧迫&#xff0c;包括在实施IEEE 802.11标…

linux Firewalld学习笔记

1、Firewalld默认策略 默认情况会阻止流量流入&#xff0c;但允许流量流出。 2、Firewalld区域概念 拒绝区域drop、默认区域public、允许区域trusted 3、区域规则 区域与网卡接口 默认区域规则 常用的有trusted &#xff08;相当于白名单&#xff09;、work/public 区、…