summaryrefslogtreecommitdiffhomepage
path: root/vhosts/blog/content/posts/2023-12-03/isucon-13.ndoc
blob: ea4431e78b64b1c5213aa0431695f18512521228 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
---
[article]
uuid = "d0c404bb-4700-4a6f-9911-621e9872d8c6"
title = "ISUCON 13 に参加した"
description = "ISUCON 13 に参加した。チーム名「うつしもゆ」、最終スコア 13,580 点"
tags = [
  "isucon",
]

[[article.revisions]]
date = "2023-12-03"
remark = "公開"
---
<article>
  <section id="intro">
    <h>はじめに</h>
    <p>
      先日 11月25日、<a href="https://isucon.net/archives/57801192.html">ISUCON 13</a> に参加した。
      ISUCON への参加は今回が初めてとなる。
      私 nsfisis の1人チーム「うつしもゆ」として参加し、最終スコアは 13,580 点だった。使用言語は Go。
    </p>
    <note>
      「ISUCON」は、LINEヤフー株式会社の商標または登録商標です。<a href="https://isucon.net/">ISUCON 公式サイトはこちら。</a>
    </note>
  </section>
  <section id="goals">
    <h>目標</h>
    <p>
      今回は初参加ということもあり、目標を以下のように定めた。
    </p>
    <ul>
      <li>
        正のスコアを取る
        <ul>
          <li>ISUCON ではサーバ動作の整合性がチェックされ、失敗するとスコア 0 となる</li>
        </ul>
      </li>
      <li>
        速度改善以外に時間を浪費しない (= ハマらない)
        <ul>
          <li>プロビジョニング、デバッグ、ミドルウェアの設定方法の調査など、性能改善に寄与しない時間を最小限にする</li>
        </ul>
      </li>
    </ul>
  </section>
  <section id="strategy">
    <h>戦略</h>
    <p>
      ISUCON で高スコアを出す戦略については、戦闘力の高い方々が良質な記事を書いてくださっている。
      ここでは、上述したような低い目標を達成するための戦略について書こうと思う。
    </p>
    <section id="strategy--do-not-destroy-environment">
      <h>環境を破壊しない</h>
      <p>
        ミドルウェアの設定やアプリケーションコードなど、変更を加えるあらゆるものは、必ずバックアップを取るか Git で管理する。
        復旧不能になって環境ごと作り直すことだけは必ず避ける。
      </p>
    </section>
    <section id="strategy--revert-changes-immediately">
      <h>すぐに変更を取り消す</h>
      <p>
        それでも壊してしまったときは、即座に変更を取り消す。壊れた理由を調べることに固執しない。
      </p>
    </section>
    <section id="strategy--do-small-deployment">
      <h>小さくデプロイする</h>
      <p>
        一度に複数の変更を加えず、可能な限り小さな単位でデプロイする。そしてその都度ベンチマークを走らせ、整合性チェックが通るかどうかを (当然速くなっているかどうかも) 確かめる。
      </p>
    </section>
    <section id="strategy--use-familiar-tools">
      <h>使い慣れた道具を使う</h>
      <p>
        使用する言語、ミドルウェア、ツール類を、使い慣れたものに限定する。
        「このツールのオプションはほとんどそらで指定できる」と言えるようなものだけを使う。
        「自分では使ったことがないが ISUCON 強者がお勧めしていた」といった理由でツールを選定しない (もちろん、本番までに練習して習熟するという選択肢は存在する)。
      </p>
    </section>
  </section>
  <section id="performance-optimization">
    <h>パフォーマンスの最適化</h>
    <p>
      もっと強い人の記事を参考にしてほしい。
    </p>
  </section>
  <section id="outro">
    <h>おわりに</h>
    <p>
      事前の準備も含めて、大変楽しいイベントだった。次回があるなら是非また参加したい。その際は、順位やスコアを目標として立てられるようになりたいものである。
    </p>
  </section>
</article>