✕

運用、管理、継続性

Infrastructure

事業はあなたのもの。その下で動く機構は、私たちが運用します。

Systems が地盤を築き、守ります。Infrastructure は操縦桿を握ります。私たちが整え、 日々動かし続け、何かが動いたときに起きているのは私たちです。トレーディングフロアでも、会社でも、 オンラインショップを持つ一人でも — 同じ手、同じ見張りです。

あなたが読んでいるのは、私たち自身が運用する家です。あなたが着いたとき、それはすでに見張っていました — ·

あなたが抱えなくてよくなるもの

初日にあなたの手を離れ、二度と戻ってこない六つのこと。

マシン

どこで動かすか、どれくらいの規模か、その費用はどうあるべきか。私たちが選び、設定し、 トラフィックが変われば — 目に見える問題になる前に — 規模を調整します。

アドレス

ドメイン、証明書、そして迷惑メールフォルダに落ちずに届くメール。その存在を思い出す前に更新します。 期限切れの名前は、閉じた事業だからです。

ショップ

決済、支払い方法を国ごとに、そして決して失ってはならない注文。一度築き、あとは動かし続けます — 仕入先が何かを変えた日も含めて。

コピー

あなたが一切考えなくてよいバックアップと、実際に実行した復元。一度も戻したことのないコピーは コピーではありません — それは希望です。

速度

訪問者がどこにいても素早く開くページ。遅さは出ていくお金ですから、速度は家を運用することの一部であり、 追加で買う一行ではありません。

パッチ適用

アップデート、まもなく失効する証明書、穴の空いた部品。私たちが、私たちの暦で塞ぎます — あなたの気がかりではなく、あなたの深夜三時でもなく。

誰が、いつ見張っているのか

何かが壊れた瞬間から、それが再び立ち上がる瞬間までに、実際に起きること。

起きたその瞬間

システムが気づく

すべてのリクエスト、すべての扉、すべての鍵が、起きたその場でエッジに記録されます。 朝に夜間ジョブが見つけてくれるのを待つものは何もありません。

同じ息で

Zürich で電話が鳴る

メールボックスでも、誰かが明日開くかもしれないダッシュボードでもありません。警報は、 静かに無視できない場所へ届きます。

あなたが尋ねる前に

あなたは私たちから聞く

何が起きたか、何に触れたか、それについてすでに何をしたか。自分の家が落ちていることを、 自分の顧客から知るようなことはありません。

立ち上がるまで

エスカレートせず、修理する

整えたのと同じ手が入って直します。上に回す上位層はないので、私たちが待つ相手もいません。

月末に

記録に残す

何が、なぜ失敗し、同じようには二度と起きないよう私たちが何を変えたか。書き留められない障害は、 また戻ってきます。

毎月、書面で届くもの

一枚の紙。技術者でない人にも読めるように — それを受け取るのがその人だからです。

立っていた時間
稼働していた時間と、していなかった分数 — あなたの家の外から測るので、 その数字を私たちが取り繕うことはできません。
変更したこと
私たちが行ったすべての変更を、平易な言葉で。一分で読めて、それでも何が動いたか はっきり分かります。
壊れたこと
何が失敗し、何に触れ、私たちが何をしたか — あなたが一度も気づかなかった障害も含めて。 そのほとんどがそうです。
次に来ること
来月やろうとしていることを、やる前に書きます。あなたの家に不意打ちは起きません。
費用
何か新しいものを頼まない限り、先月と同じ金額です。この紙に一行がひとりでに 現れることはありません。

インターフェース

私たちがお渡しするのは、あなたの家で動く半分です。あなた自身のコピーを毎晩試す点検と、 一つの家を管理下に置く一本の呼び出し。私たちの運用室は閉じたまま — あなた側で動くものは、信用する前にあなたが読めます。
コードは英語のままです — 技術の世界共通語として。

"""MatchTop · restore drill — the piece that proves a copy is a copy.
Standard library only. It runs in your house, on your own copies, where you can watch it."""

import hashlib, hmac, json, os, subprocess, time
from pathlib import Path
from urllib.request import Request, urlopen

KEY    = bytes.fromhex(os.environ["MT_KEY"])    # one key per house, never on disk
EDGE   = os.environ["MT_EDGE"]                   # no address baked into the build
SHADOW = Path(os.environ["MT_SHADOW"])            # a shadow copy. never the live house.


def newest_copy(vault: Path) -> Path:
    """Drill the copy you would actually reach for, not a convenient one."""
    copies = sorted(vault.glob("*.dump"), key=lambda p: p.stat().st_mtime)
    if not copies:
        raise FileNotFoundError("the vault is empty")   # the loudest fault there is
    return copies[-1]


def fingerprint(copy: Path) -> str:
    """So that tomorrow we can prove this was the file we brought back."""
    h = hashlib.sha256()
    with copy.open("rb") as f:
        for block in iter(lambda: f.read(1 << 20), b""):
            h.update(block)
    return h.hexdigest()


def bring_it_back(copy: Path) -> dict:
    """Restore into the shadow, then ask it a question only a live house can answer."""
    SHADOW.mkdir(parents=True, exist_ok=True)
    started = time.monotonic()
    subprocess.run(["pg_restore", "--clean", "-d", "mt_shadow", str(copy)],
                   check=True, timeout=1800)
    asked = subprocess.run(["psql", "-d", "mt_shadow", "-tAc",
                            "select count(*) from orders"],
                           capture_output=True, text=True, check=True)
    return {"seconds": round(time.monotonic() - started, 1),
            "orders":  int(asked.stdout.strip())}   # a restore nobody queried is not a restore


def file_it(result: dict) -> str:
    """Signed and filed, pass or fail. The month's sheet is written from these."""
    body = json.dumps(result, separators=(",", ":"), sort_keys=True).encode()
    call = Request(EDGE, body, {
        "Content-Type": "application/json",
        "X-MT-House":   os.environ["MT_HOUSE"],
        "X-MT-Seal":    hmac.new(KEY, body, hashlib.sha256).hexdigest(),
    })
    with urlopen(call, timeout=8) as answer:        # we dial out. nothing dials in.
        return json.load(answer)["filed"]


def drill(vault: Path) -> None:
    copy   = newest_copy(vault)
    result = {"copy":        copy.name,
              "age_hours":   round((time.time() - copy.stat().st_mtime) / 3600, 1),
              "fingerprint": fingerprint(copy)[:16]}
    try:
        result |= bring_it_back(copy)
        result["verdict"] = "came back"
    except Exception as fault:
        result["verdict"] = "did not come back"      # the drill exists for this branch
        result["fault"]   = str(fault)[:200]           # and this is the night we are worth it
    file_it(result)


if __name__ == "__main__":
    drill(Path(os.environ["MT_VAULT"]))               # every night, watched or not

私たち自身の家で測定

このページにクライアントの数字はありません。私たちは自分で測っていないものを見積もらないので、この四つは自分の手で運用する家からのものです。

2
運用する家
この家と、ある診療所の家 — 私たちは自らの最初の客であり、自らの最初の苦情でもあります
7
この家の扉
言語ごとに一つ、そのすべてが単一の見張りと単一の請求のもとに
0
覚えるコンソール
ログインするものも覚えるものもありません — あなたが頼めば、それで済みます
1
人が答える
層もチケットもなく、彼の前でメモを取る人もいません

模倣できないもの

価格の比較ではありません。二つの家がどう築かれているかの比較です。

よくある仕組み
ここでは
答えるのは誰か
あなたが一度も会わない当番表。出た人は、助ける前にあなたのシステムが何かを教わる必要があります。
それを整えた本人。あなたのシステムをすでに手で知っているので、まず説明することは何もありません。
営業時間
23:40 の障害は、09:00 に読まれるチケット。夜はあなた一人のものです。
見張りに営業時間はありません。警報は電話へ届き、その電話は切られていません。
毎年
また一席、またモジュール、また一層。その仕組みは重くなる一方です。
要らなくなったものを外します。運用は軽くなり — その費用も軽くなります。
壊れたとき
壊れたと伝えてきます。修理は別途、別の誰かが見積もります。
エンジンも私たちが築いたので、入って修理します。両方の半分に一つの家が答えます。
あなたが去る日
彼らのコンソール、彼らの形式、彼らの解約料。立ち去るのにプロジェクト一つ分かかります。
あなたのアカウント、あなたのドメイン、あなたのデータ。預かった鍵を保持し、あなたが頼んだ日に返します。

これらは機能の一覧ではありません。だからこそ、値段では打ち負かせないのです。 当番表を持つ会社は、あなたのシステムを築いた本人を渡せません。請求書を毎年 伸ばさねばならない会社は、そこから一行も外せません。見張るだけの会社は、 修理できません。彼らは私たちの後ろにいるのではなく — つくりが違うのであって、 自分でなくなることなしにはこちらへ渡ってこられないのです。

このページに価格表がないのも、そのためです。止まってはならないものを見て、 運用を測り、そのうえで測ったものを見積もります。それぞれが自分の規模に応じて払います — 一人で営むショップが、トレーディングフロアのように請求されることはありません。

何を手放したいか、お聞かせください

二行で十分です。私たち自身が読み、私たち自身が答えます — この窓の後ろに行列はありません。

一人の人に届き、その人が答えます。 ここでは何も共有・販売・受け渡しされません。

Mr. MatchTop · matchtopalgorithm.ai