AWS 的 Availability Zone (AZ) 設計

昨天因為 AWS 宣佈有計畫在台北建立 region (「AWS 宣佈了台北區將在 2025 年初推出完整的 3-AZ Region」),想說之前有印象官方有把 AZ 講的蠻細的,但寫文章的當下一直沒找到,結果剛剛找到後發現我自己在十年前有寫下來過...:「AWS 的機房架構」。

AWS 官方的原始影片在 YouTube 的「AWS re:Invent 2014: AWS Innovation at Scale with James Hamilton (SPOT301)」這邊可以看到,當年看的 Gigaom 原文看起來已經掛了,但可以在 Internet Archive 上看到:「Amazon details how it does networking in its data centers」。

這些至少是 2014 年當時的情況,現在 2024 不一定,但還是可以當作個參考:

可以看到同一個 AZ 中,data center 之間要求是 <0.25ms,以光纖內光速距離來推差不多是 50km,當年沒有注意到「Don't need inter-AZ independence」這句話,看起來不同 AZ 是允許共用 data center 的

這邊可以看到當年公開出來 AZ 間的要求是 <2ms apart,換算是 400km (當 latency 算) 或是 200km (當 RTT 算),但有提到 usually <1ms apart,換算是 200km 或是 100km。

現在則是直接寫成 60mile/100km,所以我猜 (猜!) 上面應該是 RTT。

然後大概是有些 AZ 之間雖然直線距離在 100km 內,但因為 fiber 不是直線所以 latency 會超過 1ms,而 marketing team 覺得寫成 2ms 很不爽,乾脆改成 60miles/100km?

最後這張倒是比較確定改變很多,畢竟科技也在成長。

AWS 宣佈了台北區將在 2025 年初推出完整的 3-AZ Region

今天早上在 Facebook 上看到的,AWS 宣佈將在 2025 年年初在台北推出 3-AZ region:「AWS Asia Pacific (Taipei) Region coming soon」。

Amazon Web Services (AWS) announced plans to open a new AWS Region in Taiwan by early 2025. The AWS Asia Pacific (Taipei) Region will consist of three Availability Zones at launch.

剛好也看到有人在討論機房是不是都會在雙北,找了一下 AZ 的規範,發現現在有寫出來一些白紙黑字的東西 (記得以前沒有):「Availability Zones」。

Availability Zones in a Region are meaningfully distant from each other, up to 60 miles (~100 km) to prevent correlated failures, but close enough to use synchronous replication with single-digit millisecond latency.

所以要在一個直徑 100km 的圓蓋住的範圍裡面放機房。

拉了幾個地標,汐科火車站到苗栗火車站的直線距離差不多就剛好 100km,所以如果小道消息說桃園與新竹有 AWS 機房的話也不會太意外。

翻資料看到 CloudFront 是 2014 年進台灣的:「CloudFront 有台灣機房了...」,2018 年開了第二個點與第三個點:「CloudFront 在台北的第二個 PoP」、「CloudFront 在台北增加第三個點...」。

再來是 2022 年做為東京區的 AZ 有了 Local Zone:「AWS 的台北區 (Local Zone) 開了」。

然後現在宣佈在 2025 年開 region (會 delay 嗎?),看起來是有量慢慢拉起來?

Raspberry Pi Ltd 上市

Raspberry Pi LtdLSE 上市了,代碼 RPI:「Raspberry Pi IPO」。

LSE 上的資料在「RASPBERRY PI HOLDINGS PLC」這邊,但這網頁開的速度... 有點... 感人?

上市後公司的走向通常都會有不少變化,接著看看 Raspberry Pi 6 的計畫吧?雖然 N100 的實用度會更好...

用 libtree 來看 library dependency

在「Libtree: Ldd as a tree saying why a library is found or not (github.com/haampie)」這邊看到的,本來看到名字以為是與樹狀資料結構有關的 library,結果實際看了發現這邊的 libtree 指的是將執行檔裡面使用到的 dependency (library) 展成樹狀:

比起 ldd 的輸出多了更多資訊,這個在想辦法解決 library 問題時比 ldd 好用不少。

擾人的 lazy loading

維基百科上面有時候會想要看其他語言的頁面,以 Kalafina 這頁來說,想要點開跨國語系的 menu 點日文版頁面的時候,會出現這樣的情況:

游標移上去要點的時候,因為 lazy loading 跑完;DOM 被插入新的 node,造成本來想要的日文版連結跑到下面,然後按快一點的人就點到其他連結... 目前的解法是直接用 uBlock Origin 擋掉那個 node,讓他不要出現:

wikipedia.org##.cx-uls-relevant-languages-banner

這種類型的 UX flaw 在現代愈來愈多了,而且還是各 framework 都推薦的寫法... (各種 useEffect() 類的功能,頁面的結構先出來,再後續讀到內容時再更新頁面)

看到「Creating Perfect Font Fallbacks in CSS」這邊這段時想到的:

With font-display: swap, the browser will first render your text using the fallback typeface you specified in the font-family property[.]

font swapping 也是個讓人吐血的 UX flaw...

幫你打理伺服器環境的 piku

但文件寫的很糟:「The tiniest PaaS you've ever seen. Piku allows you to do git push deployments to your own servers.」。

名字來自於 Dokku,另外應該是用到了 pico 這個數量級詞:

piku, inspired by dokku, allows you do git push deployments to your own servers, no matter how small they are.

這個工具是在「Piku: Allows git push deployments to your own servers (github.com/piku)」這邊看到的,就如同說明提到的,希望透過 git push 就可以發佈軟體。

不過在討論裡面也有人抱怨文件的問題,像是在 id=40625339 這邊就有人提到。

實際到 AWS 上開了一台 EC2 instance 測,看起來就是提供一包 script 把伺服器端設定好,包括了 Let's Encrypt + nginx 以及 SSHGit 相關的設定,接著你可以直接將這台 server 設為 git remote,然後就可以用 git push 推軟體上去了。

對於只是想要跑軟體,而且容易接 CI/CD 的方案來說還算 OK,但如果想要自己客製化 nginx 或是一些工具的情境就不是那麼適用了。

Google 停用了大量與中國與俄羅斯相關的帳號

在「Google Takes Down Influence Campaigns Tied to China, Indonesia, and Russia」這邊看到的,Google 的說明則是在「TAG Bulletin: Q2 2024」這邊,看起來像是例行性的更新?

與台灣有關的當然就是跟中國相關的影響,也是被停最多帳號的,在報告的最後提到 YouTubeBlogger 上面有掃到上千個與中國政府相關的宣傳帳號:

We terminated 1,320 YouTube channels and 1,177 Blogger blogs as part of our ongoing investigation into coordinated influence operations linked to the People’s Republic of China (PRC). The coordinated inauthentic network uploaded content in Chinese and English about China and U.S. foreign affairs. These findings are consistent with our previous reports.

第二多的則是俄羅斯:

We terminated 378 YouTube channels as part of our investigation into coordinated influence operations linked to Russia. The campaign was linked to a Russian consulting firm and was sharing content in Russian that was supportive of Russia and critical of Ukraine and the West.

其他的就比較零頭了...

OpenSSH 要內建阻擋系統了

在「OpenSSH introduces options to penalize undesirable behavior」這邊看到 OpenSSH 要內建阻擋系統了,算是取代了 fail2ban 的一些功能?

還蠻... 特別的?不知道為什麼現在這個時間點會想要實作這個功能?

這個功能在 OpenBSD 7.6 上面預設會開啟,這點不確定其他 distribution 會怎麼安排:

So now we know: starting with OpenBSD 7.6, PerSourcePenalties will be enabled by default, and admins who do not themselves run PF or other network translation mechanisms will need to keep the consequences of inconsiderate NAT use in mind.

合併 GitHub Actions 的 IP address

GitHub 官方文件「About GitHub's IP addresses」中,是有提到 https://api.github.com/meta 這組 API endpoint,可以取得當下的 GitHub Actions 所使用的連外 IP address,不過如果你實際掃下來後會發現量相當大,以現在的情況來說,IPv4 address 有 3708 筆,IPv6 address 則有 801 筆:

$ cat github-actions-ipv4.txt | wc
   3708    3708   58233
$ cat github-actions-ipv6.txt | wc
    801     801   17522

實際去看的時候會看到一些吐血的,像是這包 /31 的:

13.105.49.0/31
13.105.49.2/31
13.105.49.4/31
13.105.49.6/31
13.105.49.8/31
13.105.49.10/31
13.105.49.12/31
13.105.49.14/31
13.105.49.16/31

這包還真的就整整 128 筆,你就不能輸出個 13.105.49.0/24 嗎...

ChatGPT 問了要怎麼解決,被提示有 netmask 這個工具可以用,不需要另外自己編譯,可以直接用 apt 裝起來然後倒進去讓他跑就好,整包搭配 jqHTTPie 處理掉 (換 curl 基本上也沒問題):

netmask --cidr -- $(http https://api.github.com/meta | jq -r '.actions[]')

Update:看到資安的朋友按讚突然想到,這邊用了 $() 把資料丟到 command line 包裝,可能會有安全上的顧慮,請自己斟酌...

不過整包 (IPv4 + IPv6) 還是有 3187 行,但總是有個方法可以整理起來用,不用自己刻一堆程式處理...

Vercel 的字型 Geist Sans 與 Geist Mono

標題提到的是 VercelBasement Studio 合作設計的字型,已經出來一陣子了 (不過翻了一下好像沒什麼人特別關注)。

我是在「Hacking millions of modems and investigating who hacked my modem (samcurry.net)」這邊看到的文章「Hacking Millions of Modems (and Investigating Who Hacked My Modem)」裡面的 mono font 發現的。

找機會來用用看,看起來算順眼?

Update:居然忘記連結到字型頁上了:「Geist Sans & Geist Mono」。