跳到主要內容

館長的網站技術瓶頸,小弟弟來解答 - notorious-2019.com

館長的網站技術瓶頸,小弟弟來解答 - notorious-2019.com

昨天看到館長的網站倒了,也看到館長說一個月花費大概一百萬左右的月費在支持這個架設的電商網站,也對外發布出來訊息,希望求救,

直接講結論

建議解法,

1. 首先要做的事情是讓整個網站可以橫向擴展 (Load Balancer + n 台伺服器),對,相信我,IIS 也是可以做 Scale out, 這是對於 Application layer 服務的解法。

2. 資料的部分 SQL 吞吐量,建議改成 GCP Cloud SQL, 或者就直接轉到 Azure SQL Server 環境上會相對容易解決 SQL 的問題。

上述 2 個步驟都處理完,其實 100 萬的費用,應該 20000 concurrent user 是沒有問題的,但前提是要設定『對』!

額外需要花較長期時間要處理的,建議就是在 Queue 的處理,購物車的狀態都可以進入到 Queue 再來處理 SQL insert 的問題,減少不斷的 insert / update 的狀態,後文會提到 ...

底下詳細的會再說明如何後後續還有哪些處理的細節。


這兩天剛好有個小空擋,就來分析一下狀況,

可以從外部讀取得到的服務大致上如下,

  • ASP.Net: 4.0
  • IIS 10 + Windows (廢話)
  • SQL Server (推測)
  • OP Service: PleskWin
  • Host: Google Cloud
  • DNS: Cloudflare

前端服務內容架構

Server-side render, jQuery base, 推測有可能採用現成購物車來進行,看起來不太像是用 wooCommerce 比較像是 Cart Functionality 這類的項目直接搭建而成(當然這純屬猜測)

  1. 功能拆解

因為網站是透過 Server site render 所有頁面都需要重新透過伺服器進行載入,這樣的狀況,如果在頻繁忙碌的 eCommerce 網站架構下會是一個致命傷,

簡單來說,數量的查詢,特惠價,優惠碼等等資訊的處理,使用者每做一步都需要重新跳轉頁面,或者整頁面重新讀取,只是為了部分的資料更新,這些都可以抽取出來成為 API ,透過 AJAX 的方式進行讀取。

  1. 讀寫分離

在不了解目前資料庫複雜狀態下,首先要讓所有人都可以讀取到資料,頁面可以跑出來,建議至少將讀取資料庫,和寫入資料庫的部分進行拆分。

這個設定可能自己 host 的時候會比較多麻煩事情,但如果透過 Azure SQL Server 的設置會方便許多,這也是為什麼會推薦可以直接用 Azure SQL Server.

  1. SPA 架構建置

針對第一部分的優勢,會建議如果工程能量許可,建議將程式改成 SPA 的方式來進行,這樣可以大量單純資料邏輯,還有讓後端做單純的計算,而不用負擔大量的重新頁面輸出資訊,多餘的 HTML Tag 等。

  1. 頁面快取

很多熱門商品其實會是大部分使用者進來搶購的項目,會建議在活動頁面,廣告頁面盡量設置 page cache 的方式來進行(目前看起來都是設置成 no cache)或者類似用 varnish 的方式,來進行快取的處理。

但是目前沒有辦法碰到伺服器就不深入去探討實作複雜度的問題。

  1. 透過 Queue 進行搶購

因為有太多邏輯和商務資訊都在 SQL 端,為了減少大量的 SQL 處理,建議在購買商品的部分,可以採用 Queue 的方式來進行,而不是大量的依賴 SQL CRUD 。

一來可以避免 SQL lock 的問題,二來可以讓 Queue 進行控管 Racing 的問題,實作細節上不多做說明,總之 Event Queue / Queue 都是初期解決 SQL 瓶頸的好朋友。

碎碎念

很多人聽到一個月付費用 100 萬很多,或者很不值得什麼之類的,甚至是覺得被『共潘辣』,實際上狀況到底如何大家不用在那邊瞎猜,因為 Cloud 費用要直接上 100 萬,其實並不難,特別是在 Windows 這種有 license 的服務上,要直上到每個月 100 萬,是真的有可能的。

推測,接案方可能是很少處理類似有流量進來的問題,導致於使用比較傳統的架構,比較傳統的方式來解決使用者流量問題,無法訪問的問題。

畢竟提升機器等級,提升環境是解決方法的一個方式,但在實務上,更多都是要回去看一下 index 設定了沒, SQL 下的方式有沒有辦法進行優化,減少不必要的 join 等等。

是說啦, .net 建議可以換一下成為 .net core ,這樣彈性和架構就可以更多元, k8s 可能會是一個更容易解決問題的方案,但這前提就真的是要從 .net -> .net core

最後,不要動不動就叫人家重寫程式,打掉重練,重練的代價,永遠都隱含著你所不知道的成本,網站能夠穩定,網站能夠順利進行,裡面藏了多少次的 debug ,你永遠不會知道,這不是讓你耍花槍的時候,而是真正上戰場,如何用最少的子彈達到正確目標的實際考驗。

以上!

丟出議題包磚引玉,如果或任何討論,

就傳個粉絲頁跟小弟互動一下吧!(啾咪)

https://www.facebook.com/caesarfromtaiwan


留言

這個網誌中的熱門文章

npm 還可以看影片,沒想到真的有人這麼做

 還真的有人做這件事情, 庆余年2剛上線,有一位小哥竟然利用 npm 包的機制,將整套高清視頻都搬上來了。 https://x.com/fengmk2/status/1791498406923215020 圖片來源, https://x.com/fengmk2/status/1791498406923215020/photo/1 此 Package 出處 https://www.npmjs.com/package/lyq2?activeTab=versions 截圖留念, 機制說明 NPM(Node Package Manager)是一個流行的 JavaScript 軟件包管理器,用於管理和分發 Node.js 應用的依賴。它允許開發者將自己的代碼打包成「包」,並上傳到 NPM 的公共註冊表,供其他開發者下載和使用。這個過程通常包括以下步驟: 創建 NPM 包 :開發者將自己的代碼和相關文件打包成一個 NPM 包。 上傳到註冊表 :將包上傳到 NPM 的公共註冊表。 下載和使用 :其他開發者可以通過 NPM 命令行工具下載並安裝這些包。 這位小哥利用這一機制,可能是通過將整套高清視頻文件打包成 NPM 包並上傳到公共註冊表。其他人只需通過簡單的 NPM 命令即可下載這些視頻文件。 影響 版權問題 :這種行為涉及明顯的版權侵犯。高清視頻通常受到版權保護,未經授權的分發和下載都是非法的。 NPM 註冊表的可靠性 :這類內容的出現可能會損害 NPM 註冊表的可靠性和聲譽。NPM 註冊表是開發者分享和使用代碼的重要平台,如果充斥著這些不合法的內容,會影響其公信力。 潛在的安全風險 :將視頻文件偽裝成 NPM 包可能會帶來潛在的安全風險。下載這些包的用戶可能會無意中下載到惡意軟件或其他有害內容。 技術濫用 :這一行為展示了技術的濫用,原本為了方便開發者分享和使用代碼的機制,被用來分發非法內容,會對整個開發者社區造成負面影響。 歡迎留言給我,讓我們得到更多討論,一起回饋更多可能。 如果對於技術架構或者技術開發有相關需要顧問教育訓練服務或專案開發,聯絡方式如下,或者是與皇漢科技 EXMA-Square 進行聯繫。 FB: https://www.facebook.com/clonncd/ Twitter: https://twitter.com/clonncd 熱血漢誌: htt

從易經八卦到 AI 應用:用 LLM 自動化數據整理的工程探險

從 2023 年開始,在去年 為何技術老人這樣想那樣做? 的那場分享之前,就開始探索管理的更多可能性,以及探索更深層的奧秘,宇宙的二進位,生活中的陰與陽,到透過朋友深入探索 8 進位和 64 進位的玄學領域。 一開始只是想將自己體驗進行工程的還原,先是以為透過 ai 可以很快(偷懶)就可以解決掉資訊整理的問題,這邊有些踩雷的過程,以及對於整體實作的紀錄,分享給大家。 人生,原本以為很輕鬆的事情,最後都會不太容易 原本目標是希望將網路上許多的八卦資訊,以及六十四卦象內容,透過 AI 將資料進行彙整,就資料進行整合以及釐清就花了些時間 (汗) 以下且聽我慢慢道來 ... . 思緒步驟 大概步驟會是這樣,首先進行基礎八卦資訊搜集,大概由乾掛到坤卦,這些都可以在網路上容易取得,(這邊採用的是先天八卦順序) https://chatgpt.com/share/672083ea-4000-8010-ae50-3e120d845244 接著進入重點, 64 卦目前並沒有太多工程項目可以進行整合資料,因此主要透過 ChatGPT 產生資訊,以及透過 wiki 進行先達到快速效果。 https://chatgpt.com/share/67208416-c210-8010-9d43-a8c7235a1b03 緊接著,就會得到一串很像是 64 掛的內容, 不看不知道,一看嚇一跳,取得資料中會包含錯誤資訊,對應錯誤的上下卦,但畢竟是電腦,有錯很正常,這才是我認識的 ChatGPT (這邊也有試過 Claude 也有相同問題)。 校正回歸 此時經驗就非常重要,透過 AI 協助我們進行資料編寫比對,但不是單純的比對,而是要先想清楚自己的目標是什麼。 64 卦,兩兩相對。 64 卦,每個卦象不重複。 基礎於一開始 『懶』的狀態 , 首先直覺性的,是將比對錯誤的 json 直接丟入,原本預計透過 chain of thought 的方式,讓 llm 進行重複確認,但 ... 測試發現,需要透過 llm 產出原生資料越大時,隱藏的重複錯誤性會隨之提高。 llm 不轉,我轉 因此,這邊的解法朝向糾錯為主。 首先回到目的性,我們需要得到的結果是 完整的 64 卦象 取得對應的正確上下卦位置。 當我們有這樣明

Redis 已經不再免費了嗎?Redis is no longer free software ?

  根據Redis Source Available License 2.0 (RSALv2)的條款,這份授權協議提供了一定程度的使用、複製、分發、使其可用、以及創建衍生作品的自由,但這些自由受到特定限制,特別是關於將軟體功能作為服務提供給第三方或分發軟體的方式,這可能限制了軟體的自由共享和再分發。 根據自由軟體基金會(Free Software Foundation, FSF)和開源倡議組織(Open Source Initiative, OSI)定義的自由軟體和開源軟體的標準,一個軟體要被認為是“自由軟體”或“開源軟體”,它需要允許用戶在任何目的下運行軟體、研究和修改軟體、以及自由地重新分發複製品,有時還包括創建和分發衍生作品的自由。 RSALv2設置了一些重要的使用和分發限制,特別是關於禁止將軟體或其修改版本作為服務提供給第三方的限制,這可能不符合FSF和OSI對自由軟體或開源軟體的定義。這些限制主要是為了保護Redis Ltd.的商業利益,同時允許使用者在某些條件下使用和修改軟體。 因此,雖然RSALv2提供了一些使用和修改軟體的自由,但它由於上述限制,可能不會被廣泛認定為符合“自由軟體”或“開源軟體”的嚴格定義。它更像是一種介於傳統封閉源代碼軟體和開放源碼軟體之間的“源可用”授權模式。 主觀想法 怎麼開源的狀態下還是需要商業利益的支持,只有在商業模式下才能走得長久,這段協議會影響到的基本上三大公有雲 Azure / AWS / Google Cloud Platform 絕對首當其衝,但如果以服務提供商的角色,能夠跟這樣的開源坐下來好好談談,也許這樣的 Agreement 可能對於 Redis 後續的生態發展才會是好的方式? 就讓我們持續看下去! Ref: https://lwn.net/Articles/966133/ https://redis.com/blog/redis-adopts-dual-source-available-licensing/ https://redis.com/legal/rsalv2-agreement/