优秀的编程知识分享平台

网站首页 > 技术文章 正文

基于阿里云的基础架构设施保障(四)IAAS进阶实践运用

nanyue 2024-08-09 07:12:10 技术文章 9 ℃

1. 高可用弹性伸缩实践

  1. 背景

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

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

    要实现弹性伸缩服务, 还需要负载均衡器作为辅助组件,它可以将流量均匀地,或者按照一定权重或规则,分发到多台虚拟机上。 在峰值场景下,可以实现对应用服务的动态扩容, 在低峰下, 可以缩减节点, 降低运营成本。

  2. 创建ECS实例

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

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

  3. 创建负载均衡SLB

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

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

    协议监听配置:

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

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

    开启健康检查:

    最后确认提交即可。

  4. 配置服务运行方式(服务部署方式)

    • 编写服务接口

      计算斐波那契数列:

      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=elasticserviceAfter=network.target remote-fs.target nss-lookup.target[Service]Type=simplePIDFile=/run/elasticservice.pidExecStart=/usr/local/elasticstart.shExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDExecReload=PrivateTmp=trueRemainAfterExit=yesExecStartPre=[Install]WantedBy=multi-user.target

      创建elasticstart.sh脚本:

      #!/bin/bashnohup /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
  5. 测试验证(服务部署方式)

    通过接口进行访问:

    http://47.105.205.141/calcFib?num=123

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

    进入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/nodeln -s /usr/local/node-v10.13.0-linux-x64/bin/npm /usr/bin/npm
    • 安装运行模块依赖

      npm install expressnpm install ipnpm 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=nodeappserviceAfter=network.target remote-fs.target nss-lookup.target[Service]Type=simplePIDFile=/run/nodeapp.pidExecStart=/bin/setsid /usr/bin/node /usr/local/server.jsRestart=/bin/pkill node && /bin/setsid /usr/bin/node /usr/local/server.jsExecStop=/bin/pkill nodeExecReload=PrivateTmp=trueRemainAfterExit=yesExecStartPre=[Install]WantedBy=multi-user.target

      设置开机启动:

      systemctl enable nodeapp
  7. 测试验证(非服务部署方式)

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

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

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

  8. 创建自定义镜像

    用于弹性机器扩容使用

  9. 创建伸缩组

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

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

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

    创建完成:

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

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

  10. 创建弹性伸缩规则

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

  11. 负载测试验证

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

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

    [root@localhost siege-4.0.2]# curl http://47.104.145.210/fibo/35Fibo(35) = 14930352Server: iZm5ecgyf8ael3v9zrtx89Z ,  private ip: 172.31.141.111[root@localhost siege-4.0.2]# curl http://47.104.145.210/fibo/35Fibo(35) = 14930352Server: iZm5egp1t778ocdk7f1j6fZ ,  private ip: 172.31.141.105
  12. 安装压测组件:

    下载:

    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./configuremakemake install
  13. 压力测试

    [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/99HTTP/1.1 200     0.22 secs:      84 bytes ==> GET  /fibo/99HTTP/1.1 200     0.22 secs:      84 bytes ==> GET  /fibo/99HTTP/1.1 200     0.22 secs:      84 bytes ==> GET  /fibo/99HTTP/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)。

  2. 使用流程

  3. 新建函数

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

    函数运行配置:

    触发器配置:

  4. 代码编辑

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

  5. 测试验证

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

    执行结果:

    [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": ""}

本文由mirson创作分享, 欢迎关注, 谢谢

Tags:

最近发表
标签列表