頁面做好了,卻發到沒有人讀的地方:第七週回顧
9月7日到9月13日,是喵宇宙鋪功能最快的一週。文章標籤系統週一還只裝在28個網站上,9月9日晚上做到47個,9月10日晚上收在72個已登記的網站,標籤總覽頁逐站實測全部正常。
但這一週最該記住的是另一組事:A 站的八條信任頁面在程式碼裡躺了將近一個月,讀者一條都打不開;87個網站放上了主動通知搜尋引擎用的金鑰,查下去發現一次都沒被用過;三個站交給搜尋引擎的網址清單,宣告了從來沒上傳的頁面。拆成兩層看,每一層自己的狀態都對,中間那條線沒接上,而沒有任何檢查在看中間。
頁面寫好了,發布到一個沒有人在讀的地方
A 站談的是全民健保投保身分與保費試算。它的關於我們、信任頁、更正政策、隱私權、服務條款、作者、聯絡我們共八條路徑全部回應找不到頁面,掛了將近一個月。先前擱置的理由是不知道這個網站的原始碼在哪裡;9月7日實測後這個理由已經不成立,原始碼就在主要程式庫裡,當天也有一條線把五個信任頁補完。
落差在另一層。頁面照標準流程建置、部署,回報是零錯誤、140個檔案全部完成,而那份儲存空間並沒有在服務對外的網址——這個網站當時實際跑在另一個平台上。往沒有人讀的地方放東西,每一步都會成功。
把網站搬到正確位置的關卡,一天之內一道接一道現形:憑證卡在核發中,因為驗證用的那筆網域紀錄從來沒發布過;補上之後憑證顯示生效,流量端仍然握不到手,要等它傳播到邊緣節點;等到握手成功,才看見新舊兩邊對網址結尾斜線的處理方式不同,直接切過去會讓133條已經被收錄的網址各被轉一次向。解法當天測出來了,但到這天結束網域還沒切換,訪客看到的仍是舊平台,那八條信任頁仍然打不開。
87個網站放上了通知金鑰,一次都沒有被用過
9月10日傍晚查出第二件。主動通知搜尋引擎有新頁面的機制,要在網站上放一份給對方核對身分的檔案,發布時去呼叫對方的接口。金鑰推到78個網站之後做驗收,結果這78把從來沒派上用場:共用發布流程的預設模式只產生一份異動計畫並封存起來,不會真的發出通知,而日常發布從來沒指定要換成執行。63個有驗收紀錄的站次,被接受的網址合計為零、待送清單合計為零,請求紀錄裡搜尋引擎的爬蟲也一次都沒來取過那份檔案。
修法不能只翻一個開關。只把預設改成執行,日常發布會立刻變紅,因為那條路徑連金鑰都沒帶;所以同時補上「沒帶就回頭讀網站自己那一份」的退路,並讓原本設定成不通知的行為一字不變。改完重新量,87個網站裡有79個確認金鑰在線上且內容相符,隔天推進到81個。
網址清單宣告了不存在的頁
這一週最密集的故障面是網址清單,也就是網站交給搜尋引擎的那份頁面地圖,幾件事各自獨立發生而根因相同。9月9日B 站的教練專區走精準發布,上傳清單裡只有姓名頁、入口頁與網址清單;建置另外會產出73個匹克球館頁面,它們不在清單裡,而發布規則刻意不上傳清單以外的東西,於是上線的網址清單宣告了74條匹克球網址,伺服器上只有1個物件在服務。9月10日凌晨替另一個站裝標籤時,清單索引從10個分片變成11個,一個分片被丟掉,另一個指的是根本不存在的檔案,有8條文章網址在那段時間不在任何一份清單裡。9月11日凌晨,三個站的清單索引指向以當天日期命名的分片,那個分片沒有被上傳,三站的每日文章從清單上消失;要補的時候又撞到下一層——修補工具讀到回應找不到的子分片就直接中止,壞掉的現網讓修補自己跑不起來。
追查時第一次統計還因為分片寫法不一致而算出「沒有頁面受影響」,換個方式重驗才找到真正掉出清單的那8條。共同根因在9月11日補上:原本那道檢查問的是現網已經有的網址、新版本還能不能繼續服務——它防的是頁面消失,不防宣告一個不存在的頁。新的檢查反過來問,這次上傳的網址清單所宣告的網址與子分片,物件必須在這次的清單裡、或者已經在伺服器上,否則在取得寫入權、動到任何東西之前就中止。
改上線了,也不算改完
9月10日,B 站的標籤重複防護部署上線並確認生效;約兩小時後,同一份網址清單被另一次寫入覆蓋,防護失效。版本歷史的時間戳顯示,當天只有我們那一次是從正式管線送出的。問題不在部署,在改動還停在沒有併回主線的分支上,從主線重新建置的任何一次部署都不會帶著它。重推沒有意義,當天把累積的9條分支合併回主線,合併後比主線多出20個提交、沒有衝突,各項驗證跑完才推上去,再從主線重新部署。
反方向的救援也有幾次,共同點是動手之前先做了跨層比對。9月8日其中一個站換版前的檢查發現,照原流程發布會一起洗掉三條連到另一個站的回連、還有828筆另一個資料站要用的資料,以及184個先前由編輯手工補上的跨站連結;這批資料改成受版控管理,並新增換版前必須確認它們還在的檢查,晚上才上線,同時送出110,999個網址的通知。9月9日還有一個站換版前逐頁比對,發現11個頁面的步驟導覽與跨頁連結會被舊版內容換掉,先把這11頁的線上原文逐位元收回再重新產生,最後是187頁更新、15頁新增、2個只存在線上的頁面完全不動。
另一個站是被補回來的那一邊。先前一次發布洗掉了部分頁面連到別站的連結,初估26頁,兩次更正後確認是4頁——原本有這個區塊的只有7頁,其中3頁沒受影響。連結目標不是重新猜的,是從前一天的物件版本裡逐頁讀回原本的對象。同一批工作還查出7個頁面是已經不在程式碼裡的舊程式留下的產物,下次整站重建就會無聲消失,於是把線上內容做成快照,並加了一條會自動補回去的規則。
刪掉了,帳本上卻沒有這件事
9月10日晚上清磁碟時,出現這一週最像制度缺口的一件事。所有刪除都要先通過一道審核關卡並留下紀錄,這次為了求快,36個目錄一次送進去;處理到第17個時,那個目錄底下有3,042個唯讀資料夾——看得出是刻意的原始快照保護——刪不掉而拋出錯誤中斷。前16個目錄已經刪掉,但關卡的寫法是整批跑完才寫紀錄,這16筆不可逆的刪除,在稽核帳本上完全不存在。
資料本身沒有損失:16個封存檔逐一驗證完整,兩份備份的雜湊值與紀錄一致。要修的是帳。當晚改成每處理一項就記一次,中途失敗也要先把已完成的部分寫成部分完成、再往外拋錯誤,原本只寫在遠端物件的那條規則也擴大到本機刪除;重跑改逐項送審,通過檢查59項、成功處置58項,失敗的1項就是那個唯讀專案,照原樣保留等裁決。同一晚另一支判斷檔案多久沒被動過的掃描,因為參數本機不支援、錯誤訊息被吞掉而變成一律放行,842個專案全被判成一個月沒動過,照結果執行會刪掉正在進行的工作,真正刪除前就發現並改寫成逐檔檢查。
這一週推進了什麼
標籤系統是最大的進展。9月9日一天之內19個網站上線、站群覆蓋從28個到47個,當天再加三個、累計22個新上線並公開驗收;9月10日晚上補完最後一個卡住的站,72個已登記網站的標籤總覽頁逐站實測全部正常。標籤底下要累積到足夠篇數的文章,才會開放給搜尋引擎收錄,還不夠的先擋著。擴張途中有五個網站被閘門擋下來,五個原因沒有一個跟標籤有關——另一個站那5篇已經標記撤回的文章還留在線上而且搜得到,是其中一個原因。
某個站在9月11日重新上線。它在8月28日舊雲端平台全面退場時被整個刪除,四個網址從那天起全部打不開;這天在自己的雲端環境重建完成,示範資料涵蓋608位人物與4,432個品牌,另外有8,241次提及。完整的2萬人名錄要等資料庫額度在10月恢復,另一個網域的切換當天卡在瀏覽器工具凍結、還沒完成。
週末兩天重心整個換了方向,從鋪功能改成核對事實。9月12日每日內容做到66個網站,每一站都先產草稿,再逐條比對官方法規與政府公告才發布;抓到的錯誤包括把已經廢止的法規當成現行條文、引錯規則來源,還有寫手自己編出來的優待票種。那天晚上工作機器只剩10GB可用空間、460GB的容量用掉98%,回收39個已完成的舊工作目錄與3份沒進版控的複本,清出約37.6GB。9月13日另一個站拿政府開放資料核對業者名冊:官方有登記而站上沒收的73家補進來,證照狀態正常卻沒入冊的61家一併補上,官方最新名冊裡已經找不到的50家只標註、不下架,既有的224家依官方資料更新地址與電話。
如果你也在同時經營很多網站
把「東西已經上線」和「功能真的在運作」當成兩個不同的量,各自要有自己的量測方式。金鑰在網站上是產物,通知有沒有送出去是行為;頁面在程式庫裡是產物,讀者打不打得開是行為。這週幾件事都是拿前者當成後者,而每一次的回報都寫著成功。
閘門也有方向性。原本那道檢查只防「本來有的頁不要消失」,於是反方向的錯誤——宣告一個從來沒上傳的頁——在同一週反覆出現,直到補上反向的檢查才停。要加一道閘門之前,先把它會擋住什麼、擋不住什麼寫下來,比多加幾道有用。
刪除和寫帳如果綁在同一個迴圈的尾巴,只會在中途失敗時分開,而那正是最需要紀錄的時候。拆成每一項各自落帳的代價是跑得更慢,慢下來的那一段就是稽核軌跡的價格。
這週也有好幾次是我們自己的檢查先給出錯誤答案:字面比對算出「沒有頁面受影響」、把幾天前的量測當成現況、掃描指令報錯被吞掉之後變成全部放行。新加的檢查因此一律先確認它會失敗、再確認它會通過。
這一週的每日日誌
整夜連續作業:共融公園目錄與回報系統上線
一個網站這天上線共融遊戲場目錄、全台親子景點與需審核的家長回報系統;多個網站也整夜持續核對官方資料並上線更新。
66站內容核對官方法規,硬碟一度剩一成空間
每日內容產線把66個站的文章逐一比對官方法規後才上線,晚上工作機器的硬碟一度只剩一成可用空間,緊急清理後恢復正常;多個網站的資料與工具同步擴充。
一個網站重新上線,同日再度弄丟三站網址清單
停擺兩週的一個網站今天在雲端重新上線;同一天,標籤功能部署又讓三個網站的網址清單短暫失效,當天修復並補上防護機制。
標籤系統擴及全部72站,同日踩到刪除稽核缺口
標籤系統衝刺到72個站台全部上線,期間發生自己造成的網址清單缺漏、一個網站設定被悄悄蓋掉、刪除紀錄短暫留白、另一個網站sitemap超標等事故,當天陸續查出並處理。
分類標籤衝到 22 站,被沖掉的四頁連結補回來
分類標籤系統這天從9個站陸續擴大到22個站上線,中途抓到並修好一個網站四個頁面的跨站連結被沖掉的問題,另一個網站也完成了雲端搬家的最後一哩路。
換版前抓到資料險些被覆寫,會員最愛衝到 67 站
換版前查出會洗掉另一個網站的回連、828筆資料與184個跨站連結的風險,修好後才正式上線;會員最愛功能同一天擴大到67個站,資料庫搬遷也持續進行。
一個網站少了關於我們等頁面,原來掛在錯的平台上
一個網站被發現有一個月沒有基本的信任頁面,一查是網站掛在錯的主機平台上;這天也修好一個讓不同使用者查詢距離互相污染的錯誤,並幫另一個網站補齊民營球館資料。