架构设计基础设施保障IaaS弹性伸缩和无服务器计算

news2024/10/7 12:25:13

目录

  • 1 高可用弹性伸缩实践
  • 2 无服务器计算(FaaS)


1 高可用弹性伸缩实践

在这里插入图片描述

  1. 背景

弹性伸缩是云服务架构的重要优势,能够很好的解决高并发场景下的性能瓶颈, 同时节省运营成本。

在 IaaS 端,能够弹性伸缩的最实用的产品形态,一般是虚拟机编组。阿里云提供了弹性伸缩的功能。

要实现弹性伸缩服务, 还需要负载均衡器作为辅助组件,它可以将流量均匀地,或者按照一定权重或规则,分发到多台虚拟机上。

  1. 创建ECS实例

实例创建完成之后, 需要绑定弹性IP

在这里插入图片描述

如果没有弹性公网IP, 需要付费开通:

在这里插入图片描述

  1. 创建负载均衡SLB

在这里插入图片描述

根据实际场景, 选择对应的实例规格。

在实例管理里面,选择【点我开始配置】

在这里插入图片描述

协议监听配置:

在这里插入图片描述

这里配置的80端口, 可以根据需要, 在高级配置里面, 设置不同的调度算法: 加权轮询 (WRR)、加权最小连接数 (WLC)、轮询 (RR)、一致性哈希 (CH)。

在这里插入图片描述

接下来, 设定ECS服务的运行端口:

在这里插入图片描述

开启健康检查:

在这里插入图片描述

最后确认提交即可。

  1. 配置服务运行方式(服务部署方式)
  • 编写服务接口

    计算斐波那契数列:

public int fibonacci(int n){
  if(n==1||n==2){
flag[n]=1;
return 1;
  }
  else{
if(flag[n-1]!=0&&flag[n-2]!=0){
 flag[n]=(flag[n-1]+flag[n-2])%10007;
 return flag[n];
}
else
{
 flag[n]=(fibonacci(n-2) + fibonacci(n-1))%10007;
 return flag[n];
}
  }
 }

  • 打包上传服务
  maven clean install
  • 设置开机启动

    创建开机脚本:

  vi /usr/lib/systemd/system/elastic.service

添加以下内容:

[Unit]
Description=elasticservice
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
PIDFile=/run/elasticservice.pid
ExecStart=/usr/local/elasticstart.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
ExecReload=
PrivateTmp=true
RemainAfterExit=yes
ExecStartPre=

[Install]
WantedBy=multi-user.target

创建elasticstart.sh脚本:

  #!/bin/bash
  nohup /usr/bin/java -jar /usr/local/app-basic.jar >/dev/null 2>&1 &

设置权限:

  chmod 777 /usr/local/elasticstart.sh

设置开机启动:

  systemctl enable elastic

启动服务:

  systemctl restart elastic

  1. 测试验证(服务部署方式)

通过接口进行访问:

http://47.105.205.141/calcFib?num=123

在这里插入图片描述

  1. 配置服务运行程序(非服务部署方式)

进入ECS虚拟机, 创建配置一个Nodejs服务。

  • 配置NodeJS环境

    下载:

  wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz

解压:

  tar -xvf node-v10.13.0-linux-x64.tar.xz

创建软链接:

  ln -s /usr/local/node-v10.13.0-linux-x64/bin/node /usr/bin/node
  ln -s /usr/local/node-v10.13.0-linux-x64/bin/npm /usr/bin/npm
  • 安装运行模块依赖
  npm install express
  npm install ip
  npm install os
  • 创建server.js脚本:
  vi  /usr/local/server.js :
const express = require('express');
const ip = require('ip');
const os = require('os');
const app = express();
//使用递归方式计算斐波那契数列
function fibo (n) {
 return n > 1 ? fibo(n-1) + fibo(n-2) : 1;
}
app.get('/', function(req,res) {res.write('I am healthy'); res.end();} );
app.get('/fibo/:n', function(req, res) {
 var n = parseInt(req.params['n']);
 var f = fibo(n);
 res.write(`Fibo(${n}) = ${f} \n`);
 res.write(`Server: ${os.hostname()} ,  private ip: ${ip.address()} \n`);
 res.end();
});
app.listen(80);
  • 运行程序
  node server.js
  • 设置开机启动

    创建开机脚本:

  vi /usr/lib/systemd/system/nodeapp.service

添加以下内容:

[Unit]
Description=nodeappservice
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
PIDFile=/run/nodeapp.pid
ExecStart=/bin/setsid /usr/bin/node /usr/local/server.js
Restart=/bin/pkill node && /bin/setsid /usr/bin/node /usr/local/server.js
ExecStop=/bin/pkill node
ExecReload=
PrivateTmp=true
RemainAfterExit=yes
ExecStartPre=

[Install]
WantedBy=multi-user.target

设置开机启动:

  systemctl enable nodeapp

  1. 测试验证(非服务部署方式)

采用负载均衡的公网服务地址, 进行测试:

[root@localhost siege-4.0.2]# curl http://47.104.145.210/fibo/35
Fibo(35) = 14930352
Server: iZm5egp1t778ocdk7f1j6fZ ,  private ip: 172.31.141.105

正常能够返回主机名称和IP信息。

  1. 创建自定义镜像

用于弹性机器扩容使用

在这里插入图片描述

在这里插入图片描述

  1. 创建伸缩组

进入【部署与弹性】-【弹性伸缩】,配置信息来源, 选择【自定义伸缩配置】, 这里需要【创建伸缩配置】,在里面配置上面所自定义生成的镜像, 否则服务不能正常运行, 整个伸缩功能也就无法实现。

在这里插入图片描述

设定实例范围: 2-6台。(期望实例数, 会随着伸缩自动增长, 但不会超过最大实例数。)

在这里插入图片描述

设定扩容策略为均衡分布策略,在实际应用中, 建议虚拟交换机可以划分在不同区域,以保障高可用:

在这里插入图片描述

在这里插入图片描述

创建完成:

在这里插入图片描述

在ECS控制台可以看到生成的实例:

在这里插入图片描述

在弹性伸缩后台, 可以看到实例配置信息:

在这里插入图片描述

  1. 创建弹性伸缩规则

这里设定CPU使用率不能超过30%。

在这里插入图片描述

  1. 负载测试验证

进入负载均衡SLB,可以看到已经自动配置了初始的两台实例, 权重都设定为50: 在这里插入图片描述

通过测试,可以看到负载均衡已经生效:

[root@localhost siege-4.0.2]# curl http://47.104.145.210/fibo/35
Fibo(35) = 14930352
Server: iZm5ecgyf8ael3v9zrtx89Z ,  private ip: 172.31.141.111
[root@localhost siege-4.0.2]# curl http://47.104.145.210/fibo/35
Fibo(35) = 14930352
Server: iZm5egp1t778ocdk7f1j6fZ ,  private ip: 172.31.141.105

  1. 安装压测组件:

下载:

wget http://download.joedog.org/siege/siege-4.0.2.tar.gz

解压:

tar -zvxf siege-4.0.2.tar.gz

安装依赖:

yum -y  install gcc

编译安装:

cd siege-4.0.2

```bash
./configure
make
make install
  1. 压力测试
[root@localhost siege-4.0.2]# siege -c 255 -t 10m  http://47.104.145.210/calcFib?num=99
[alert] Zip encoding disabled; siege requires zlib support to enable it
** SIEGE 4.0.2
** Preparing 200 concurrent users for battle.
The server is now under siege...
HTTP/1.1 200  0.22 secs:84 bytes ==> GET  /fibo/99
HTTP/1.1 200  0.22 secs:84 bytes ==> GET  /fibo/99
HTTP/1.1 200  0.22 secs:84 bytes ==> GET  /fibo/99
HTTP/1.1 200  0.22 secs:84 bytes ==> GET  /fibo/99
HTTP/1.1 200  0.22 secs:84 bytes ==> GET  /fibo/99

-c 是并发量,-t 是压测时间。持续数6,7分钟后, 可以看到自动伸缩生效,创建了新的实例。

在这里插入图片描述

这里自动伸缩是会监控一段时间再执行,所以在测试过程中需要等待一段时间, 具体规则可以查看:

在这里插入图片描述

2 无服务器计算(FaaS)

  1. 简述

无服务器计算(Serverless Computing),实质上将计算与容器实例脱离, 可以把一个具有独立功能的函数,来作为一个单独的服务进行部署和运行, 也称为函数即服务(Function-as-a-Service,FaaS)。

  1. 使用流程

在这里插入图片描述

  1. 新建函数

函数创建方式选择【HTTP函数】

在这里插入图片描述

函数运行配置:

在这里插入图片描述

触发器配置:

在这里插入图片描述

  1. 代码编辑

创建完成后, 默认会自动生成一段代码, 可以通过在线编辑器, 编写自己所需要的代码。

在这里插入图片描述

  1. 测试验证

通过触发器所提供的路径, 直接访问:

在这里插入图片描述

执行结果:

[root@localhost ~]# curl https://1567235516853620.cn-qingdao.fc.aliyuncs.com/2016-08-15/proxy/guide-hello_world/calc_test/
{
 "path": "/",
 "queries": {},
 "headers": {
  "accept": "*/*",
  "host": "1567235516853620.cn-qingdao.fc.aliyuncs.com",
  "user-agent": "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",
  "x-forwarded-proto": "https"
 },
 "method": "GET",
 "requestURI": "/2016-08-15/proxy/guide-hello_world/calc_test/",
 "clientIP": "113.118.76.129",
 "body": ""
}

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

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

相关文章

AIoT+5G改变智慧城市:揭秘智慧公厕的奇妙魅力

AIoT5G的新型智慧城市应用带来了智慧公厕的全新体验。通过智能监测、高速网络、智能调控、智慧管理等技术应用,公厕的舒适性、便捷性和智慧化程度得到了极大提升。可以看到的是,智慧公厕正逐渐激活智慧城市的生活场景,为城市居民带来更好的生…

无需租用云服务器:使用Linux本地搭建web服务并实现内网穿透发布公网访问的详细教程

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道,指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

Mac电脑其他文件占用超过一大半的内存如何清理?

mac的存储空间时不时会提示内存已满,查看内存占用比例最大的居然是「其他文件」,「其他文件」是Mac无法识别的格式文件或应用插件扩展等等...如果你想要给Mac做一次彻底的磁盘空间清理,首当其冲可先对「其他文件」下手,那么我们该…

Mactracker for mac,让您轻松掌握Mac电脑硬件信息的利器

Mactracker for mac是一款运行在MacOS平台上的Mac硬件信息查询工具。它能够方便地显示您电脑所有硬件的信息,包括处理器速度、内存、光盘驱动器、图形卡、支持的macOS版本和扩展选项等。此外,它还提供了有关Apple鼠标、键盘、显示器、打印机、扫描仪、数…

TensorFlow(R与Python系列第四篇)

目录 一、TensorFlow介绍 二、张量 三、有用的TensorFlow运算符 四、reduce系列函数实现约减 1-第一种理解方式:引入轴概念后直观可理 2-第二种理解方式:按张量括号层次的方式 参考: 一、TensorFlow介绍 TensorFlow是一个强大的用于数…

通过HFS低成本搭建NAS,并内网穿透实现公网访问

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 云存储作为一个新概念,在前些年炒的火热,虽然伴随一系列黑天鹅…

打不开github,解决方案

国内加载Githup会很慢,有时候会自己连接超时进不去, 那么如何访问呢,下面就带大家来一起操作 这篇文章借鉴于(解决国内 github.com 打不开的最最最准确方法_杨大脸I的博客-CSDN博客) 原作者是它,我这里也是…

同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?

据报道,苹果公司计划在本月推出 iOS 17 和 iPadOS 17 正式版更新。与去年不同的是,这次更新将同时发布,而不是分别发布。根据彭博社的一位消息人士马克・古尔曼的说法,苹果公司认为 iOS 17 和 iPadOS 17 的第八个测试版已经非常接…

若伊代码分析(前端 vue2 登录页)

目录 前端项目搭建 项目调整及element引入 登录界面样式 获取验证码 全局变量 vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令 配置.env文件 获取.env中的全局变量 实际用处 --------项目代码------- 跨域配置 配置代理方式一 配置代理…

更健康舒适更科技的照明体验!书客SKY护眼台灯SUKER L1上手体验

低价又好用的护眼台灯是多数人的需求,很多人只追求功能性护眼台灯,显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到,然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯,拥有高品质光源&#xff…

【2023】CompletableFuture使用代码案例实习使用场景介绍

CompletableFuture 一、介绍1、概述2、常用方法 二、方法使用1、异步操作1.1、创建任务(runAsync | supplyAsync)runAsyncsupplyAsync 1.2、获取结果(get | join)1.3、异常处理(whenComplete | exceptionally&#xff…

机器学习(吴恩达第一课)

课程链接 文章目录 第一周1、机器学习定义2、监督学习(Supervised learning)1、回归(Regression)2、分类(Classification) 3、无监督学习(Unsupervised learning)4、线性回归模型5、代价函数6、梯度下降(Gradient descent)1、学习率2、用于线性回归的梯度下降 第二周(多维特征…

根据梁山好汉的武力值排交椅:python知识点串联sorted,enumerate,zip,list comprehension

故事发生的背景是这样的,水泊梁山好汉武松,鲁智深,杨志三人在上梁山前,共同落草过二龙山,好汉们需要根据其战斗力的高低来排座次,战斗力最高的坐第一把交椅,其次的坐第二把交椅,以此…

【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session

5.登录功能 通过最基础的登录操作来完成登录处理 登录页面处理 认证服务的处理 /*** 注册的方法* return*/PostMapping("/login")public String login(LoginVo loginVo , RedirectAttributes redirectAttributes){R r memberFeginService.login(loginVo);if(r.getC…

22 元类技术(面向切片编程)|ORM的实现|抽象类与接口类

文章目录 前情知识补充hasattr 函数setattr函数getattr函数join 函数 元类技术使用type创建类什么是元类(概念总结)\_\_metaclass\_\_属性使用metaclass 的函数方式进行创建类使用metaclass 的类方式进行创建类 自定义元类 元类实现ORM接口类与抽象类抽象…

分治NTT/在线卷积

https://www.luogu.com.cn/problem/P4721 已知 g g g,求 考虑分治,现在在 [ l , r ] [l,r] [l,r],先计算 [ l , m i d ] [l, mid] [l,mid],然后计算 [ l , m i d ] [l, mid] [l,mid] 对 [ m i d 1 , r ] [mid1,r] [mid1,r…

Java elasticsearch scroll模板实现

一、scroll说明和使用场景 scroll的使用场景:大数据量的检索和操作 scroll顾名思义,就是游标的意思,核心的应用场景就是遍历 elasticsearch中的数据; 通常我们遍历数据采用的是分页,elastcisearch还支持from size的方…

Redis基础知识(二):事务机制

文章目录 一、什么是事务机制?二、Redis模式下如何实现事务机制?2.1 显式开启一个事务2.2 将命令入队列Queue2.3 执行事务或丢弃2.4 EXEC命令执行示例2.5 DISCARD命令:放弃事务2.6 因为命令错误导致的事务回滚 三、Redis事务机制能实现哪些属…

气象监测——关于气象监测站的介绍

在科技日益发展的今天,人类对自然环境的认识和依赖程度越来越高。气象监测站作为用于收集、分析和传播气象数据的设施,为天气预报、气候变化研究、灾害防治等方面提供数据支持。随着科技的不断进步,气象监测站已经发展成为集多种高科技设备于…

leetcode 594.最长和谐子序列(滑动窗口)

⭐️ 题目描述 🌟 leetcode链接:最长和谐子序列 思路: 第一步先将数组排序,在使用滑动窗口(同向双指针),定义 left right 下标,比如这一组数 {1,3,2,2,5,2,3,7} 排序后 {1,2,2,2,3,…