Exactly-Once Delivery,這個需求做不了

https://bravenewgeek.com/you-cannot-have-exactly-once-delivery/ 小小摘要 Distributed systems 就是 trade-offs 的權衡。 (傳統)理論上不可能實作出 exactly-once delivery,任何跟你說做得出來的都是唬爛你或是不了解什麼是 distributed systems。實務上可以透過 idempotent (同樣的訊息處理兩次不影響)或是 deduplication 來實現同樣效果。 於是我們只能從 at-most-once 跟 at-least-once 中做選擇,而大家可能都選了 at-least-once。 延伸閱讀 There is no nowin a distributed system. CAP Theorem = consistency, availability, and partition tolerance. Amazon SQS FIFO queue 有支援 exactly-once processing,但實際上也是透過 deduplication 跟 acknowledgement 機制來實現 (fake it),如這篇文章所說明。

January 5, 2022 · 1 分鐘 · maple

2021 DevOps Roadmap

今天才知道這個火紅的 repository [1] 跟與體感很接近的 devops roadmap lol [1] https://github.com/kamranahmedse/developer-roadmap/.

November 24, 2021 · 1 分鐘 · maple

「最佳化」AWS 帳單

第一次認真看完 Corey Quinn 的信,在講 The TurboTax of AWS Billing,除了一如既往生動的舉例跟嘲諷以外,他提到為什麼他的諮詢費用是「固定費用」而不是取決於「幫客戶省下多少錢」。 簡單來說,不是帳單變少就是好,我的價值是幫你做出最好的調整。如果要高可用當然費用就會增加,但不是每個場景都會需要這種架構(例如水源一二三不需要多區域部署來增加 availability,但定期的 S3 備份可以提高 durability)。如果今天我收費模式是「抽佣省下來的金額」,我的目標會被導向找出可以省錢的點,而非「如果我是你我會這樣架構」。很好理解卻也很容易踩入的誤區。 Side note: Concepts of AWS Well-Architected Framework

October 24, 2021 · 1 分鐘 · maple

Nginx 新增 keepalive_time 參數

Nginx 在 1.19.10 以後開始支援設定 keepalive_time,初始值如下: // https://nginx.org/en/docs/http/ngx_http_core_module.html Default: keepalive_requests 1000; Default: keepalive_time 1h; Default: keepalive_timeout 75s; // https://nginx.org/en/docs/http/ngx_http_upstream_module.html Default: keepalive_requests 1000; Default: keepalive_time 1h; Default: keepalive_timeout 60s; keepalive_time 限制了 total connection lifetime,如這個 commit 所說明。 在原先的設定裡面,其實 keepalive connection 也不是無限久,理論上最多就是 keepalive_requests * keepalive_timeout 的時間。 是說 75000s 將近 21h 但 keepalive_time default 卻是 1h 會不會有點太短。

October 22, 2021 · 1 分鐘 · maple

S3 減一等於 R2

上週一直被 Cloudflare 推出的 R2 給洗版,例如官方介紹的這篇文章,完全就是來打 AWS S3。我覺得用 minus the egress fees 的概念然後取名 R2 (S3 minus one) 很硬要但有趣。 亮點: $0.015 per GB vs. S3 ~$0.025 vs. S3 Glacier ~$0.005 完全相容 S3 API 可用性跟 S3 一樣 99.999999999% (11 9’s) egress 免費,S3 ~$0.1 per GB 等到 R2 真的上線,感覺有機會大殺四方,說明 Your margin is my opportunity。

October 4, 2021 · 1 分鐘 · maple

有效避免 GFW 的 DNS poisoning

在這篇 Tweet 看到有趣的 Paper How Great is the Great Firewall? Measuring China’s DNS Censorship,透過在美國及中國的實驗找出 censored domains,進而實作出可以有效避免 GFW DNS poisoning 的方式。 GFW 如何運作? GFW 是 on-path injector,並且不會丟棄或修改由 resolver 或是 authoritative name server 的回覆。因此只有在路徑上會經過 GFW 時才會觀察到此行為,例如日本客戶端透過中國 resolver 查詢 www.google.com。 GFW 會偽造不合理的 IPv4/IPv6 地址,並且因為 GFW 離客戶端更近,客戶端通常會更快地收到來自 GFW 的回覆並採用。舉例來說: // 中國聯通的 DNS resolver // 解析 Google 網站回傳的 IP 地址卻指向 Microsoft 的網站 $ dig www.google.com @202.102.224.68 +short 173.244.217.42 Paper 裡面定義了 GFW overblocking 的行為,例如 torproject.org 是 censored domain,但 mentorproject.org 卻也一併被污染。 ...

August 20, 2021 · 2 分鐘 · maple

佈景主題 Twenty Sixteen 修改小記

WordPress 佈景主題 Twenty Sixteen 在呈現首頁的時候會顯示各文章的所有內容,若文章有摘要則會同時呈現。覺得這樣版面有點太亂,但這個佈景主題也沒有提供修改的地方,只能直接改檔案。 原始程式碼 透過 Appearance > Theme Editor 找到 content.php 會看到以下這段: <?php twentysixteen_excerpt(); ?> <?php twentysixteen_post_thumbnail(); ?> <div class="entry-content"> <?php the_content( sprintf( __( 'Read more...', 'twentysixteen' ), get_the_title() ) ); ... 這邊的 the_content() 會把所有的文章內容顯示出來,或是搭配 ` ...

May 25, 2021 · 1 分鐘 · maple

Elon Musk @ Clubhouse

昨天剛加入 Clubhouse,今早 2/1 就看到一堆人在說 Elon Musk 台灣時間 2 PM 要在 Clubhouse 說話,就跟著一窩蜂等著加入,心裡想得是 Clubhouse 有沒有可能同時 live audio streaming 1M 的人。2:04 PM 打開 App 就發現每個房間上限是 5000 lol 後來切到 YouTube 其他人 stream 出來的當背景音樂聽,斷斷續續聽到的一些點: 我們打算五年半後上火星。 目前沒有有外星人的證據,但 “quite possible” 有外星人。 “He who controls the memes controls the universe.",說 memes 是 10,000 not 1,000 words,有的非常 insightful。 關於他五歲小孩的教養方式?說他小孩的教育大部分都是透過 YouTube 或是線上教育,他提到要讓教育變得跟像玩遊戲一樣 “engaging”,提到要 “explain the why”,因為我們傾向於忘記不相關的東西,此時如何讓學習變得 “relevant” 就顯得重要。舉例來說,拆解工程車的過程我們學到每個 module 是如何被連接,這會比直接上一堂課教我們怎麼組裝工程車來得容易記憶。 談 Neuralink 的時候說現在的人本來就有點像是 “人造人 (cyborg-like)",例如我們從來離不開手機。Neuralink 的一個長期目標是讓人可以直接用思考來溝通 (沒聽錯的話)。舉例來說我們用手機打字的 bitrate 很慢,手機感覺像是在跟樹說話,如果我們可以透過 direct neural interface 來大幅提高溝通速度,我們就可以更高速地來 “processing”。 支持 Bitcoin,認為即將迎來 “broader acceptance”;對於其他的各種 currencies 則沒有強烈意見。 Tesla 的目標是兩千萬台車一年 [1],原因是只要取代屆時所有車子 (2 billion) 的 1%,就足以推動公司 “加速推廣永續能源” 的長遠目標。Tesla 希望能快速提高產能,但目前主要的貧頸在於 battery cell 不夠快。 推薦了 Cobra Kai 眼鏡蛇道館 XD 覺得新奇有趣的一天。 ...

February 1, 2021 · 1 分鐘 · maple

[2021] 遷移 WordPress 小記

(2021/02:更新 Spot instance 還有安裝過程。) (2021/03:更新憑證更新的注意事項。) 先前用的是 Hugo 來生成靜態頁面,但覺得編輯上還是有點麻煩,心血來潮遷移到 WordPress。大概紀錄一下流程,在這之前完全沒有安裝 / 使用 WordPress 的經驗。 主機選擇 比較熟 AWS 所以就直接開了 EC2。t3a.micro 搭配三年的 Reserved instance 大概每小時 $0.005 美金、一個月大概 $3.6 美金。 對照組用了 Spot instance (persistent request) 開了 t3.micro,從去年開始已經可以支援 stop/start,感覺費用應該跟 Reserved instance 差不多但有更多彈性。 [2021/08] Spot instance t3.micro 每 24 小時 $0.1 美金、一個月大概才 $3 美金,跑了半年都沒有被中斷,比 t3a.micro reserved instance 還好用。 安裝過程 看這篇在 Amazon Linux 2 上把 LAMP 裝起來。 看這篇裝最新的 WordPress,我依照步驟設定起來是 5.6。裝完後可以用 HTTP 來存取 WordPress 了。 綁定 EIP。 CloudFront 由於先前已經有設定,只是增加新的 Origin — 用 HTTP only 的方式指到 EC2,但發現會有 mixed content block 的問題 (https:// 連上 CloudFront 但頁面的物件用 http:// 去請求會被阻擋)。 為了解決此問題需要回源使用 HTTPS,於是參考這篇搭配 certbot 開啟了 TLS。這邊記得憑證的 subjectAlternativeName 要包含回源所使用的域名,這樣 CloudFront 回源不帶 Host 的時候才不會有問題。 CloudFront 改為使用 HTTPS 回源。確定已經可以用 https:// 瀏覽及管理 WordPress。 在官網找一個自己喜歡的 Theme 裝起來,搭配 Additional CSS 去微調一下版面,就可以開始使用了。 參考這篇把 EC2 Auto Recovery 設定起來,避免 EC2 突然壞掉。 參考這篇在 EC2 上只放行 CloudFront 流量。 搭配 EBS Lifecycle Policy 設定自動備份。 把 Google Analytics 放到 Theme Header (header.php) 裡面。 其他小記 目前還不知道 WordPress 的架構,也沒裝什麼 plugins。先依據這篇文章的建議設定了 CloudFront cache behavior,之後有時間可能會想要把 static content 放在 S3 上。 certbot 憑證更新需要放行 port 80,不然憑證會更新失敗。要再找時間看能不能走其他驗證方式,例如透過 DNS 或是 port 443。 怕太單調想要找圖可以去芝加哥藝術博物館找無限制使用用途的圖,也就是有標示 Public Domain (CC0) 的畫作 [1]。例如本 blog 用的就是 Snow at Akabane Bridge in Shiba。 寫在 Notion 上的筆記竟然可以無痛直接貼到 WordPress 編輯器真是不錯。 如何增加 WordPress 的安全性? [1] https://www.artic.edu/open-access/open-access-images

January 4, 2021 · 1 分鐘 · maple

期待 CloudFront 能實現的功能

前陣子看到這個 tweet 問大家希望能在 CloudFront 實現的功能,覺得不錯的有: Managed security group (讓 AWS origin 可以直接掛載來放行 CloudFront IP,不用用很麻煩的 Lambda 去定期更新) WAF at behavior level (像是 static content 就不需要 WAF) Built-in redirection rules (像是 ALB 那樣) stale-while-revalidate header support (這篇文章解釋得很清楚)

January 4, 2021 · 1 分鐘 · maple