0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonとRedisを使ってAlibabaクラウド上にゲームリーダーボードを構築

Posted at

このガイドでは、PythonRedisを使ってAlibaba Cloud上にゲームリーダーボードを構築していきます。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

#目的
このデモの主なアイデアは、ゲームアプリケーションでリーダーボードを生成するためにデータベースを叩くのではなく、キャッシュ層(Redis)を使用することです。このアプローチは、リアルタイムの応答を必要とする大規模なデータベースに適しています。

#前提条件
必須ではありませんが、Pythonの基本的な理解があることはプラスになります(サンプルコードはPythonです)。今回はRedisを活用しているので、Redisがどんなものなのかを知るためにも読んでおくと良いでしょう。

Alibaba CloudでのRedisクラスタの作成については、このガイドで別途ステップバイステップのコマンドを読んで、それに沿って進めていけばいいので、ここでは割愛します。設定は簡単でわかりやすいです。

#実施の様子
1、Elastic Compute Service(ECS)ApsaraDB for Redisのセットアップを行います。このチュートリアルでは、OSとしてUbuntu 16.04を使用していますが、ソリューション自体はどのOSでも可能です。選択したOSによってコードが若干異なる場合があります。
2、ECSサーバにログインします。

ssh -i  root@

3、環境をインストールするための手順を実行します。

rm /usr/bin/python # Change python into version 3
ln -s /usr/bin/python3 /usr/bin/python
apt-get update # Update Ubuntu
export LC_ALL=C # Set Locale
apt-get install python3-pip # Install pip
pip install redis # Install python-redis
apt-get install apache2 # Install apache
mkdir /var/www/python # Set Environment
a2dismod mpm_event
a2enmod mpm_prefork cgi

4、etc/apache2/sites-enabled/000-default.conf を置き換えます。

-----
<VirtualHost *:80>
        DocumentRoot /var/www/python
        <Directory /var/www/python>
                Options +ExecCGI
                DirectoryIndex leaderboards.py
        </Directory>
        AddHandler cgi-script .py
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
-----

5、そのファイルを/var/www/leaderboards.pyに置き、8行目の設定を編集します(以下のソースコード)。
6、ファイル内のパーミッションを編集します。

chmod 755 /var/www/python/leaderboards.py

7、Apache を再起動します。

service apache2 restart

8、ウェブブラウザにアクセスして、パブリックIPアドレスを入力してください。それが動作しているかを見る必要があります。

#コード説明
以下はPythonでのコードサンプルですが、これについてはさらに説明します。

image.png

コードの説明:
1、Redisに接続します(8行目):

r = redis.StrictRedis(host='', port=6379, db=0, password='') 

これを正しく動作させるためには、ホスト名とパスワードを更新する必要があります。ApsaraDB for Redisの作成時に「接続アドレス」から取得できます。作成時に設定したパスワードでもあります。

image.png

2、リーダーボードにスコアを追加します(16行目)

r.zincrby(leaderboardName, gamer, random.randint(1,1000000)) 

LeaderboardName はリーダーボードの名前に設定するキー、gamer はゲーマーのユーザー名または ID、最後のパラメータはスコアを入れる場所です (この場合は乱数です)。

3、最高スコアのトップ10を取得します(19行目)。

r.zrange(leaderboardName, 0, 9, desc=True, withscores=True)

LeaderboardNameはリーダーボードの名前を設定するキーで、2番目のパラメータはどのランクから開始するか(0が開始)、3番目のパラメータはどこで停止するか(-1で最後まで表示する)です。値desc=Trueは、リーダーボードを降順にソートします(デフォルトではFalse)。

4、現在のプレイヤーの順位を取得します (30行目)。

r.zrevrank(leaderboardName, gamer)+1

LeaderboardNameはリーダーボードの名前に設定するキーで、gamerはゲーマーのユーザー名またはIDです。データベースではランクは1ではなく0から始まるので、1つ(+1)を追加する必要があります。
5、現在のプレイヤー(または誰でも)のスコアを取得します(34行目)。

r.zscore(leaderboardName, gamer) 

LeaderboardNameはリーダーボードの名前に設定するキーで、gamerはゲーマーのユーザー名またはIDです。

#コードを実行する
以下は、ウェブサーバ上でコードを実行したときの期待されるレスポンスです。

image.png

#結論
Redisはデータをインメモリで保存し、製品の成熟度によって毎秒数百万リクエストのパフォーマンスに達することができます。このため、このユースケースやその他のキャッシングニーズに最適なデータベースとなっています。

Alibaba Cloud上のRedisの詳細については、ApsaraDB for Redisのページを参照してください。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?