Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

不會寫程式也能懂!網站架構基礎一次搞懂

最後更新:2025年12月9日基礎概念

你有沒有想過,每天滑的 IG、逛的蝦皮、玩的手遊,背後到底是怎麼運作的?

其實不管什麼網站或 APP,背後都有一套基本架構。

今天我們就用一張圖,把這些東西講清楚。不用怕,沒有艱澀的術語,就當作是在聽朋友聊天。

先看這張圖

中間那一圈是核心(交付、權限、運算、資料、儲存),外面包著的是品質保證(效能、資安、軟工)。我們一個一個來看。

交付:東西怎麼送到你手上?

簡單說,就是使用者要怎麼「拿到」這個產品。

有哪些方式?

API

讓不同系統可以互相傳資料的方式。

舉個例子:你在蝦皮買東西,結帳時選擇信用卡付款。蝦皮本身不會處理刷卡,它會把你的付款資訊送給銀行,銀行處理完再把結果送回來。這個「送出去、收回來」的過程,就是透過 API 完成的。

使用者不會直接看到 API,但你每次登入、付款、查物流,背後都有 API 在幫忙傳遞資料。

網頁(Web)

就是你打開瀏覽器看到的東西。Facebook 網頁版、Medium、各種部落格都是。

桌面程式(Desktop)

要下載安裝的那種。Windows 是 .exe 檔,Mac 是 .dmg 檔。最常見的就是遊戲,像 Steam 上的遊戲都要先下載。

手機 APP

從 App Store 或 Google Play 下載的。然後這邊還要再分 iOS 跟 Android,有時候兩個都要做。

如果你是 PM,第一件事要問什麼?

「我們到底要做什麼?」

是要開 API 給別人串?還是做網頁?還是做 APP?還是通通都要?這個沒搞清楚,後面都是白做。

權限:你是誰?你能幹嘛?

權限其實在處理兩件事:

  1. 驗證(Authentication):確認「你是誰」— 你說你是小明,系統要怎麼確定你真的是小明?
  2. 授權(Authorization):確認「你能做什麼」— 你是小明沒錯,但你能看別人的私密貼文嗎?能刪別人的留言嗎?

最常見的驗證方式就是「登入」。你輸入帳號密碼,系統核對正確後,就知道你是誰了。

兩種模式

Client to Server(從使用者端發起)

這是你看得到的登入過程:

  • 打開網站,看到登入畫面
  • 輸入帳號密碼,按下登入
  • 或是點「用 Google 登入」「用 Facebook 登入」

不管是自己輸入帳密,還是用第三方登入,都是你主動在瀏覽器或 APP 上操作的,這就是 Client to Server。

Server to Server(伺服器之間互相驗證)

這是你看不到的,發生在系統的後台。

舉個例子:你登入蝦皮一次之後,關掉網頁,隔天再打開,通常還是登入狀態,不用重新輸入密碼。這是因為系統在背後自動幫你處理驗證,確認「這個人昨天登入過,還沒過期,讓他繼續用」。

另一個例子:有些公司內部系統會串接在一起,A 系統要跟 B 系統要資料,B 系統要先確認「A 系統有沒有權限來要這筆資料」。這個驗證過程也是 Server to Server,完全在後台發生,使用者不會知道。

簡單區分

類型誰發起的你看得到嗎常見情況
Client to Server使用者看得到輸入帳密登入、第三方登入
Server to Server系統看不到保持登入狀態、系統之間串接
誰發起的使用者
你看得到嗎看得到
常見情況輸入帳密登入、第三方登入
誰發起的系統
你看得到嗎看不到
常見情況保持登入狀態、系統之間串接

運算:系統怎麼處理事情?

當使用者對系統發出請求(下單、發文、傳訊息),系統要決定「怎麼處理這件事」。不同的情境需要不同的處理方式,這就是運算模型在解決的問題。

Queue(佇列 / 排隊機制)

問題是什麼?

蝦皮雙 11,同時有一萬人下單,每筆訂單都要寄 Email 通知買家。如果系統試著「同時」寄出一萬封信,會發生什麼事?系統負荷不了,直接當掉。

怎麼解決?

讓這些任務排隊。第一筆訂單的 Email 先寄,寄完換第二筆,第二筆寄完換第三筆⋯⋯這樣系統不會被塞爆,每封信都能順利寄出,只是有些人會晚一點收到。

實際應用

  • 發送 Email 或簡訊通知
  • 處理大量訂單
  • 產生報表(報表很吃資源,不能同時產生太多)
  • 影片轉檔(上傳影片後,系統慢慢幫你轉成不同畫質)

Pub/Sub(發佈 / 訂閱機制)

問題是什麼?

你在 YouTube 訂閱了一個頻道,他有一百萬個訂閱者。當他發新影片時,要怎麼通知這一百萬人?一個一個去通知太慢了。

怎麼解決?

用「發佈 / 訂閱」的模式:

  1. 你按下「訂閱」,系統記住你對這個頻道有興趣
  2. 創作者上傳新影片(發佈)
  3. 系統自動把通知送給所有訂閱者

創作者不用知道有誰訂閱他,他只管發佈;訂閱者不用一直重新整理,有新內容系統會主動通知。

實際應用

  • YouTube / IG / Medium 的追蹤通知
  • 新聞 APP 的推播
  • 股票 APP 的價格警示(「台積電漲到 X 元時通知我」)
  • 團隊協作工具的訊息同步

WebSocket(即時雙向連線)

問題是什麼?

你在玩線上遊戲,你移動角色,對手要立刻看到;對手攻擊你,你也要立刻看到。如果有延遲,遊戲根本沒辦法玩。

一般的網頁是這樣運作的:你發出請求 → 伺服器回應 → 結束。如果你想知道有沒有新資料,要再發一次請求。這種「一問一答」的方式太慢了,不適合即時互動。

怎麼解決?

用 WebSocket 建立一條「持續連線的通道」。連上之後,雙方可以隨時互傳資料,不用每次都重新問。

就像打電話:接通之後,你隨時可以講話,對方也隨時可以回應,直到其中一方掛掉。

實際應用

  • 線上遊戲(即時同步玩家動作)
  • 聊天室、通訊軟體(訊息即時送達)
  • 股票報價(價格跳動即時更新)
  • 多人協作文件(Google Docs 多人同時編輯)
  • 直播互動(彈幕、留言即時顯示)

快速對照

模式解決什麼問題常見應用
Queue大量任務同時來,系統會爆掉寄通知、批次處理、轉檔
Pub/Sub一個事件要通知很多人追蹤通知、推播、警示
WebSocket需要即時互動,不能有延遲遊戲、聊天、即時報價
解決什麼問題大量任務同時來,系統會爆掉
常見應用寄通知、批次處理、轉檔
解決什麼問題一個事件要通知很多人
常見應用追蹤通知、推播、警示
解決什麼問題需要即時互動,不能有延遲
常見應用遊戲、聊天、即時報價

資料 vs 儲存:這兩個不一樣!

很多人會搞混,我們來釐清。

資料(Data)

就是「紀錄」,可以改一部分。

比如會員資料:

  • 姓名:小明
  • 電話:0912-345-678
  • Email:ming@example.com

如果小明換電話,我們只要改「電話」那一欄就好,其他不用動。

儲存(Storage)

就是「檔案」,要改的話要整個換掉。

存的是什麼?圖片、影片、PDF、音樂檔⋯⋯這些靜態檔案。

實際例子

假設會員要上傳大頭貼,資料會怎麼存?

flowchart LR
    subgraph 資料庫["📋 資料庫(會員資料)"]
        direction TB
        T1["name: 小明"]
        T2["gender: 男"]
        T3["email: ming@example.com"]
        T4["avatar: /avatars/1"]
    end

    subgraph 儲存空間["🗂️ 靜態儲存空間"]
        direction TB
        F1["📁 avatars"]
        F2["🖼️ 1.jpg"]
        F3["🖼️ 2.jpg"]
        F4["🖼️ 3.jpg"]
        F1 --- F2
        F1 --- F3
        F1 --- F4
    end

    T4 -->|"路徑指向實際檔案"| F2

看懂了嗎?

  1. 圖片本身(那張 .jpg 檔)→ 存在右邊的「儲存空間」
  2. 圖片的路徑 /avatars/1 → 存在左邊「資料庫」的 avatar 欄位

所以資料庫裡存的是「路徑」,真正的圖片在另一個地方。當網頁要顯示大頭貼時,系統會先從資料庫查到路徑,再去儲存空間把圖片拿出來。

資料庫又分兩種

關聯式(RDBMS)

資料之間有關係。會員連到訂單、訂單連到商品⋯⋯電商網站很適合用這種。

非關聯式(NoSQL)

比較彈性,適合需要快速存取或分散式的系統。

外圈:效能、資安、軟工

這三個在外圈,負責確保核心功能可以穩穩地跑。

效能

在意什麼?

  • 網頁會不會很慢?
  • 能撐住多少人同時用?
  • 系統會不會卡頓?

資安

在意什麼?

  • 會不會被駭?
  • 資料會不會外洩?
  • 密碼有沒有加密?

功能做得再好,如果很慢或不安全,使用者還是會跑掉。

軟工:工程師的基本功

軟工跟效能、資安一樣,都是在外圈,負責支撐整個系統的品質。

包含哪些事?

版本控制(Git)

程式碼怎麼管理、怎麼多人協作。

測試

怎麼確保程式沒有 bug。

部署

怎麼把程式上線、更新。

文件

怎麼讓其他人看懂你的程式。

這些是地基,沒做好的話上面蓋什麼都會歪。

總結一下

內圈(核心功能)

這個東西在講什麼
交付產品怎麼送到使用者手上
權限怎麼確認你是誰、你能做什麼
運算系統怎麼處理各種任務
資料可以局部修改的紀錄
儲存要整個換掉的檔案
在講什麼產品怎麼送到使用者手上
在講什麼怎麼確認你是誰、你能做什麼
在講什麼系統怎麼處理各種任務
在講什麼可以局部修改的紀錄
在講什麼要整個換掉的檔案

外圈(品質保證)

這個東西在講什麼
效能快不快、穩不穩
資安安不安全
軟工開發流程有沒有做好
在講什麼快不快、穩不穩
在講什麼安不安全
在講什麼開發流程有沒有做好

最後

下次當你在用任何網站或 APP 的時候,可以想一下:

  • 這是用什麼方式交付給我的?
  • 我登入的時候,背後發生了什麼事?
  • 我上傳的照片,存在哪裡?

慢慢地,你就會對這些東西越來越有感覺了。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

基礎概念

目錄

  • 先看這張圖
  • 交付:東西怎麼送到你手上?
  • 有哪些方式?
  • 如果你是 PM,第一件事要問什麼?
  • 權限:你是誰?你能幹嘛?
  • 兩種模式
  • 簡單區分
  • 運算:系統怎麼處理事情?
  • Queue(佇列 / 排隊機制)
  • Pub/Sub(發佈 / 訂閱機制)
  • WebSocket(即時雙向連線)
  • 快速對照
  • 資料 vs 儲存:這兩個不一樣!
  • 資料(Data)
  • 儲存(Storage)
  • 實際例子
  • 資料庫又分兩種
  • 外圈:效能、資安、軟工
  • 效能
  • 資安
  • 軟工:工程師的基本功
  • 包含哪些事?
  • 總結一下
  • 最後