✕

Operasi, pengurusan dan kesinambungan

Infrastructure

Perniagaan itu kekal milik anda. Jentera di bawahnya kami yang mengendalikan.

Systems membina tapak dan mengamankannya. Infrastructure mengambil alih kemudi: kami memasangnya, kami memastikannya berjalan hari demi hari, dan kami yang berjaga apabila sesuatu bergerak. Sebuah dewan dagangan, sebuah syarikat, atau seorang insan dengan gedung dalam talian — tangan yang sama dan pemantauan yang sama.

Anda sedang membaca sebuah rumah yang kami kendalikan sendiri. Ia sudah berjaga ketika anda tiba — ·

Apa yang tidak lagi anda tanggung

Enam perkara yang meninggalkan tangan anda pada hari pertama dan tidak kembali.

Mesin

Di mana ia berjalan, sebesar mana, dan berapa sepatutnya kosnya. Kami memilihnya, kami memasangnya, dan kami mengubah saiznya apabila trafik anda berubah — sebelum ia menjadi masalah yang dapat anda lihat.

Alamat

Domain, sertifikat, dan e-mel yang sampai ke tujuan dan bukan tersangkut dalam folder spam. Diperbaharui sebelum anda teringat ia wujud, kerana nama yang luput bermakna perniagaan yang tertutup.

Gedung

Pembayaran keluar, kaedah pembayaran, negara demi negara, dan pesanan yang tidak sekali-kali boleh hilang. Dibina sekali, kemudian dijaga agar terus berfungsi — termasuk pada hari pembekal anda mengubah sesuatu.

Salinan

Salinan simpanan yang tidak perlu anda fikirkan, dan pemulihan yang benar-benar pernah kami laksanakan. Salinan yang tidak pernah dipulihkan sesiapa bukanlah salinan — itu hanya harapan.

Kelajuan

Halaman yang terbuka dengan pantas di mana jua pengunjung berada. Lambat bermakna wang berlalu keluar, jadi kelajuan adalah bahagian daripada mengendalikan rumah ini, bukan baris tambahan untuk dibeli.

Penampalan

Kemas kini, sertifikat yang hampir luput, komponen yang berlubang. Ditutup oleh kami, menurut kalendar kami — bukan atas kerisauan anda, dan bukan pada pukul tiga pagi waktu anda.

Siapa yang berjaga, dan bila

Apa yang sebenarnya berlaku antara saat sesuatu rosak dan saat ia berdiri kembali.

Pada saat ia berlaku

Sistem mengesannya

Setiap permintaan, setiap pintu dan setiap kunci direkodkan di edge sebaik ia berlaku. Tiada apa yang menunggu tugasan malam untuk menemuinya pada waktu pagi.

Pada saat yang sama

Sebuah telefon berbunyi di Zürich

Bukan peti mel, bukan papan pemuka yang mungkin dibuka seseorang esok hari. Peringatan itu pergi ke tempat yang tidak boleh diabaikan secara senyap.

Sebelum anda bertanya

Anda mendengarnya daripada kami

Apa yang berlaku, apa yang terjejas, dan apa yang telah pun dilakukan mengenainya. Anda tidak mengetahui bahawa rumah anda tergendala daripada pelanggan anda sendiri.

Sehingga ia berdiri kembali

Ia dibaiki, bukan dihantar ke atas

Tangan yang sama yang memasangnya masuk dan membaikinya. Tiada lapisan di atas kami untuk menyerahkannya, jadi tiada sesiapa yang perlu kami tunggu.

Pada hujung bulan

Ia dicatatkan

Apa yang gagal, mengapa, dan apa yang kami ubah supaya ia tidak boleh gagal dengan cara yang sama dua kali. Kegagalan yang tidak dicatatkan akan berulang.

Apa yang tiba secara bertulis, setiap bulan

Satu helaian. Boleh dibaca oleh seseorang yang bukan jurutera, kerana itulah sasarannya.

Jam beroperasi
Jam ketika ia berjalan, dan minit ketika tidak — diukur dari luar rumah anda, supaya angka itu bukan milik kami untuk dicantikkan.
Apa yang kami ubah
Setiap perubahan yang kami lakukan, dalam bahasa yang mudah. Anda boleh membacanya dalam seminit dan tetap tahu dengan tepat apa yang berubah.
Apa yang rosak
Apa yang gagal, apa yang terjejas, dan apa yang kami lakukan — termasuk kegagalan yang tidak pernah anda sedari, iaitu kebanyakannya.
Apa yang menyusul
Apa yang kami berhasrat lakukan bulan hadapan, ditulis sebelum kami melakukannya. Tiada apa yang berlaku kepada rumah anda sebagai kejutan.
Apa kosnya
Angka yang sama seperti bulan lalu, melainkan anda meminta sesuatu yang baharu. Tiada satu baris pun muncul pada helaian ini dengan sendirinya.

Antara muka

Apa yang kami serahkan kepada anda ialah bahagian yang berjalan di rumah anda: latihan yang menguji salinan anda sendiri setiap malam, dan satu panggilan yang meletakkan sebuah rumah di bawah pengurusan. Bilik operasi kami kekal tertutup — apa yang berjalan di pihak anda adalah milik anda untuk dibaca sebelum anda mempercayainya.

"""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

Diukur pada rumah kami sendiri

Tiada angka pelanggan pada halaman ini. Kami tidak menyebut apa-apa yang tidak kami ukur sendiri, jadi keempat-empat ini daripada rumah yang kami kendalikan dengan tangan kami sendiri.

2
rumah yang kami kendalikan
yang ini dan sebuah klinik — kami pelanggan pertama kami sendiri, dan aduan pertama kami sendiri
7
pintu pada yang ini
satu bagi setiap bahasa, kesemuanya di bawah satu pemantauan dan satu bil
0
konsol untuk dipelajari
tiada apa untuk anda log masuk dan tiada apa untuk diingat — anda minta, dan ia selesai
1
orang yang menjawab
tiada lapisan, tiada tiket, dan tiada sesiapa di hadapannya yang hanya mencatat nota

Apa yang tidak boleh ditiru

Bukan perbandingan harga. Perbandingan bagaimana kedua-dua rumah itu dibina.

Susunan yang biasa
Di sini
Siapa yang menjawab
Senarai tugas yang anda tidak pernah kenal. Sesiapa yang mengangkat panggilan perlu diberitahu apa sistem anda sebelum dia boleh membantu.
Orang yang memasangnya. Dia sudah mengenali sistem anda sehingga ke tangan, jadi tiada apa yang perlu dijelaskan dahulu.
Waktu pejabat
Kerosakan pada 23:40 menjadi tiket yang dibaca pada 09:00. Malam itu milik anda, seorang.
Pemantauan ini tidak mengenal waktu pejabat. Peringatan pergi ke sebuah telefon, dan telefon itu tidak dimatikan.
Setiap tahun
Satu lagi kerusi, satu lagi modul, satu lagi lapisan. Susunan itu hanya boleh menjadi lebih berat.
Kami mengeluarkan apa yang tidak lagi anda perlukan. Operasi menjadi lebih ringan — begitu juga kosnya kepada anda.
Apabila ia rosak
Mereka memberitahu anda bahawa ia rosak. Pembaikannya disebut harga secara berasingan, oleh orang lain.
Kami yang membina enjinnya juga, jadi kami masuk dan membaikinya. Satu rumah bertanggungjawab atas kedua-dua bahagian.
Hari anda berangkat
Konsol mereka, format mereka, bayaran keluar mereka. Berangkat pergi berharga satu projek penuh.
Akaun anda, domain anda, data anda. Kami memegang kunci yang diserahkan kepada kami, dan kami menyerahkannya kembali pada hari anda meminta.

Tiada satu pun daripada itu merupakan senarai ciri, dan itulah sebabnya ia tidak boleh ditawar lebih rendah. Sebuah syarikat dengan senarai tugas tidak boleh memberikan anda orang yang membina sistem anda. Sebuah syarikat yang invoisnya mesti membesar setiap tahun tidak boleh mengeluarkan satu baris daripadanya. Sebuah syarikat yang hanya memantau tidak boleh membaiki. Mereka bukan di belakang kami — mereka dibina secara berbeza, dan mereka tidak dapat melangkah ke sebelah sini tanpa berhenti menjadi diri mereka sendiri.

Itu juga sebabnya tiada senarai harga pada halaman ini. Kami melihat apa yang tidak boleh berhenti, kami mengukur operasinya, dan kemudian kami menyebut harga bagi apa yang kami ukur. Setiap satu membayar menurut ukurannya sendiri — sebuah gedung yang dikendalikan seorang insan tidak dikenakan bayaran seolah-olah ia sebuah dewan dagangan.

Beritahu kami apa yang anda lebih rela serahkan

Dua baris sudah memadai. Kami sendiri yang membacanya dan kami sendiri yang menjawab — tiada barisan menunggu di belakang tingkap ini.

Ia sampai kepada seorang insan, dan insan itulah yang menjawab. Tiada apa di sini yang dikongsi, dijual atau diserahkan kepada pihak lain.

Mr. MatchTop · matchtopalgorithm.ai