阿里云体验实验室

阿里云体验实验室 查看完整档案

杭州编辑  |  填写毕业院校阿里云  |  运营 编辑 developer.aliyun.com/adc/labs/ 编辑
编辑

阿里云开发者实验室提供免费云资源和丰富的场景化实践,旨在帮助开发者在学习应用技术,了解阿里云产品的特性。

个人动态

阿里云体验实验室 发布了文章 · 10月29日

基于阿里云函数计算实现AI推理

场景介绍

基于阿里云函数计算建立一个TensorFlow Serverless AI推理平台。。

背景知识

函数计算 Function Compute 是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询、性能监控和报警等功能。函数计算帮助您无需管理服务器(Serverless),仅专注于函数代码就能快速搭建应用。函数计算能够弹性地伸缩,您只需要按使用量付费。
优势总结:基于函数计算进行 AI 推理等 CPU 密集型的主要优势
1.上手简单, 只专注业务逻辑开发, 极大提高工程开发效率。

自建方案有太多学习和配置成本,如针对不同场景,ESS 需要做各种不同的参数配置
系统环境的维护升级等。

  1. 免运维,函数执行级别粒度的监控和告警。

3.毫秒级弹性扩容,保证弹性高可用,同时能覆盖延迟敏感和成本敏感类型。

4.在 CPU 密集型的计算场景下, 通过设置合理的组合计费模式, 在如下场景中具有成本优势:

请求访问具有明显波峰波谷, 其他时间甚至没有请求
有一定稳定的负载请求, 但是有部分时间段请求量突变剧烈

场景体验

场景将介绍使用函数计算产品部署深度学习 AI 推理平台的最佳实践,基于函数计算 Function Compute。

让人工智能领域开发者可以更专注于算法模型的训练与业务逻辑的开发,将计算集群的运维工作交给函数计算,提高工作效率。

最终效果:
通过上传一个猫或狗的照片, 识别出这个照片里面的动物是猫还是狗。DEMO 示例效果入口: http://sz.mofangdegisn.cn

步骤一:连接ECS服务器

ECS资源地址:https://developer.aliyun.com/...
参考文章步骤链接ECS

步骤二:开通函数计算服务

在使用函数计算前,您需要在阿里云产品详情页开通服务。

步骤三:安装Fun工具

Fun 是一个用于支持Serverless应用部署的工具,能帮助您便捷地管理函数计算、API 网关和日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建和部署操作。
1.将Fun的安装包下载到本地。请将下面的FUN_VERSION变量的值设置为最新版本号,最新版本号请参见Releases。以下操作将在ECS服务器上安装和配置Fun。

FUN_VERSION="v3.6.1" 
curl -o fun-linux.zip https://gosspublic.alicdn.com/fun/fun-$FUN_VERSION-linux.zip

2.安装解压工具unzip,并使用unzip将下载的Fun安装包解压到当前目录。

yum -y install unzip 
unzip fun-linux.zip

3.将解压出来的可执行文件移动到系统路径。

mv fun-*-linux /usr/local/bin/fun

4.配置Fun关联的阿里云账号和调用SDK的超时时间等信息。

fun config

请参考以下信息输入您的阿里云账号ID、AccessKeyID和AccessKey密钥等信息。

  • Aliyun Account
    ID:子用户名称中@符号后面部分就是给您分配的主账号ID,例如u-zftb79nc@105997185439中包含的账号ID为105997185439
  • Aliyun Access Key ID和Aliyun Access Key Secret:请使用平台提供给您的子账号AK ID和AK
    Secret。

在这里插入图片描述

  • The timeout in seconds for each SDK client
    invoking:建议将超时时间设置长一点(例如10000),防止在上传部署包时发生超时中断。

正确设置如下所示:
在这里插入图片描述

步骤四:安装Docker

1.安装Docker的依赖库。

yum install -y yum-utils device-mapper-persistent-data lvm2

2.添加docker-ce的软件源信息。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装docker-ce。

yum makecache fast
yum -y install docker-ce

4.启动Docker服务。

systemctl start docker

步骤五:创建NAS文件系统挂载点

1.登录NAS控制台
2.选择文件系统 > 文件系统列表。
3.在左上角选择云资源所在地域。
在这里插入图片描述
4.找到体验页面左侧资源信息栏中的NAS文件系统ID对应的文件系统,单击更多 > 添加挂载点。
5.在添加挂载点页面,配置如下参数。
在这里插入图片描述
6.查看挂载点地址,如下图。
在这里插入图片描述

步骤六:下载项目代码

1.安装Git工具并使用Git克隆项目代码到本地。

yum -y install git
git clone https://github.com/awesome-fc/cat-dog-classify.git

2.编辑项目中FUN的部署模板文件template.yml,修改日志服务项目名称和NAS存储挂载配置。
a.使用vim打开模板文件。

cd cat-dog-classify
vim template.yml

b.输入以下命令全局替换日志服务项目名称。

:%s/log-ai-pro/log-ai-test/g

命令中log-ai-test为修改后的项目名称,您可以替换为您的自定义项目名称。

c.修改NAS挂载配置。默认auto方式将会自动创建NAS文件系统,这里我们修改填写为平台预创建好的NAS文件系统的信息。

      VpcConfig:
        VpcId: 'vpc-uf6u8*****zf1r4'
        VSwitchIds: [ 'vsw-uf6******038fy' ]
        SecurityGroupId: 'sg-uf6e******w6qz'
      NasConfig:
        UserId: 10003
        GroupId: 10003
        MountPoints:
          - ServerAddr: '33****u83.cn-shanghai.nas.aliyuncs.com:/'
            MountDir: '/mnt/auto'

修改的参数说明如下:

  • VpcConfig中的VpcId、VSwitchId和SecurityGroupId信息请到ECS控制台的实例详情页查看。
  • ServerAddr的值修改为步骤三中的挂载点地址。

修改后如下图所示:
在这里插入图片描述

步骤七:将依赖文件上传到NAS

1.执行以下命令初始化NAS。

fun nas init

2.查看本地NAS的目录位置。

fun nas info

命令输出如下所示:
在这里插入图片描述

3.执行以下命令安装相关依赖。

fun install -v

命令执行成功结果如下所示。

在这里插入图片描述
该命令将根据Funfile文件中的定义:

  • 将依赖下载到.fun/nas/auto-default/classify/python目录中。
  • 将model中的模型文件拷贝到.fun/nas/auto-default/classify/model/目录中。

4.将本地NAS目录同步到阿里云NAS存储中。

fun nas sync

命令执行结果如下所示。
在这里插入图片描述
说明 同步的文件有700M左右,内容较多,同步时间约40分钟左右,请耐心等待。

5.查看文件是否上传到远程NAS目录。

fun nas ls nas://classify:/mnt/auto/

步骤九:部署到函数计算平台

执行以下操作将函数部署到函数计算平台:

fun deploy -y

执行结果如下图所示,图中19176540-18576685985*.test.functioncompute.com为函数计算平台分配的临时域名,有效期10天,每天有1000次的调用限制。
在这里插入图片描述
如果部署时出现如下错误信息。
在这里插入图片描述
问题原因:模板配置文件中定义的日志项目名称已存在。
解决方法:请修改template.yml文件中日志项目名称。

步骤九:测试预测服务

1.部署完成后,等待30秒钟左右,在浏览器打开临时域名,如下图所示。
在这里插入图片描述
如果访问页面时出现类似下面引入模块错误。
在这里插入图片描述
问题原因:由于网络问题,NAS同步内容不完整。
解决方法:请重新执行命令fun nas sync。

2.上传一张猫或狗的图片。
在这里插入图片描述
3.单击Predict按钮,查看预测识别结果。
在这里插入图片描述
函数计算具有动态伸缩的特性, 根据并发请求量,自动弹性扩容出执行环境来执行环境。当预留的实例不能满足调用函数的请求时, 函数计算就自动进行按需扩容实例供函数执行,此时的调用就有冷启动的过程。使用预留模式可以消除冷启动毛刺问题,详情请参见预留实例。

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 发布了文章 · 10月27日

使用WordPress搭建一个专属自己的博客

场景介绍

使用一台基础环境为CentOS 的ECS(云服务器)实例,服务器上已经内置LAMP环境。在这在服务器上安装 WordPress,帮助您快速搭建自己的云上博客。
阿里云云服务器资源免费体验

背景知识

本场景主要涉及以下云产品和服务:

云服务器ECS
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

Wordpress
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用。

本场景最终实现的效果类似如下:
博客首页
在这里插入图片描述
博客编辑页面
在这里插入图片描述

步骤一:连接ECS服务器

具体操作可见阿里云体验实验室连接步骤

如尚未购买及操作ECS,可在此处免费体验阿里云ECS服务器。
资源地址:
https://developer.aliyun.com/adc/scenario/ae75736b49b940d1a78fee1453232d94

步骤二:安装WordPress中文版

1.安装WordPress。
a.执行以下命令,获取wordpress中文安装包。

wget https://cn.wordpress.org/latest-zh_CN.tar.gz

b.执行以下命令,解压。

tar -zxvf latest-zh_CN.tar.gz

c.执行以下命令,移动wordpress到Apache根目录。

mkdir /var/www/html/wp-blog
mv wordpress/* /var/www/html/wp-blog/

2.初始化wordpress。

a.执行以下命令,查看wp-config-sample.php文件。

cat -n /var/www/html/wp-blog/wp-config-sample.php

在这里插入图片描述
b.由上图可以看出,需要手动复制并配置wordpress。
执行以下命令,复制wp-config-sample.php为wp-config.php,并修改其中的数据库配置。

cp wp-config-sample.php wp-config.php  
# database_name_here为数据库名称
sed -i 's/database_name_here/wordpress/' /var/www/html/wp-blog/wp-config.php
# username_here为数据库的用户名
sed -i 's/username_here/root/' /var/www/html/wp-blog/wp-config.php
# password_here为数据库的登录密码
sed -i 's/password_here/NewPassWord1./' /var/www/html/wp-blog/wp-config.php

3.启动Apache服务器。

systemctl start httpd

4.浏览器访问http://<ECS公网IP>/wp-blog/wp-admin/install.php完成wordpress初始化配置。

5.访问http://<ECS公网IP>/wp-blog/wp-admin/index.php登录WordPress管理控制台。
在这里插入图片描述

步骤三:自定义站点主题

WordPress功能的强大,很大程度是因为它良好的扩展和众多的主题、插件支持。
WordPress可以通过一般可以通过2种安装方法来安装。

  • 方式一:在线搜索安装

a.浏览器访问WordPress管理控制台。
b.依次单击外观>主题。
在这里插入图片描述
c.单击添加。选择您喜欢的主题进行安装。

  • 方式二:直接上传主题到wordpress服务器。

a.浏览器访问https://cn.wordpress.org/them...
在这里插入图片描述
b.单击功能过滤。
c.在布局列勾选一栏、特色列勾选无障碍友好、主题列勾选博客,然后单击应用过滤器。
在这里插入图片描述
d.选择您喜欢的主题。例如:Markiter。
在这里插入图片描述
e.右键单击下载,然后单击复制链接地址。
在这里插入图片描述
f.连接ECS服务器。
g.在命令行中,执行以下命令,下载并安装主题。

# 首先进入WordPress主题目录
cd /var/www/html/wp-blog/wp-content/themes/
# 使用wget命令下载上一步选择的主题
wget https://downloads.wordpress.org/theme/markiter.1.5.zip
# 使用unzip命令解压安装包
unzip markiter.1.5.zip
# 查看所有主题
ll

命令执行结果类似如下。
在这里插入图片描述
h.返回Wordpress管理控制台,进入主题页,可以看到Markiter主题已经安装完成。
在这里插入图片描述
i.单击启用,应用主题。
在这里插入图片描述

步骤三:添加自定义小组件

1.连接ECS服务器。
2.执行以下命令,编辑博客主题的页脚文件footer.php。

vim /var/www/html/wp-blog/wp-content/themes/markiter/footer.php

3.在文件</body>标签前面加入以下代码。

<script data-original="https://cdn.jsdelivr.net/npm/live2d-widget@3.0.4/lib/L2Dwidget.min.js"></script>
<script type="text/javascript">
    L2Dwidget.init();
</script>

4.浏览器访问http://&lt;ECS公网IP>/wp-blog/,进入博客首页查看组件效果。
在这里插入图片描述
5.至此,界面设置全部完成。

步骤四:安装MarkDown插件

WordPress安装插件的方式和安装主题的方式比较类似,都分为在线安装和离线安装。本步骤主要介绍离线安装。
1.连接ECS服务器。
2.执行以下命令,进入wordpress插件目录。

cd /var/www/html/wp-blog/wp-content/plugins/

3.执行以下命令,下载MarkDown插件。

wget https://downloads.wordpress.org/plugin/wp-editormd.10.1.2.zip

4.下载完成后,执行以下命令,解压安装包。

unzip wp-editormd.10.1.2.zip

5.返回WordPress管理控制台,然后依次单击插件>已安装的插件
在这里插入图片描述
6.单击启用,启用MarkDown插件。
在这里插入图片描述
编辑器效果如下。
在这里插入图片描述
7.至此,MarkDown插件安装完成。更多插件请访问https://cn.wordpress.org/plug...

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 发布了文章 · 10月23日

基于ECS搭建云上博客

场景介绍

本文为您介绍如何基于ECS搭建云上博客。

背景知识

本场景主要涉及以下云产品和服务:

云服务器ECS
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

Wordpress
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用。

场景体验

本场景将提供一台基础环境为CentOS 的ECS(云服务器)实例。我们将会在这台服务器上安装和部署LAMP环境,然后安装 WordPress,帮助您快速搭建自己的云上博客。首先您需要登录到已创建的ECS虚拟服务器上,然后在云服务器上安装一个MySQL数据库来存储博客内容。

步骤一:连接ECS服务器

具体操作可见阿里云体验实验室连接步骤

如尚未购买及操作ECS,可在此处免费体验阿里云ECS服务器。
资源地址:https://developer.aliyun.com/adc/scenario/fdecd528be6145dcbe747f0206e361f3

步骤二:安装Apache服务(连接ECS后)

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

1.执行如下命令,安装Apache服务及其扩展包。

yum –y install httpd httpd-manual mod_ssl mod_perl mod_auth_mysql

2.返回类似如下图结果则表示安装成功。
在这里插入图片描述

执行如下命令,启动Apache服务。

systemctl start httpd.service

3.测试Apache服务是否安装并启动成功。

Apache默认监听80端口,所以只需在浏览器访问ECS分配的IP地址http://&lt;ECS公网IP>,如下图:
在这里插入图片描述

步骤三:安装MySQL数据库

由于使用wordpress搭建云上博客,需要使用MySQL数据库存储数据,所以这一步我们安装一下MySQL。
1.执行如下命令,下载并安装MySQL。

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

在这里插入图片描述
2.执行如下命令,启动 MySQL 数据库。

systemctl start mysqld.service

3.执行如下命令,查看MySQL运行状态。

systemctl status mysqld.service

在这里插入图片描述
4.执行如下命令,查看MySQL初始密码。

grep "password" /var/log/mysqld.log

在这里插入图片描述
5.执行如下命令,登录数据库。

mysql -uroot -p

在这里插入图片描述

6.执行如下命令,修改MySQL默认密码。
说明:新密码设置的时候如果设置的过于简单会报错,必须同时包含大小写英文字母、数字和特殊符号中的三类字符。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassWord1.';

7.执行如下命令,创建wordpress库。

create database wordpress; 

8.执行如下命令,查看是否创建成功。

show databases;

9.输入exit退出数据库。

在这里插入图片描述

步骤四:安装PHP环境

WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用。

1.执行如下命令,安装PHP环境。

yum -y install php php-mysql gd php-gd gd-devel php-xml php-common php-mbstring php-ldap php-pear php-xmlrpc php-imap

2.执行如下命令创建PHP测试页面。

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

3.执行如下命令,重启Apache服务。

systemctl restart httpd

4.打开浏览器,访问http://&lt;ECS公网IP>/phpinfo.php,显示如下页面表示PHP语言环境安装成功。
在这里插入图片描述

步骤五:Wordpress安装和配置

1.执行如下命令,安装wordpress。

yum -y install wordpress

显示如下信息表示安装成功。

在这里插入图片描述
2.修改WordPress配置文件。
a.执行如下命令,修改wp-config.php指向路径为绝对路径。

# 进入/usr/share/wordpress目录。
cd /usr/share/wordpress
# 修改路径。
ln -snf /etc/wordpress/wp-config.php wp-config.php
# 查看修改后的目录结构。
ll

b.执行如下命令,移动wordpress到Apache根目录。

# 在Apache的根目录/var/www/html下,创建一个wp-blog文件夹。
mkdir /var/www/html/wp-blog
mv * /var/www/html/wp-blog/

c.执行以下命令修改wp-config.php配置文件。

在执行命令前,请先替换以下三个参数值。

  • database_name_here为之前步骤中创建的数据库名称,本示例为wordpress。
  • username_here为数据库的用户名,本示例为root。
  • password_here为数据库的登录密码,本示例为NewPassWord1.。

d.执行以下命令,查看配置文件信息是否修改成功。

cat -n /var/www/html/wp-blog/wp-config.php

在这里插入图片描述
3.执行如下命令,重启Apache服务。

systemctl restart httpd

步骤六:测试Wordpress

完成以上所有步骤后,就可以测试我们基于ECS所搭建的云上博客了。

1.打开浏览器并访问http://&lt;ECS公网IP>/wp-blog/wp-admin/install.php。
2.根据以下信息完成wordpress初始化配置。

  • Site Title:站点名称,例如:Hello ADC。
  • Username:管理员用户名,例如:admin。
  • Password:访问密码,例如:cIxWg9t@a8MJBAnf%j。
  • Your
    Email:email地址,建议为真实有效的地址。若没有,可以填写虚拟email地址,但将无法接收信息,例如:admin@admin.com。

在这里插入图片描述
3.单击Install WordPress完成Wordpress初始化。
4.单击Log In进行登录。
在这里插入图片描述
5.输入设置的用户名和密码。
在这里插入图片描述
6.登录后,您就可以添加博客进行发布了。
在这里插入图片描述

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 分享了头条 · 10月20日

一边学习一边领取礼品

赞 0 收藏 0 评论 0

阿里云体验实验室 发布了文章 · 10月14日

零门槛 领阿里云定制T 《快速玩转机器学习PAI DSW》10月14日热烈来袭

PAI DSW是一款云端机器学习开发IDE,无需任何运维配置,可直接进行Notebook编写、调试及运行Python代码。

活动说明:
1.活动期间跟着操作说明完成下方任务,即可领取定制版T恤。。(同一用户的不同账号限领一次)
2.奖品数量共800件, 每日上午10点刷新100件,领完即止。前一天完成答题但没抢到奖品的用户可以次日再来领取;
4.奖品以实物为主,图片仅供参考。奖品数量有限,领完活动即终止,本活动最终解释权归阿里云所有。

活动时间:
2020.10.14-2020.10.21

Step1 登陆 阿里云账户,进入活动页面
Step2 体验“天池PAI-DSW动手实验室”——创建一个斐波那契数列计算函数——PAI-DSW技能自测
Step3 领取奖品,填写收件人信息及尺码-T恤为正常版型。(奖品将在活动结束后20个工作日内发出)

活动地址:
https://developer.aliyun.com/...

礼品参考:
image.png

Q: 没有摄像头 可以用手机答题吗?
A: 可以! 将手机浏览器设置 浏览器标识(UA)设置为电脑,然后打开考试页开始考试

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 发布了文章 · 10月12日

基于ECS和NAS搭建个人网盘

场景介绍

本文为您介绍如何快速搭建一个基于ECS和NAS的私有网盘。

背景知识

本场景主要涉及以下云产品和服务:
云服务器ECS
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

文件存储NAS
阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例、E-HPC 和容器服务等计算节点的文件存储服务。NAS 提供了简单的可扩展文件存储以供与 ECS 配合使用,多个ECS实例可以同时访问 NAS 文件系统,并且存储容量会随着您添加和删除文件而自动弹性增长和收缩,为在多个实例或服务器上运行的工作负载和应用程序提供通用数据源。

场景体验

以下阿里云体验实验室页面将提供一台配置了CentOS 7.7的ECS实例(云服务器)和创建好的NAS文件存储系统。通过本教程的操作,您可以基于已有的环境快速搭建一个个人网盘。
阿里云 场景资源
https://developer.aliyun.com/adc/scenario/bd0643a87c3e4cde8b488a56850df181

步骤一:安装OwnCloud

OwnCloud是一款开源的云存储软件,基于PHP的自建网盘。基本上是个人使用,没有用户注册功能,但是有用户添加功能,你可以无限制地添加用户,OwnCloud支持多个平台(Windows,MAC,Android,IOS,Linux)。

1.执行以下命令,添加一个新的软件源。

rpm --import https://download.owncloud.org/download/repositories/10.0/CentOS_7/repodata/repomd.xml.key
wget http://download.owncloud.org/download/repositories/10.0/CentOS_7/ce:10.0.repo -O /etc/yum.repos.d/ce:10.0.repo

2.执行以下命令安装OwnCloud-files。

yum -y install owncloud-files

3.执行以下命令查看安装是否成功。

ll /var/www/html

在这里插入图片描述

步骤二:安装Apache服务

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行。由于其跨平台和安全性,被广泛使用,是最流行的Web服务器软件之一。

1.执行以下命令安装Apache服务。

yum -y install httpd

2.执行以下命令启动Apache服务。

systemctl start httpd

3.打开浏览器输入体验平台创建的ECS的弹性公网IP。如果出现如下图内容表示Apache安装成功。
Apache测试界面

4.添加OwnCloud配置:
a.执行以下命令打开Apache配置文件。

vim /etc/httpd/conf/httpd.conf

b.按i键进入文件编辑模式,然后在<Directory>内容后添加以下内容。

# owncloud config
Alias /owncloud "/var/www/html/owncloud/"
<Directory /var/www/html/owncloud/>
    Options +FollowSymlinks
    AllowOverride All
    <IfModule mod_dav.c>
        Dav off
    </IfModule>
    SetEnv HOME /var/www/html/owncloud
    SetEnv HTTP_HOME /var/www/html/owncloud
</Directory>

directory目录

c.按esc键退出编辑模式,然后输入:wq保存并退出配置文件。

步骤三:安装并配置PHP

由于OwnCloud是基于PHP开发的云存储软件,需要PHP运行环境,请根据以下步骤完成OwnCloud工作环境的配置。

1.执行以下命令手动更新rpm源。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm   
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm   

2.执行以下命令安装PHP 7.2版本。
说明: OwnCloud只支持PHP 5.6+。

yum -y install php72w
yum -y install php72w-cli php72w-common php72w-devel php72w-mysql php72w-xml php72w-odbc php72w-gd php72w-intl php72w-mbstring

3.执行以下命令检测PHP是否安装成功。

php -v

4.将PHP配置到Apache中:
a.执行以下命令,找到php.ini文件目录。

find / -name php.ini

b.执行以下命令打开httpd.conf文件。

vim /etc/httpd/conf/httpd.conf

c.按i键进入文件编辑模式,然后在文件最后添加以下内容。

PHPIniDir /etc/php.ini

d.按esc键退出编辑模式,然后输入:wq保存并退出配置文件。
e.执行以下命令,重启Apache服务。

systemctl restart httpd

步骤四:配置OwnCloud

完成上述配置后,您就可以登录OwnCloud创建个人网盘了。

1.打开浏览器,输入ECS弹性IP/owncloud,例如1.1.1.1/owncloud。
2.创建管理员账号和密码,然后单击存储&数据库,最后单击安装完成。
OwnCloud初始化界面

3.输入已创建的用户名和密码登录Owncloud。
OwnCloud登录界面

登录成功界面如下:

使用界面

步骤五:挂载NAS服务

完成OwnCloud初始化之后就可以将NAS存储包挂载到您的网盘服务器上。

1.在体验平台左侧资源栏,单击一键复制登录url,然后在浏览器中粘贴已复制的url。
登录

2.输入体验平台提供的子用户名和密码,登录阿里云控制台。在产品列表,搜索NAS,然后单击文件存储NAS。
nas

3.选择文件系统>文件系统列表,然后单击文件系统 ID进入文件系统详情页。
文件系统

4.选择挂载使用,然后单击添加挂载点选择专有网络,最后单击确定。
添加挂载点

5.在命令行终端,执行以下命令安装NFS客户端。

yum install nfs-utils

6.在控制台,单击挂载文件系统到ECS查看挂载命令。
guazaimingling

7.在打开的挂载文件系统到ECS页面复制挂载命令。
复制

a.点击挂载命令复制按钮。
c.运行。
挂载

8.将复制好的挂载命令粘贴到记事本中,然后把命令最后的/mnt替换为:/var/www/html/owncloud/data/<OwnCloud登录名>。
例如:

sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 3ad894afd4-uon67.cn-shanghai.nas.aliyuncs.com:/ /var/www/html/owncloud/data/admin

9.在命令窗口执行上一步骤的挂载命令。
挂载

10.执行以下命令查看挂载是否成功。

df -h | grep aliyun

aa

注意:NAS挂载成功后,OwnCloud网盘中的默认目录和文件不可读写,请在网盘中新建目录上传。

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 发布了文章 · 9月29日

基于ECS搭建FTP服务(阿里云)

介绍

介绍了如何在Linux实例上安装并配置vsftpd。

背景知识

本场景主要涉及以下云产品和服务:

云服务器ECS
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

FTP
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

vsftpd
vsftpd(very secure FTP daemon)是一款在Linux发行版中最受推崇的FTP服务器。它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

场景体验

以下地址是阿里云体验实验室提供的一台配置了CentOS 7.7的ECS实例(云服务器)并配置了弹性公网IP。您可以参考本教程的操作快速搭建FTP服务。
阿里云 场景资源
https://developer.aliyun.com/adc/scenario/74b64efe414c47fbaf305957a7fb458b

步骤一:安装vsftpd

1.运行以下命令安装vsftpd。

yum install -y vsftpd

返回如下图所示界面时,表示安装成功。install_vsftp_successfully

2.运行以下命令设置FTP服务开机自启动。

systemctl enable vsftpd.service

3.启动FTP服务。

systemctl start vsftpd.service

4.运行以下命令查看FTP服务监听的端口。

netstat -antup | grep ftp

出现如下图所示界面,表示FTP服务已启动,监听的端口号为21。此时,vsftpd默认已开启匿名访问功能,您无需输入用户名密码即可登录FTP服务器,但没有修改或上传文件的权限。install_vsftpd_3

步骤二:配置vsftpd

vsftpd(very secure FTP daemon)是一款在Linux发行版中最受推崇的FTP服务器。vsftpd支持匿名访问和本地用户模式两种访问方式。匿名访问方式任何用户都可以访问搭建的FTP服务;本地用户模式只支持添加的本地用户访问搭建的FTP服务。

说明:匿名用户模式和本地用户模式只可同时配置一种。

  • 匿名用户模式

a.修改配置文件vsftpd.conf。

vim /etc/vsftpd/vsftpd.conf

按i键进入编辑模式,将匿名上传权限
anon_upload_enable=YES的注释解开。
配置vsftpd.conf

b.按ESC键退出编辑模式,输入:wq保存并退出vim。
c.更改/var/ftp/pub目录的权限,为FTP用户添加写权限。

chmod o+w /var/ftp/pub/

d.重启FTP服务。

systemctl restart vsftpd.service

匿名权限2

  • 本地用户模式

a.为FTP服务创建一个Linux用户。

adduser ftptest

为用户设置密码。

passwd ftptest   

在Linux中创建用户

b.创建一个供FTP服务使用的文件目录。

mkdir /var/ftp/test

c.更改/var/ftp/test目录的拥有者为ftptest。

chown -R ftptest:ftptest /var/ftp/test

d.修改vsftpd.conf配置文件。

  • 配置FTP为主动模式请执行如下命令。
sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf #禁止匿名登录FTP服务器
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf                     #监听IPv4 sockets
sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' /etc/vsftpd/vsftpd.conf         #关闭监听IPv6 sockets
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf #全部用户被限制在主目录
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf #启用例外用户名单
sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf #指定例外用户列表文件,列表中的用户不被锁定在主目录
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
echo "local_root=/var/ftp/test" >> /etc/vsftpd/vsftpd.conf #设置本地用户登录后所在的目录

配置FTP为被动模式请执行如下命令。

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf #禁止匿名登录FTP服务器
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf                     #监听IPv4 sockets
sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' /etc/vsftpd/vsftpd.conf         #关闭监听IPv6 sockets
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf #全部用户被限制在主目录
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf #启用例外用户名单
sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf #指定例外用户列表文件,列表中的用户不被锁定在主目录
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf
echo "local_root=/var/ftp/test" >> /etc/vsftpd/vsftpd.conf #设置本地用户登录后所在的目录

echo "pasv_enable=YES" >> /etc/vsftpd/vsftpd.conf #开启被动模式
echo "pasv_address=<FTP服务器公网IP地址>" >> /etc/vsftpd/vsftpd.conf #本教程中为Linux实例公网IP
echo "pasv_min_port=20" >> /etc/vsftpd/vsftpd.conf #设置被动模式下,建立数据传输可使用的端口范围的最小值
echo "pasv_max_port=1000" >> /etc/vsftpd/vsftpd.conf #设置被动模式下,建立数据传输可使用的端口范围的最大值

e.在/etc/vsftpd目录下创建chroot_list文件,并在文件中写入例外用户名单。

#使用vim命令编辑chroot_list文件,添加例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
vim /etc/vsftpd/chroot_list

说明:没有例外用户时,也必须创建chroot_list文件,内容可为空。
f.重启FTP服务。

systemctl restart vsftpd.service

步骤三:配置安全组

搭建好FTP服务后,在ECS实例安全组的入方向添加规则并放行下列FTP端口。

说明:大多数客户端位于局域网中,IP地址是经过转换的,因此ipconfig或ifconfig命令返回的IP不一定是客户端的真实公网IP地址。若后续客户端无法登录FTP服务器,请重新确认其公网IP地址。
1.在体验平台体验页面,单击一键复制登录url,输入已创建的子账号用户名和密码登录ECS控制台。

ecs

2.在左侧导航栏,单击网络与安全>安全组。

3.选择需要配置的安全组,在操作列中,单击配置规则。

4.选择安全组规则的规则方向,单击入方向>添加安全组规则。具体配置如下图:添加安全组
在这里插入图片描述

步骤四:客户端测试

FTP客户端、Windows命令行工具或浏览器均可用来测试FTP服务器。

说明:使用浏览器访问FTP服务器出错时,建议您清除浏览器缓存后再尝试。
1.打开Chrom浏览器,在地址栏中输入ftp://<FTP服务器公网IP地址>:FTP端口,本教程中为Linux实例的公网IP地址。例如:ftp://139.0.0.1:21。
2.在弹出的对话框中,输入用户名和密码,即可对FTP文件进行相应权限的操作。
说明:匿名模式无需进项登录操作。
登录界面类似如下:
在这里插入图片描述

登录界面登陆成功界面类似如下:
在这里插入图片描述

节选自阿里云体验实验室
原文:
https://developer.aliyun.com/...

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 发布了文章 · 9月25日

基于ECS搭建GitLab服务

介绍

本教程介绍如何基于ECS实例快速搭建一台GitLab服务器。

涉及产品

本场景主要涉及以下云产品和服务:

云服务器ECS
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

GitLab
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

阿里云场景免费体验

将使用一台基础环境为CentOS7.7的云服务器ECS实例,搭配您已有的云数据库RDS实例,帮助您快速搭建属于自己的云上博客。
阿里云 场景资源:(提供真实资源模拟)
https://developer.aliyun.com/adc/scenario/428cb14610574720a9faf64370a92785

步骤一:ECS体验资源准备

CentOS 7.7的ECS实例(云服务器)资源地址:
https://developer.aliyun.com/adc/scenario/c6503dac6031410a9dcf9aa4cf4d3184

步骤二:安装GitLab

1.执行以下命令,使用官方脚本添加Yum源。

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | bash

2.执行以下命令,安装GitLab。

yum -y install gitlab-ee

3.执行以下命令,使用默认配置初始化GitLab。

gitlab-ctl reconfigure

4.执行以下命令,启动GitLab。

gitlab-ctl start

在这里插入图片描述
5.执行以下命令,查看GitLab启动情况。

gitlab-ctl status

步骤三:测试

1.打开浏览器,直接输入ECS公网地址访问。例如:47.xx.xx.162。

2.设置管理员用户密码。
默认管理员用户为root,所以只需要设置root用户的密码即可。
在这里插入图片描述
3.使用管理员用户root和刚刚设置的登录密码进行登录。
在这里插入图片描述
登录成功界面如下。
在这里插入图片描述
4.至此,GitLab搭建完成。接下来您可以在GitLab中进行管理团队成员、管理代码仓库和管理持续集成自动化构建部署等工作。有关GitLab的使用更多请参考GitLab_EE_Doc。

查看原文

赞 0 收藏 0 评论 0

阿里云体验实验室 赞了文章 · 9月25日

为什么会精度丢失?教你看懂 IEEE-754!

原文链接:https://ssshooter.com/2020-09...

上图来自维基百科。

IEEE-754 标准是一个浮点数标准,存在 32、64、128 bit 三种格式(上面两幅图分别是 32 bit 和 64 bit 的情况,结构是一致的),JavaScript 使用的是 64 位,也就是常说的“双精度”,本文将以 64 位举例讲解 IEEE-754 标准。

从图中可知,IEEE-754 标准将 64 位分为三部分:

  • sign,1 bit 的标识位,0 为正数,1 为负数
  • exponent,指数,11 bit
  • fraction,小数部分,52 bit

为了举例方便,我们使用下面这串数字介绍 IEEE-754 标准

0100000001101101001000000000000000000000000000000000000000000000

不多不少 64 位,不信的数一数

sign

第 63 位(也是从左到右看的第一个数),在举例中,sign(符号)的值是 0,也就代表着这是一个正数。

fraction

之所以说 0 到 51 位(共 52 位)是 “fraction(小数)”,是因为这段数字在处理时会置于 1.(会有特例,后面会说)之后。

在举例中,属于 fraction 的 52 位是:

1101001000000000000000000000000000000000000000000000

这 52 位数字在本文中简称为 f(f 代指 fraction),加上前面提到需要添加的 1.,所谓的 1.f 是这样的:

1.1101001000000000000000000000000000000000000000000000

如果你问为什么要塞个 1 在前面,我也没查,总之就是这么规定的,这确实是名副其实的“小数”

但是拿到这一长串 1.f 要怎么用呢?就得结合 exponent 部分。

exponent

为更清晰地说明 exponent(指数)从二进制到十进制的转换,借用此文的一个“表格”:


%00000000000 0 → −1023 (lowest number)

%01111111111 1023 → 0

%11111111111 2047 → 1024 (highest number)

%10000000000 1024 → 1

%01111111110 1022 → −1

请特别注意,01111111111 代表的是 0,往上是正数,往下是负数

抽离出上面例子的 52 到 62 位(共 11 位),得到:10000000110,再转为十进制数 1030,因为 1023 才是 0,所以减去 1023 算出真正结果,即是 7。

要使用这个 exponent(指数,下面用字母 e 指代指数),我们将上面得到的 1.f 乘上 2 的 7 次方(为了节省位置,省略掉后面的 0):

1.f × 2e−1023 = 1.1101001 × 27 = 11101001

注意了,这是二!进!制!类比成十进制就是类似:1.3828171 × 107 = 13828171)

这就是“浮点数”的所谓浮点(Floating Point),小数点的位置可以随着指数的值左右漂移,这样可以更精细地表示一个数字;

与之相对的是定点(Fixed Point),例如一个数最大是 1111111111.1111111111,小数点永远固定在中间,这时候要表示绝对值小于或大于 1111111111.1111111111 的数就变得完全没有办法了。

在组合“fraction(小数)”和“exponent(指数)”得到 11101001 后,转为十进制即可,再加上没什么好解释的正负号 sign(标志位)(0 即为正数)

所以举例的

0100000001101101001000000000000000000000000000000000000000000000

其实就是以 IEEE-754 标准储存的 233

特殊情况

当 exponent(指数)为 -1023(也就是最小值,二进制表示为 7 个 0)时,是一种名为 denormalized 的特殊情况。

其表现为当前值的计算公式改为:

0.f × 2−1022

这就是 f 前不为 1 的特殊情况,这种情况可以用于表示极小的数字

总结

这位大佬的总结过于精辟:

表达式取值
(−1)s × %1.f × 2e−1023normalized, 0 < e < 2047
(−1)s × %0.f × 2e−1022denormalized, e = 0, f > 0
(−1)s × 0e = 0, f = 0
NaNe = 2047, f > 0
(−1)s × ∞ (infinity)e = 2047, f = 0

第一行正常情况,第二行是上面说的 0.f denormalized,第三行其实就是全 0。

第四第五行就是 e 的 11 位为全 1,如果 f 大于 0 就是 NaN,f 等于 0 就是无限大。

动手转换 IEEE-754

使用上面总结的公式,将 IEEE-754 算回十进制应该不难,但是自己动手,如何通过十进制数算出 IEEE-754 呢?

我们整一个看起来还挺简单的数字:-5432.1,再贴一下 64 bit 的组成图,免得大家翻来翻去

step1

看到负号,毫无疑问地,sign 就是 1 了,我们获得了第一块拼图,s = 1

step2

第二步,将 432.1 转为二进制。

正数部分转换,直到结果为 0 时停止:

计算结果余数
432/22160
216/21080
108/2540
54/2270
27/2131
13/261
6/230
3/211
1/201

由下往上写出结果:110110000

负数部分转换,直到结果为 0 时停止:

计算结果个位
0.1*20.20
0.2*20.40
0.4*20.80
0.8*21.61
0.6*21.21
0.2*20.40
0.4*20.80
0.8*21.61
0.6*21.21
0.2*20.40
0.4*20.80
0.8*21.61
0.6*21.21

没完没了,聪明的大家应该看出来了,这已经进入了无限循环状态。

就像十进制的三分一等于 0.33333333……,二进制的“十”分一等于 0.00011001100110011……,都是无限循环小数。

接着组合整数与小数部分:110110000.0[0011]

step3

转换为 1.f × 2e−1023 的格式

1.1011000000011001100110011001100110011001100110011010 × 28

用无限循环小数填满 f 的 52 位,

f = 1011000000011001100110011001100110011001100110011010

8 = e−1023,则 e 为 1031,转为二进制,

e = 10000000111

step4

拼图都凑齐了,组合在一起吧!s + e + f!

1100000001111011000000011001100110011001100110011001100110011010

这就是 IEEE-754 双精度浮点数 -5432.1 的真身。

为什么算不准

程序员们因为精度丢失苦不堪言,这个问题不仅仅发生在 JavaScript 里,只是可怜的 JavaScript 奇怪的设定更多,大家就经常把 0.1 + 0.2 的问题绑定到 JavaScript 身上,其实 Java 等使用 IEEE-754 标准的语言都会有这个问题(然而 Java 还有 BigDecimal,JavaScript 只能哭哭 )。

那么到底为什么会算不准呢?

情况一

先说最常见的一种情况:


0.1 + 0.2 // 0.30000000000000004

1 - 0.9 // 0.09999999999999998

0.0532 * 100 // 5.319999999999999

曾经我也以为乘 100 变成整数再进行加减计算就不会丢精度,但事实是,乘法本身算出来的数就已经走样了。

说回产生的原因吧,其实跟上面算 0.1 一样,就是因为 除 不 尽。

但是为什么?!明明直接打印出来他就是正常的 0.1 啊!为什么 1 - 0.9 出来的 0.1 就不是了 0.1 了!

下面我只是肤浅地推测一下:


console.log((0.1).toFixed(30))

// 输出 '0.100000000000000005551115123126'

console.log((1.1 - 1).toFixed(30))

// 输出 '0.100000000000000088817841970013'

通过 toFixed 我们可以看到更精确的 0.1 到底是个什么数字,而且也能清楚看到 0.11.1 - 1 出来的根本不是同一个数字,尽管在十进制看来这就是 0.1,但是在二进制看来这就是除不尽的数,所以进行计算后就会有轻微的不同。

那到底什么情况下的“0.1”才会被当成“0.1”呢?答案是:

  • 小于 0.1000000000000000124(等等等等)
  • 大于 0.0999999999999999987(等等等等)

至于要准确知道 IEEE-754 怎么进行“估值”,这里或许能找到答案,好奇宝宝们可以钻研一下

总之,因为除不尽,再加上计算中带来的误差,超过一定的值,某个数就变成另一个数了。

情况二

第二种算不准的情况就是因为实在太大了

我们已知双精度浮点数有 52 位小数,算上前面的 1,那么最大且能准确表示的整数,就是 Math.pow(2,53)


console.log(Math.pow(2, 53))

// 输出 9007199254740992

console.log(Math.pow(2, 53) + 1)

// 输出 9007199254740992

console.log(Math.pow(2, 53) + 2)

// 输出 9007199254740994

为什么 +2 又准了呢?,因为在这个范围内 2 的倍数仍可以被准确表示。再往上,当数字到达 Math.pow(2,54) 之后,就只能准确表示 4 的倍数了,55 次方是 8 的倍数,以此类推。


console.log(Math.pow(2, 54))

// 输出 18014398509481984

console.log(Math.pow(2, 53) + 2)

// 输出 18014398509481984

console.log(Math.pow(2, 53) + 4)

// 输出 18014398509481988

所以浮点数虽然可以表示极大和极小的数字,但是不那么准确,不过,也总比定点数完全没法表示要好一点吧。

实用链接

十进制转 IEEE-754

IEEE-754 转十进制

自己动手的十进制转 IEEE-754

查看原文

赞 10 收藏 5 评论 0

阿里云体验实验室 发布了文章 · 9月23日

基于Redis实现在线游戏积分排行榜

介绍

本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。

背景知识

Redis
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets) 和有序集合(sorted sets)等类型。ZSet(sorted sets)是一个有序的集合,内部使用HashMap和跳跃表(SkipList)来保证数据的有序存储,HashMap里放的是成员到Score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的Score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。排行榜是有序集合的经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

Apache Maven
Maven是Apache开源的一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。但是由于国外的仓库经常连接不上,即便是连接上,下载速度也很慢。阿里云提供了基于Maven官方的镜像仓库,镜像仓库采用OSS(对象存储)作为后端存储,下载速度快,支持高并发,而且全站进行了HTTPS加密,更安全。

场景体验

提供一台配置了CentOS 7.7的ECS实例(云服务器)和一个Redis 5.0数据库实例。通过本教程的操作,您可以使用Java语言实现基于Redis数据库的游戏玩家积分排行榜功能。
阿里云 场景资源:(提供真实资源模拟)
https://developer.aliyun.com/adc/scenario/44d54481170f4914996d3ae53b818f32

步骤一:搭建Java环境

本步骤将在ECS服务器上搭建一个Java开发环境,包括OpenJDK 1.8和Maven 3.6.3,并配置阿里云镜像仓库。

操作步骤:

1.安装OpenJDK 1.8。

yum -y install java-1.8.0-openjdk-devel.x86_64

2.下载Maven安装包。

wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

3.将下载的安装包解压到/usr/local/目录,并将安装目录重命名。

tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/ &&
mv /usr/local/apache-maven-3.6.3/ /usr/local/maven

4.将Maven的可执行文件目录加入到系统环境变量中,并使用source命令使/etc/profile文件中的内容立即生效。

echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile

5.执行以下命令打开镜像仓库配置文件,添加阿里云镜像仓库配置。

a. 使用vim打开镜像仓库配置文件。

vim /usr/local/maven/conf/settings.xml

b. 进入vim编辑器页面后输入 :/mirrors ,搜索并跳转到 <mirrors> 标签的位置。

c. 按下 n 键跳转到第二个没有被注释的标签位置。

d. 按下 o 键,另起一行进行编辑,粘贴以下内容。

<mirror>
       <id>nexus-aliyun</id>
       <mirrorOf>central</mirrorOf>
       <name>Nexus aliyun</name>
       <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

e. 按下 ECS 退出编辑模式,输入 :wq 保存并退出vim编辑器。

添加阿里云镜像仓库配置如下图所示:
在这里插入图片描述

步骤二:开发游戏玩家积分排行榜功能

操作步骤:

1.执行以下命令创建并进入工作空间。

mkdir -p demo/src/main/java/test/ && cd demo

2.参考以下步骤编辑代码文件。

a. 使用vim打开GameRankSample.java文件。

vim src/main/java/test/GameRankSample.java

b. 输入:set paste 回车后按下i键进入vim的粘贴插入模式,新增以下内容。

package test;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
public class GameRankSample {
    static int TOTAL_SIZE = 20;
    public static void main(String[] args) 
    {
        //Redis数据库连接地址
        String host = "xxxxxxxxxx.m.cnhz1.kvstore.aliyuncs.com";
        //连接密码
        String password = "password";
        int port = 6379;
        Jedis jedis = new Jedis(host, port);
        try {
            String authString = jedis.auth(password);
            if (!authString.equals("OK"))
            {
                System.err.println("AUTH Failed: " + authString);
                return;
            }
            //Key(键)
            String key = "游戏名:奔跑吧,阿里!";
            //清除可能的已有数据
            jedis.del(key);
            //模拟生成若干个游戏玩家
            List<String> playerList = new ArrayList<String>();
            for (int i = 0; i < TOTAL_SIZE; ++i)
            {
                //随机生成每个玩家的ID
                playerList.add(UUID.randomUUID().toString());
            }
            System.out.println("输入所有玩家 ");
            //记录每个玩家的得分
            for (int i = 0; i < playerList.size(); i++)
            {
                //随机生成数字,模拟玩家的游戏得分
                int score = (int)(Math.random()*5000);
                String member = playerList.get(i);
                System.out.println("玩家ID:" + member + ", 玩家得分: " + score);
                //将玩家的ID和得分,都加到对应key的SortedSet中去
                jedis.zadd(key, score, member);
            }
            //输出打印全部玩家排行榜
            System.out.println();
            System.out.println("       "+key);
            System.out.println("       全部玩家排行榜                    ");
            //从对应key的SortedSet中获取已经排好序的玩家列表
            Set<Tuple> scoreList = jedis.zrevrangeWithScores(key, 0, -1);
            for (Tuple item : scoreList) {  
                System.out.println("玩家ID:"+item.getElement()+", 玩家得分:"+Double.valueOf(item.getScore()).intValue());
            }  
            //输出打印Top5玩家排行榜
            System.out.println();
            System.out.println("       "+key);
            System.out.println("       Top 玩家");
            scoreList = jedis.zrevrangeWithScores(key, 0, 4);
            for (Tuple item : scoreList) {  
                System.out.println("玩家ID:"+item.getElement()+", 玩家得分:"+Double.valueOf(item.getScore()).intValue());
            }
            //输出打印特定玩家列表
            System.out.println();
            System.out.println("         "+key);
            System.out.println("          积分在1000至2000的玩家");
            //从对应key的SortedSet中获取已经积分在1000至2000的玩家列表
            scoreList = jedis.zrangeByScoreWithScores(key, 1000, 2000);
            for (Tuple item : scoreList) {  
                System.out.println("玩家ID:"+item.getElement()+", 玩家得分:"+Double.valueOf(item.getScore()).intValue());
            } 
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            jedis.quit();
            jedis.close();
        }
    }
}

c. 按下 ESC 键退出粘贴插入模式,然后输入:set nopaste 回车后按下i键进入vim的普通插入模式,将代码中的 host 和 password的变量的值替换为左侧资源栏体验平台提供给您的 Redis内网地址 和 Redis密码 。

d. 按下 ESC 键退出编辑模式,进入命令模式输入命令 :wq,保存并退出vim。

3.参考以下步骤创建pom.xml配置文件。

a. 使用vim打开pom.xml文件。

vim pom.xml

b. 按下 i 键进入vim的编辑模式,新增以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <!--jar入口类,格式Package.ClassName -->
                            <mainClass>test.GameRankSample</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

c. 按下 ESC 键退出编辑模式,进入命令模式输入命令 :wq,保存并退出vim。

4.使用maven打包项目。

mvn assembly:assembly

出现如下日志时表示打包成功:
在这里插入图片描述

  1. 运行jar文件。
java -jar target/demo-0.0.1-SNAPSHOT.jar

运行结果如下所示:
在这里插入图片描述
以上就是《基于Redis实现在线游戏积分排行榜》,的所有内容了

体验本次的真实场景,真实环境可至 阿里云体验实验室
https://developer.aliyun.com/adc/labs/

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 5 次点赞
  • 获得 0 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 0 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 5月28日
个人主页被 499 人浏览