<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>負載平衡 - 東東 GCP 教學 - GCP 實戰講師</title>
	<atom:link href="https://dongdonggcp.com/tag/%E8%B2%A0%E8%BC%89%E5%B9%B3%E8%A1%A1/feed/" rel="self" type="application/rss+xml" />
	<link>https://dongdonggcp.com</link>
	<description>助你考取證照，轉職成功</description>
	<lastBuildDate>Tue, 28 Oct 2025 09:22:36 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://dongdonggcp.com/wp-content/uploads/2025/04/cropped-340838097_121391010914395_5443948698124160121_n-32x32.jpg</url>
	<title>負載平衡 - 東東 GCP 教學 - GCP 實戰講師</title>
	<link>https://dongdonggcp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">243235092</site>	<item>
		<title>通訊協定轉送 (Protocol Forwarding) 是什麼？何時會用到？</title>
		<link>https://dongdonggcp.com/2025/10/28/what-is-protocol-forwarding-and-its-usage/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-is-protocol-forwarding-and-its-usage</link>
					<comments>https://dongdonggcp.com/2025/10/28/what-is-protocol-forwarding-and-its-usage/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 28 Oct 2025 09:22:34 +0000</pubDate>
				<category><![CDATA[Load Balancer]]></category>
		<category><![CDATA[ALB]]></category>
		<category><![CDATA[Firewall Rules]]></category>
		<category><![CDATA[Protocol Forwarding]]></category>
		<category><![CDATA[TCP Proxy LB]]></category>
		<category><![CDATA[負載平衡]]></category>
		<category><![CDATA[通訊協定轉送]]></category>
		<category><![CDATA[防火牆規則]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=11462</guid>

					<description><![CDATA[<p>通訊協定轉送 (Protocol For [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2025/10/28/what-is-protocol-forwarding-and-its-usage/">通訊協定轉送 (Protocol Forwarding) 是什麼？何時會用到？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">通訊協定轉送 (Protocol Forwarding) </h2>



<p>假設你有一個 VM,你想要讓外面的人可以直接連到這個 VM 的某個 port (通訊埠), 但你又希望有一些網路層的設定或保護。</p>



<p>這時候你就可以用「通訊協定轉送」這個功能。它的作用就是把外部進來的網路流量,按照你設定的規則,轉送到指定的 VM 上面。</p>



<h2 class="wp-block-heading">目標執行個體 (Target Instance)</h2>



<p>當你設定通訊協定轉送的時候, 你需要告訴 GCP「我要把流量轉送到哪裡去」。這個「哪裡」就是你指定的一個 VM 執行個體, 而這個被指定的 VM 在這個情境下就被稱為「目標執行個體」。簡單說, 目標執行個體就是「流量最終要送達的那台 VM」。</p>



<p>假設你有一台 VM 上面跑著一個遊戲伺服器, 這個遊戲使用特殊的網路協定, 不是常見的 HTTP 或 HTTPS。你想要讓玩家可以從網路上連進來,但又想要有一些流量控制。</p>



<p>這時候你就可以設定「通訊協定轉送」,把外部進來的遊戲協定流量轉送到你的 VM 上。在這個設定中,你的這台遊戲伺服器 VM 就是「目標執行個體」。</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="433" src="https://dongdonggcp.com/wp-content/uploads/2025/10/GCP-Protocol-Forwarding-1024x433.png" alt="" class="wp-image-11463" srcset="https://dongdonggcp.com/wp-content/uploads/2025/10/GCP-Protocol-Forwarding-1024x433.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/10/GCP-Protocol-Forwarding-300x127.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/10/GCP-Protocol-Forwarding-768x325.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/10/GCP-Protocol-Forwarding-1536x649.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/10/GCP-Protocol-Forwarding-2048x865.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">外部通訊協定轉送<br><a href="https://docs.cloud.google.com/load-balancing/docs/protocol-forwarding?hl=zh-tw" target="_blank" rel="noopener" title="">https://docs.cloud.google.com/load-balancing/docs/protocol-forwarding?hl=zh-tw</a></figcaption></figure>



<h3 class="wp-block-heading">到底通訊協定轉送長什麼樣子？</h3>



<p>「通訊協定轉送」不是一台 VM,它是一個「網路規則」或「轉送設定」。這個轉送設定會指向一台 VM (也就是目標執行個體), 流量是從外部先到這個轉送規則,然後再被轉送到你指定的 VM 上。</p>



<p>用更簡單的比喻:通訊協定轉送就像是一個「郵局轉信服務」。你告訴 GCP「寄到地址 A 的信,都轉寄到地址 B」,這裡地址 B 就是你的 VM(目標執行個體),而這個轉信規則本身就是「通訊協定轉送」。整個過程只有一台 VM,不是兩台。</p>



<p>另一個常見的情況是企業的 VPN 服務。</p>



<p>VPN 通常會用 ESP(一種加密協定)或特定的 TCP/UDP port,這些都不是標準的網頁流量。如果你想在 GCP 上建立 VPN Server,就必須透過 Protocol Forwarding 來接收這些特殊協定的連線。</p>



<p>此外,像是資料庫的直接連線、串流媒體伺服器、或者物聯網裝置的通訊,只要不是走 HTTP/HTTPS,基本上都可能需要用到這個功能。</p>



<h2 class="wp-block-heading"><strong>與其他方案的差異</strong></h2>



<h3 class="wp-block-heading">難道 TCP Proxy LB 或 Network LB 做不到嗎?它們不是針對 「不是 HTTP/HTTPS 的流量」嗎?</h3>



<h4 class="wp-block-heading"><strong>Load Balancer 的本質功能</strong></h4>



<p>首先要理解,TCP Proxy Load Balancer 和 Network Load Balancer 的核心目的是「負載平衡」。什麼意思呢?就是當你有多台伺服器在背後提供相同的服務時,Load Balancer 會把進來的流量「分散」到這些伺服器上,避免某台伺服器累死、其他伺服器卻閒著。這就像是一個餐廳有多個櫃台,門口的帶位人員會引導客人到比較空的櫃台去排隊。</p>



<p>這些 Load Balancer 雖然可以處理 TCP、UDP 等協定,但它們會「介入」流量的處理。TCP Proxy Load Balancer 會終止(terminate)連線,也就是說,客戶端先連到 Load Balancer,然後 Load Balancer 再重新建立一條新的連線到後端伺服器。Network Load Balancer 雖然是 passthrough 模式,但它仍然會進行流量的檢查和分配,並且需要配置 backend service 和 health check 等複雜的設定。</p>



<h4 class="wp-block-heading"><strong>Protocol Forwarding 的簡單直接</strong></h4>



<p>相比之下,Protocol Forwarding 就單純多了。它不做負載平衡,不需要 backend service,也不會終止或檢查你的連線內容。它就像是一個「純粹的轉接頭」,把特定 IP 和 port 收到的流量,直接原封不動地送到指定的目標。這個目標可以是單一台 VM instance,也可以是一組 target pool(但 target pool 的分配邏輯比 Load Balancer 簡單很多)。</p>



<p>這種設計在某些情況下反而是優勢。比如說,你只有一台伺服器,根本不需要負載平衡的功能,只是想要一個固定的外部 IP 位址來接收特定協定的流量。這時候用 Load Balancer 就太複雜了,還要設定一堆用不到的功能。或者,你的應用程式本身對連線非常敏感,不希望中間有任何「代理」介入,Protocol Forwarding 的直接轉送特性就很重要。</p>



<h4 class="wp-block-heading"><strong>實際場景的選擇</strong></h4>



<p>再舉個具體例子:假設你要架設一個 IPsec VPN Server。VPN 連線通常使用 ESP(IP Protocol 50)或特定的 UDP port,而且連線的狀態非常重要。如果用 TCP Proxy Load Balancer,它會終止連線並重建,這可能會破壞 VPN 協定的運作。如果用 Network Load Balancer,雖然可以運作,但你需要設定 health check、backend service 等,而且如果你只有一台 VPN Server,這些設定都是多餘的。</p>



<p>這時候 Protocol Forwarding 就很適合,你只需要建立一個 Forwarding Rule,指定「所有到這個 IP 的 ESP 協定流量都轉送到我的 VPN Server」,就完成了。設定簡單,流量處理也最直接。當然,如果你後來需要多台 VPN Server 並做負載平衡,那時候再改用 Network Load Balancer 也不遲。</p>



<h4 class="wp-block-heading"><strong>總結差異</strong></h4>



<p>所以簡單來說,TCP Proxy Load Balancer 和 Network Load Balancer 確實可以處理非 HTTP/HTTPS 流量,但它們是為了「多台伺服器的負載分配」而設計的,功能複雜、設定繁瑣。Protocol Forwarding 則是為了「單純的流量轉送」,當你不需要負載平衡,只想要一個乾淨、直接的流量入口時,它就是最佳選擇。這就是為什麼 GCP 會同時提供這些不同的方案,讓使用者根據實際需求來選擇最適合的工具。</p>



<p>你可能會想,為什麼不直接讓伺服器對外開放就好?</p>



<p>確實可以這樣做,但 Protocol Forwarding 提供了一層額外的管理和保護。</p>



<p>透過 Forwarding Rule(轉送規則),你可以統一管理哪些 IP 位址和 port 可以接收流量,而不需要在每台伺服器上個別設定防火牆規則。這樣的架構讓你的網路設計更有彈性,也更容易維護。</p>



<h3 class="wp-block-heading">為什麼保護 Protocol Forwarding 有保護的功能？</h3>



<p>Forwarding Rule 本身並不是用來「阻擋」流量的,它比較像是「開通一條路」。當你建立一個 Forwarding Rule,你是在說「我要讓這個 External IP 的這個 port(或協定)可以接收流量,並且把這些流量轉送到指定的目標」。但這不代表「沒有設定 Forwarding Rule 的 port 就會被擋下來」,因為 Forwarding Rule 根本不管其他 port 的事。</p>



<p>舉個例子來說明:假設你有一台 VM,它的內部 IP 是 10.0.0.5。你申請了一個 External IP 是 34.80.0.100,然後建立一個 Forwarding Rule,把 34.80.0.100:8080 的流量轉送到 10.0.0.5:8080。這時候,外面的人可以透過 34.80.0.100:8080 連到你的 VM。但如果有人試圖連 34.80.0.100:3306(假設你沒設定這個 port 的 Forwarding Rule),會發生什麼事呢?</p>



<h3 class="wp-block-heading"><strong>防火牆規則才是真正的守門員</strong></h3>



<p>答案是:這個連線會失敗,但不是因為 Forwarding Rule 擋住它,而是因為根本就「沒有路可以通」。</p>



<p>Forwarding Rule 只負責「有設定的 port」,沒設定的 port 就不會被轉送,流量會直接被丟棄或回應連線失敗。從這個角度來看,Forwarding Rule 確實有「只開放特定 port」的效果,但它的本質是「開通」而不是「防禦」。</p>



<p>真正的防火牆功能還是要靠 <a href="https://docs.cloud.google.com/firewall/docs/firewalls?hl=zh-tw" target="_blank" rel="noopener" title="">Firewall Rules</a> 來做。Firewall Rules 才是那個會主動「檢查」並「決定要不要放行」的機制。</p>



<p>即使你設定了 Forwarding Rule 把流量轉到 VM,如果 VM 的 Firewall Rules 沒有允許那個 port,流量還是會被擋下來。</p>



<p>所以完整的流程是:</p>



<p>External IP 的流量 → Forwarding Rule 決定要不要轉送 → Firewall Rules 決定要不要放行 → 最後才到達 VM。</p>



<h3 class="wp-block-heading"><strong>兩者的互補關係</strong></h3>



<p>所以正確的理解應該是:Forwarding Rule 是「入口管理」,它決定哪些流量可以進入你的 GCP 架構;Firewall Rules 是「存取控制」,它決定流量能不能到達特定的資源。</p>



<p>兩者是互補的,不是替代的關係。Forwarding Rule 確實讓你不用在每台伺服器上都開放對外 port,但你還是需要 Firewall Rules 來做更細緻的安全控制。這樣的設計讓你的網路架構既有彈性,又有足夠的安全保護。</p>



<p>以下整理一張完整的功能比較表,讓你能清楚看出這四種方案的差異。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">GCP 流量轉送方案功能比較表</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>功能項目</th><th>Application Load Balancer (ALB)</th><th>TCP Proxy Load Balancer</th><th>Network Load Balancer</th><th>Protocol Forwarding</th></tr></thead><tbody><tr><td><strong>支援協定</strong></td><td>HTTP、HTTPS、HTTP/2</td><td>TCP (任意 port)</td><td>TCP、UDP、ESP、ICMP、GRE 等所有 IP 協定</td><td>TCP、UDP、ESP、ICMP、GRE 等所有 IP 協定</td></tr><tr><td><strong>OSI 層級</strong></td><td>Layer 7 (應用層)</td><td>Layer 4 (傳輸層)</td><td>Layer 4 (傳輸層)</td><td>Layer 3/4 (網路/傳輸層)</td></tr><tr><td><strong>負載平衡功能</strong></td><td>有,可依據 URL、Header 等內容分配</td><td>有,依據連線分配</td><td>有,依據連線或封包分配</td><td>無(或僅有基本的 target pool 分配)</td></tr><tr><td><strong>連線處理方式</strong></td><td>Terminate(終止並重建連線)</td><td>Terminate(終止並重建連線)</td><td>Passthrough(直接轉送)</td><td>Passthrough(直接轉送)</td></tr><tr><td><strong>保留客戶端 IP</strong></td><td>否(需從 X-Forwarded-For Header 取得)</td><td>否(需從 PROXY Protocol 取得)</td><td>是(客戶端 IP 完整保留)</td><td>是(客戶端 IP 完整保留)</td></tr><tr><td><strong>跨區域負載平衡</strong></td><td>支援(Global Load Balancer)</td><td>支援(Global Load Balancer)</td><td>僅 Regional(區域內)</td><td>僅 Regional(區域內)</td></tr><tr><td><strong>SSL/TLS 終止</strong></td><td>支援</td><td>支援</td><td>不支援</td><td>不支援</td></tr><tr><td><strong>Health Check</strong></td><td>必須設定</td><td>必須設定</td><td>必須設定(使用 Load Balancer 時)</td><td>選擇性(使用 target pool 時)</td></tr><tr><td><strong>Backend Service</strong></td><td>需要</td><td>需要</td><td>需要</td><td>不需要</td></tr><tr><td><strong>主要使用場景</strong></td><td>網站、Web 應用程式、API 服務</td><td>需要全球分布的 TCP 服務(如遊戲、資料庫代理)</td><td>高效能、低延遲的區域性服務</td><td>單一伺服器、特殊協定、簡單轉送需求</td></tr><tr><td><strong>設定複雜度</strong></td><td>高</td><td>中高</td><td>中</td><td>低</td></tr><tr><td><strong>效能延遲</strong></td><td>較高(需解析內容)</td><td>中等(需終止連線)</td><td>低(直接轉送)</td><td>極低(最簡單的轉送)</td></tr><tr><td><strong>適合伺服器數量</strong></td><td>多台(需負載平衡)</td><td>多台(需負載平衡)</td><td>多台(需負載平衡)</td><td>單台或少數幾台</td></tr><tr><td><strong>IP 位址類型</strong></td><td>支援 External IP</td><td>支援 External IP</td><td>支援 External/Internal IP</td><td>支援 External/Internal IP</td></tr><tr><td><strong>Session Affinity</strong></td><td>支援(Cookie-based)</td><td>支援(Client IP-based)</td><td>支援(Client IP、5-tuple)</td><td>有限支援(僅 target pool)</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>表格重點說明</strong></h3>



<p>這張表格從上到下,逐漸從「功能豐富但複雜」走向「功能簡單但直接」。<a href="https://www.dongdonggcp.com/2024/09/25/how-to-config-gcp-load-balancer/" target="_blank" rel="noopener" title="">Application Load Balancer </a>功能最完整,可以看懂 HTTP 內容並根據網址或 Header 來分配流量,但也最複雜。TCP Proxy Load Balancer 則退一步,不看內容,只處理 TCP 連線,但仍保有全球負載平衡的能力。</p>



<p>Network Load Balancer 更進一步簡化,它是 passthrough 模式,不會終止連線,所以效能最好,但只能在單一區域內運作。最後的 Protocol Forwarding 則是最純粹的,它幾乎不做任何處理,就是把流量轉過去而已,所以設定最簡單,適合那些「我只想要一個入口」的需求。</p>



<p>選擇哪一種方案,關鍵在於你的需求:如果需要根據內容智慧分配流量,選 ALB;如果需要全球分布的 TCP 服務,選 TCP Proxy LB;如果需要高效能且保留原始 IP,選 Network LB;如果只是簡單轉送不需要複雜功能,選 Protocol Forwarding。這樣的設計讓你可以根據實際情況,選擇最符合成本效益的方案。</p>



<p>詳細介紹可以參考<a href="https://docs.cloud.google.com/load-balancing/docs/protocol-forwarding?hl=zh-tw" target="_blank" rel="noopener" title="">通訊協定轉送總覽，</a>設定方法可以參考<a href="https://docs.cloud.google.com/load-balancing/docs/set-up-protocol-forwarding?hl=zh-tw" target="_blank" rel="noopener" title="">設定通訊協定轉送</a>。</p>



<p>關於更多 GCP 負載平衡的概念和實作教學，都在東東的 <a href="https://dongdonggcp.com/gcp-architect-class/" target="_blank" rel="noopener" title="">GCP 線上課程《雲端架構師養成班》</a>，有需要可以進來看喔！</p><p>The post <a href="https://dongdonggcp.com/2025/10/28/what-is-protocol-forwarding-and-its-usage/">通訊協定轉送 (Protocol Forwarding) 是什麼？何時會用到？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/10/28/what-is-protocol-forwarding-and-its-usage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">11462</post-id>	</item>
		<item>
		<title>[GCP 教學] 周杰倫演唱會 AWS 售票系統架構解析 &#8211; 系統穩和 vs 使用者體驗，哪個重要？</title>
		<link>https://dongdonggcp.com/2024/12/05/concert-ticketing-system-architecture-analyzing-and-improvement/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=concert-ticketing-system-architecture-analyzing-and-improvement</link>
					<comments>https://dongdonggcp.com/2024/12/05/concert-ticketing-system-architecture-analyzing-and-improvement/#respond</comments>
		
		<dc:creator><![CDATA[東東]]></dc:creator>
		<pubDate>Thu, 05 Dec 2024 14:57:16 +0000</pubDate>
				<category><![CDATA[雲端架構]]></category>
		<category><![CDATA[Autoscale]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[售票系統]]></category>
		<category><![CDATA[排隊]]></category>
		<category><![CDATA[搶票]]></category>
		<category><![CDATA[擴充]]></category>
		<category><![CDATA[負載平衡]]></category>
		<category><![CDATA[資料庫]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=8135</guid>

					<description><![CDATA[<p>前言 前陣子周杰倫演唱會售票系統面對超過 [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2024/12/05/concert-ticketing-system-architecture-analyzing-and-improvement/">[GCP 教學] 周杰倫演唱會 AWS 售票系統架構解析 – 系統穩和 vs 使用者體驗，哪個重要？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">前言</h2>



<p>前陣子周杰倫演唱會售票系統面對超過 89 萬人同時搶票的情況，售票系統方很自豪地說，系統能夠承載如此大的流量，不會掛掉的同時，還能順利地把票賣完。</p>



<p>雖然能夠推持住系統不會崩潰，但該系統的售票頁面不斷出現「轉圈圈」的狀況，讓許多歌迷無法順利購票，關於使用者體驗這一點，似乎還有可以再優化的空間。</p>



<p>本文將從技術角度深入分析售票系統架構，並探討各種可能的優化方案。</p>



<h2 class="wp-block-heading">一、現有AWS架構的問題分析</h2>



<p>根據 <a href="https://aws.amazon.com/tw/solutions/case-studies/tixcraft/">AWS 官方指出</a>，售票系統就是架設在 AWS 雲端上。不過啊，這張圖是2020年的，現在的架構應該優化更多了，但目前只找到這張，我們就以這架構來分析看看吧！</p>



<p>首先來看一下售票系統的架構圖：</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://aws.amazon.com/tw/solutions/case-studies/tixcraft/"><img decoding="async" width="1477" height="1080" src="https://dongdonggcp.com/wp-content/uploads/2024/11/tixcraft-architecture.7a778b4552369cd27214bcd6bd83770533e130f2.png?w=1024" alt="" class="wp-image-8175" srcset="https://dongdonggcp.com/wp-content/uploads/2024/11/tixcraft-architecture.7a778b4552369cd27214bcd6bd83770533e130f2.png 1477w, https://dongdonggcp.com/wp-content/uploads/2024/11/tixcraft-architecture.7a778b4552369cd27214bcd6bd83770533e130f2-300x219.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/11/tixcraft-architecture.7a778b4552369cd27214bcd6bd83770533e130f2-1024x749.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/11/tixcraft-architecture.7a778b4552369cd27214bcd6bd83770533e130f2-768x562.png 768w" sizes="(max-width: 1477px) 100vw, 1477px" /></a><figcaption class="wp-element-caption">售票系統架構圖<br>資料來源：<a href="https://aws.amazon.com/tw/solutions/case-studies/tixcraft/">AWS 官網</a></figcaption></figure>



<p>接下來以個人淺見來看看該架構是否有可以更好的地方：</p>



<h3 class="wp-block-heading">(一) 系統架構層面</h3>



<h4 class="wp-block-heading">1. 負載平衡</h4>



<p>想像一下，就像是一個只有三個服務窗口的車站，突然間來了九十萬人要買票。即使每個窗口再怎麼快，也無法應付這麼多人。</p>



<p>雖然有基本的負載平衡器 (Elastic Load Balancing) 來分配人流，但就像是交通指揮只會把人平均分配到三個窗口，沒有更聰明的疏導方式。系統需要的是更像春節期間的車站管理，有預約、分流、排隊等多重措施。</p>



<h4 class="wp-block-heading">2. 資料庫設計問題</h4>



<p>現在的資料庫就像是一本大帳本，所有人都要搶著在同一本帳本上記錄。當九十萬人同時要在這本帳本上寫東西，自然會打架。</p>



<p>DynamoDB 雖然很強大，但難以處理高併發，如果只用一個資料庫來處理所有請求，就像是再厲害的收銀員，同時間也只能服務有限的客人。</p>



<p>我們需要的是資料分片策略，就像是多個專門的小帳本，分別處理不同的資料，就像大賣場會開很多收銀台一樣。</p>



<h4 class="wp-block-heading">3. 擴展性限制</h4>



<p>EC2 主機的擴充速度可能趕不上需求，等擴展完成可能大部分客人已經等得不耐煩走人了。這就需要更智慧的預測和更快的擴充機制，就像餐廳會預先觀察訂位情況來準備桌位。</p>



<h3 class="wp-block-heading">(二) 使用者體驗問題</h3>



<p>1. 缺乏透明度</p>



<p>目前的系統就像是把用戶關在一個黑盒子裡，只能看到一個永遠轉不完的圈圈，不知道自己排在第幾位，還要等多久。</p>



<p>這種體驗就像是排隊但看不到前面有多少人，也不知道隊伍有沒有在動。這會造成用戶焦慮，也容易讓人懷疑系統是否還在正常運作。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="819" height="450" src="https://dongdonggcp.com/wp-content/uploads/2024/11/circle.png?w=819" alt="" class="wp-image-8182" srcset="https://dongdonggcp.com/wp-content/uploads/2024/11/circle.png 819w, https://dongdonggcp.com/wp-content/uploads/2024/11/circle-300x165.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/11/circle-768x422.png 768w" sizes="(max-width: 819px) 100vw, 819px" /><figcaption class="wp-element-caption">售票系統轉圈圈<br>資料來源 <a href="https://tixcraft.com/">售票系統</a></figcaption></figure>



<p>2. 系統響應問題</p>



<p>當系統過載時，用戶看到的就是無止盡的載入畫面，不知道到底是成功了還是失敗了。這就像是在自動販賣機投錢後，機器既不出貨也不退錢，讓人不知所措。</p>



<p>系統需要明確告訴用戶當前的狀態，即使是失敗也要讓用戶知道原因和下一步該怎麼做。</p>



<p>也就是說，買票的粉絲可能太晚買票了，至少讓他們知道前面還有多少人在買，大概要等多久，當他們看到人數太多，也有可能乾脆就不買了，讓真正死忠的粉絲繼續排隊買票。</p>



<h2 class="wp-block-heading">二、改進方案分析</h2>



<h3 class="wp-block-heading">(一) 資料庫架構優化</h3>



<h4 class="wp-block-heading">1. 為什麼需要改進資料庫架構？</h4>



<p>現有的單一資料庫架構就像是一個超大的倉庫，所有人都要從同一個門進出。當人太多時，自然會造成擁擠。</p>



<p>改進的方案就像是把一個大倉庫分成多個小倉庫，每個倉庫負責不同的區域或功能，這樣就能更有效率地服務更多人。</p>



<p>如果使用多個不同資料庫，把一個大資料庫切分成多個小資料庫，就像是一個服務櫃台變成多個服務櫃台，自然能夠服務更多人，也降低了某個櫃台故障時影響所有人的風險。</p>



<p>2. 可能會有的缺點</p>



<p>想像一下，如果今天有個客人要同時買 A 區和 B 區的票，但這兩個區域是分別由不同資料庫管理的。這時系統就必須同時和兩個資料庫溝通，確保兩邊都要成功購票，才算交易完成。</p>



<p>這種跨資料庫的交易變得很複雜，就像是要同時在不同櫃台辦理業務。而且每個資料庫的資料都要保持同步，比如說座位狀態、購票紀錄等，</p>



<p>這會讓系統變得很複雜，也需要投入更多資源來維護這些資料庫。</p>



<p>3. 推薦做法</p>



<p>與其完全切分成獨立的資料庫，不如採用「分片」的方式。分片就像是同一個大資料庫的不同分部，它們共用相同的管理方式，但各自負責不同的資料。</p>



<p>再搭配分散式的快取系統，可以先把熱門的資料（例如座位狀態）存在記憶體中，這樣就不用每次都去資料庫查詢。</p>



<p>最後，對於跨區域的購票需求，可以使用訊息佇列來處理，讓系統能夠更有條理地處理這些複雜的交易。這樣的設計既保持了系統的簡單性，又能應付大量的購票需求。</p>



<h3 class="wp-block-heading">(二) 實名制驗證機制</h3>



<h4 class="wp-block-heading">1. 實名驗證的好處</h4>



<p>實名制最直接的好處就是能大幅降低黃牛票的問題，因為每張票都綁定實際觀眾的身分證，黃牛就無法大量囤票轉售。</p>



<p>這也讓整個交易變得更有保障，因為買票的人就是要進場看表演的人，票券的來源更有保障。</p>



<p>另外，當有人需要退票或換票時，主辦單位也能很容易確認這個要求是來自原始購票者，不會有人冒用他人身分來退票，整個售後服務變得更好管理。</p>



<p>當然，這點所有的人都理解，但並不是那麼容易做到。</p>



<h4 class="wp-block-heading">2. 實名驗證的缺點</h4>



<p>實名制最明顯的缺點是會拉長整個購票流程。想像一下，除了選位置、付款之外，還要額外填寫身分證字號、姓名等資料，而且可能還需要系統和政府資料庫做驗證，這些都會增加購票時間。</p>



<p>對售票系統來說，也需要建立更複雜的程式邏輯，要處理身分驗證、確認真實性、處理例外狀況等。</p>



<p>最重要的是，系統現在要處理大量的個人資料，不只要符合個資法的規範，還要有足夠的資安防護，以免發生資料外洩，這些都是很大的挑戰。</p>



<h4 class="wp-block-heading">3. 建議做法</h4>



<p>最理想的做法是讓使用者「提前」完成身分驗證。就像是網路銀行開戶，先在平常時間完成所有驗證程序，到真正要搶票時就不用再重新驗證，可以大幅縮短購票時間。</p>



<p>建議採用分散式的身分驗證服務，這樣就不會所有驗證請求都擠在同一個地方。系統可以同時使用多種驗證方式，例如身分證字號、手機號碼認證、金融卡驗證等，讓使用者可以選擇最方便的方式。</p>



<p>重要的是要在便利性和安全性之間取得平衡，既不能讓驗證程序太複雜而影響購票體驗，又要確保身分驗證的真實性。這樣的設計才能真正發揮實名制的優點，同時降低它帶來的負面影響。</p>



<p>4. 和<a href="https://www.nownews.com/news/6505267?srsltid=AfmBOoqKszBuDqYFQ2VCSp1wQsHp18ANxWSX3wBWzuR-yqNEyUG5afDS">劉德華演唱會實名制的做法</a>比較</p>



<p>(1) 採用「登記抽選制」而非即時搶票</p>



<p>這完全避免了系統崩潰的風險。因為在15天的時間窗口內（8/25-8/30），人們可以從容地登記資料，系統負載被分散到更長的時間。</p>



<p>(2) 有清楚的分流機制</p>



<p>卡友優先購票時段（11:28-13:28）和一般民眾登記時段（15:28後），這樣的設計可以有效管理系統負載。</p>



<p>身分資料修改機制很人性化：給予5天的時間（8/25-8/30）供人們修正資料錯誤，而且提供了明確的修改介面（「查看詳情」修正資料）。</p>



<p>(3) 對特殊情況有完整的配套</p>



<p>・生僻字可以用護照英文名稱取代<br>・身心障礙者和陪同者必須同時登記<br>・明確區分本地居民和海外人士的證件要求</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1164" height="850" src="https://dongdonggcp.com/wp-content/uploads/2024/11/e688aae59c96-2024-11-27-e4b88be58d885.25.28.png?w=1024" alt="" class="wp-image-8193" srcset="https://dongdonggcp.com/wp-content/uploads/2024/11/e688aae59c96-2024-11-27-e4b88be58d885.25.28.png 1164w, https://dongdonggcp.com/wp-content/uploads/2024/11/e688aae59c96-2024-11-27-e4b88be58d885.25.28-300x219.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/11/e688aae59c96-2024-11-27-e4b88be58d885.25.28-1024x748.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/11/e688aae59c96-2024-11-27-e4b88be58d885.25.28-768x561.png 768w" sizes="(max-width: 1164px) 100vw, 1164px" /></figure>



<p>與我們原本建議方案的主要差異：</p>



<p>我們建議的「預先驗證」機制著重在搶票前就完成身分驗證，但劉德華演唱會採用的是「登記後慢慢驗證」的方式。這種方式雖然較不即時，但因為有抽選機制，所以時間不是那麼關鍵。</p>



<p>我們建議的分散式驗證服務主要是為了處理高併發的即時驗證需求，但在登記抽選制下，這種複雜的架構反而顯得多餘。</p>



<p>所以劉德華演唱會的做法其實更優秀，因為它徹底改變了遊戲規則 &#8211; 從「比快」變成「抽籤」。這種方式有幾個關鍵優勢：</p>



<p>・完全消除了系統崩潰的風險<br>・給予購票者更多時間確認和修正資料<br>・降低了黃牛票的投機空間（因為無法透過技術手段提高中籤機會）<br>・整體成本更低（不需要建置複雜的高併發架構）</p>



<p>這個案例告訴我們，有時候與其用技術解決問題，不如從商業邏輯層面改變遊戲規則。這種「登記抽選」的方式，既解決了技術問題，又提供了更好的使用者體驗，是一個值得借鑑的範例。</p>



<h3 class="wp-block-heading">(三) 智慧排隊系統</h3>



<h4 class="wp-block-heading">1. 排隊機制的運作原理</h4>



<p>想像一下，就像是遊樂園的快速通關系統，每個人進入隊伍時會拿到一個號碼，系統會告訴你大概什麼時候可以入場，你不用一直站在那裡等。在線上售票系統中，這表示用戶可以知道自己的位置，預估等待時間，甚至可以做其他事情同時等待。</p>



<h4 class="wp-block-heading">2. 具體實做方式描述</h4>



<p>(1) 即時狀態顯示</p>



<p>我們使用 API Gateway 的 WebSocket API 來建立與使用者的即時連線，這個連線資訊會被存放在 DynamoDB 中。</p>



<p>當使用者的排隊狀態有任何更新時，系統就會立即透過這個 WebSocket 連線推送最新狀態給使用者，讓他們能即時看到自己在隊伍中的位置和預估等待時間。</p>



<p>說到這個，我想到我用手機買郭富城演唱會門票時，至少它有告訴我要等多久。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1170" height="2015" src="https://dongdonggcp.com/wp-content/uploads/2024/11/img_2051.jpg?w=595" alt="" class="wp-image-8196" srcset="https://dongdonggcp.com/wp-content/uploads/2024/11/img_2051.jpg 1170w, https://dongdonggcp.com/wp-content/uploads/2024/11/img_2051-174x300.jpg 174w, https://dongdonggcp.com/wp-content/uploads/2024/11/img_2051-595x1024.jpg 595w, https://dongdonggcp.com/wp-content/uploads/2024/11/img_2051-768x1323.jpg 768w, https://dongdonggcp.com/wp-content/uploads/2024/11/img_2051-892x1536.jpg 892w" sizes="(max-width: 1170px) 100vw, 1170px" /><figcaption class="wp-element-caption">郭富城演唱會售票系統顯示等待提示<br>資料來源：自己買票的<a href="https://tickets.udnfunlife.com/application/utk01/utk0101_.aspx">系統截圖</a></figcaption></figure>



<p>(2) 排隊機制</p>



<p>排隊機制的實現則依賴於 DynamoDB 的分散式計數器功能。當使用者加入隊伍時，系統會在 DynamoDB 中建立一筆排隊記錄，並使用計數器來取得這位使用者在隊伍中的確切位置。</p>



<p>這些排隊資訊會被送入 SQS 佇列中等待處理，確保系統能夠有序地處理每一個排隊請求，不會因為大量湧入的請求而崩潰。</p>



<p>(3) 分批放行</p>



<p>分批放行的處理是透過 Lambda 函數來完成的。系統會定期觸發 Lambda 來處理一定數量的排隊用戶，這個數量是根據系統當前的負載狀況和處理能力來決定的。</p>



<p>當一批用戶被選中可以進入購票流程時，系統會同時通知這批用戶，讓他們開始選位和付款的流程。這種分批處理的方式可以有效控制系統負載，避免所有人同時湧入造成系統癱瘓。</p>



<p>(4) 超時處理</p>



<p>為了處理逾時的情況，我們使用 CloudWatch Events 來定期觸發檢查機制。</p>



<p>如果有用戶在規定時間內沒有完成購票流程，系統會自動將他們標記為逾時，釋放相關的資源（如暫時保留的座位），並通知後面的使用者前進。</p>



<p>這個機制確保了隊伍能夠持續流動，不會因為個別用戶的延遲而影響整體效率。</p>



<p>(5) 防欺詐機制</p>



<p>防欺詐機制則是整個系統的安全防護網。系統會檢查是否有重複排隊的情況，驗證每個用戶的身份，並且限制單一用戶在特定時間內能夠進行的操作次數。</p>



<p>這些機制共同確保了排隊過程的公平性，防止有人利用技術手段破壞正常的排隊秩序。</p>



<p>這整套系統需要多個 AWS 服務的配合才能順利運作。API Gateway 處理所有的即時通訊需求，DynamoDB 負責資料的儲存，SQS 確保訊息的可靠傳遞，Lambda 處理各種業務邏輯，CloudWatch Events 負責定時任務的觸發，而 ElastiCache 則用於提供快取服務以提升系統效能。</p>



<p>這些服務相互配合，打造出一個可擴展、可靠且高效的智能排隊系統。</p>



<p>這樣的架構設計不僅能夠處理大量的並發連接，還能確保整個購票過程的公平性，同時為使用者提供即時的狀態更新，並能自動處理各種異常情況。</p>



<p>最重要的是，它提供了良好的使用者體驗，讓使用者清楚知道自己的排隊狀態，不會因為系統的不透明而感到焦慮。</p>



<h3 class="wp-block-heading">(四) 概念示意圖</h3>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1664" height="947" src="https://dongdonggcp.com/wp-content/uploads/2024/12/e688aae59c96-2024-12-04-e4b88be58d887.01.20.png?w=1024" alt="" class="wp-image-8261" srcset="https://dongdonggcp.com/wp-content/uploads/2024/12/e688aae59c96-2024-12-04-e4b88be58d887.01.20.png 1664w, https://dongdonggcp.com/wp-content/uploads/2024/12/e688aae59c96-2024-12-04-e4b88be58d887.01.20-300x171.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/12/e688aae59c96-2024-12-04-e4b88be58d887.01.20-1024x583.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/12/e688aae59c96-2024-12-04-e4b88be58d887.01.20-768x437.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/12/e688aae59c96-2024-12-04-e4b88be58d887.01.20-1536x874.png 1536w" sizes="(max-width: 1664px) 100vw, 1664px" /><figcaption class="wp-element-caption">演唱會售票系統 AWS 概念示意圖</figcaption></figure>



<h4 class="wp-block-heading">1.入口層</h4>



<p>系統的第一道防線是 CloudFront 全球內容分發網路（CDN）。它負責將靜態內容快取在全球各節點，大幅降低使用者的存取延遲。</p>



<p>當大量用戶同時湧入時，CDN 可以有效分散流量，避免直接衝擊後端伺服器。</p>



<p>在 CDN 之後，應用程式負載平衡器（ALB）進一步分配流量到不同的前端服務節點。</p>



<h4 class="wp-block-heading">2.前端層</h4>



<p>使用 ECS Fargate 運行前端應用程式，採用無伺服器架構可以根據實際流量自動擴展。這層主要處理使用者介面渲染和基本的業務邏輯，像是表單驗證、頁面導航等。</p>



<p>由於使用容器化技術，可以快速部署和擴展，且無需管理底層基礎設施。</p>



<h4 class="wp-block-heading">3.排隊層</h4>



<p>當用戶進入系統後，首先進入排隊層。這層使用 API Gateway 的 WebSocket 服務維持與用戶的即時連線，讓系統能夠即時推送排隊狀態更新。</p>



<p>排隊狀態存儲在 DynamoDB 中，確保高併發存取性能。使用 SQS 訊息佇列來管理排隊隊伍，確保公平性和系統穩定性。</p>



<h4 class="wp-block-heading">4.身分驗證層</h4>



<p>輪到用戶時，進入身分驗證層。REST API 接收驗證請求，Lambda 函數執行實際的驗證邏輯。</p>



<p>用戶資料存儲在 DynamoDB，而驗證結果快取在 ElastiCache 中以提升效能。</p>



<p>這層的設計重點是安全性和效能的平衡，確保驗證過程既安全又快速。</p>



<h4 class="wp-block-heading">5.訂票層</h4>



<p>通過身分驗證後，用戶進入實際的訂票流程。ECS Fargate 運行訂票服務，處理座位選擇和訂單創建。</p>



<p>座位狀態快取在 ElastiCache 中，確保快速響應。最終的訂單資料寫入 Aurora 資料庫，提供強大的交易保證和數據一致性。</p>



<h4 class="wp-block-heading">6.資料流向</h4>



<p>用戶從 CloudFront 進入系統，經過排隊系統獲得順序號，通過身分驗證後進入訂票流程，最後完成訂單創建。</p>



<p>每一步驟都有相應的快取和備份機制，確保系統的可靠性和效能。</p>



<p>這種分層的架構設計，不僅讓系統容易擴展和維護，也提供了良好的用戶體驗。</p>



<h2 class="wp-block-heading">三、GCP優化架構方案</h2>



<p>接下來，我們來看看，售票系統在 GCP上可以怎麼做。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="2705" height="1542" src="https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96.png?w=1024" alt="" class="wp-image-8276" srcset="https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96.png 2705w, https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96-300x171.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96-1024x584.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96-768x438.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96-1536x876.png 1536w, https://dongdonggcp.com/wp-content/uploads/2024/12/e6bc94e594b1e69c83e594aee7a5a8e7b3bbe7b5b1-gcp-e6a682e5bfb5e7a4bae6848fe59c96-2048x1167.png 2048w" sizes="(max-width: 2705px) 100vw, 2705px" /><figcaption class="wp-element-caption">演唱會售票系統 GCP 概念示意圖</figcaption></figure>



<h3 class="wp-block-heading">(一) 核心服務</h3>



<p>我們的售票系統核心架構是建立在六個關鍵的 GCP 服務上。</p>



<h4 class="wp-block-heading">1. Cloud CDN 負責處理所有靜態資源的分發</h4>



<p>包括網站的 JavaScript、CSS 文件、圖片等。這些資源會被快取在全球各地的節點上，大幅降低延遲時間，讓世界各地的用戶都能快速載入網頁。</p>



<p>系統會自動偵測使用者位置，連接到最近的 CDN 節點，確保最佳效能。</p>



<h4 class="wp-block-heading">2. Global Load Balancer 扮演著全球流量調度的角色。</h4>



<p>它能夠智慧地判斷使用者的地理位置和網路狀況，自動將請求導向最適合的資料中心。</p>



<p>尤其它跟 AWS 的 ALB 比起來，還不用預熱 Pre-Warm。</p>



<p>當某個區域的負載較高時，可以自動將流量導向其他區域，確保系統的穩定性。</p>



<p>而且它還具備智慧路由功能，可以根據後端服務的健康狀況來分配流量。</p>



<h4 class="wp-block-heading">3. Cloud Run 用於部署前端應用</h4>



<p>這個無伺服器的平台能根據流量自動擴展，當訪問量突然增加時，系統會自動建立更多的容器實例來處理請求。</p>



<p>閒置時則會自動縮減資源，既確保了效能又能節省成本。</p>



<h4 class="wp-block-heading">4. GKE（Google Kubernetes Engine）處理核心業務邏輯。</h4>



<p>我們將不同的功能（如訂單處理、座位管理、付款服務等）拆分成獨立的微服務，部署在 GKE Cluster 中。</p>



<p>這種微服務架構讓我們能夠獨立擴展每個服務，也讓系統更容易維護和更新。</p>



<h4 class="wp-block-heading">5. Cloud Spanner 資料庫保證資料的一致性</h4>



<p>這對於處理座位預訂這類需要精確性的操作特別重要。</p>



<p>它能夠在全球範圍內保持資料同步，同時支援大規模的並發操作，完全滿足大型演唱會售票的需求。</p>



<h4 class="wp-block-heading">6. Pub/Sub 訊息佇列系統用於處理非同步任務</h4>



<p>例如當用戶提交訂單時，系統會發送消息到 Pub/Sub，由後端服務依序處理，避免系統過載。</p>



<p>它也用於服務間的通訊，確保訊息能可靠傳遞。</p>



<h3 class="wp-block-heading">(二) 高可用性設計 (High Availability)</h3>



<h4 class="wp-block-heading">1. 多區域部署</h4>



<p>系統同時部署在多個地理位置的資料中心，即使某個區域發生故障，其他區域仍能繼續提供服務。</p>



<p>每個區域都配置了完整的服務架構，並通過 Global Load Balancer 進行流量分配。</p>



<h4 class="wp-block-heading">2. Autoscale</h4>



<p>Autoscale 機制是建立在 GKE 和 Cloud Run 的基礎上。系統會根據 CPU 使用率、記憶體使用量、請求數等指標自動調整資源配置。</p>



<p>例如，當檢測到存取量增加時，會自動增加容器主機數量；當負載降低時，則會自動縮減資源以節省成本。</p>



<h4 class="wp-block-heading">3. 故障自動轉移</h4>



<p>故障自動轉移機制確保了系統的穩定性。</p>



<p>當檢測到某個服務主機故障時，系統會自動將流量導向健康的主機，同時啟動新的主機來替補。這個過程對使用者來說是完全透明的。</p>



<h4 class="wp-block-heading">4. 分散式快取</h4>



<p>分散式快取系統使用了多層次的策略，包括瀏覽器快取、CDN 快取、應用層快取等。</p>



<p>我們使用 Memorystore 來儲存熱門資料，如座位狀態、活動資訊等，大幅減少資料庫的存取壓力。</p>



<h3 class="wp-block-heading">(三) 監控與維運</h3>



<h4 class="wp-block-heading">1. Cloud Monitoring</h4>



<p>負責收集各種系統指標，包括伺服器效能、網絡流量、API 回應時間等。</p>



<p>這些資料會以直觀的儀表板呈現出來，幫助維運團隊快速掌握系統狀態。</p>



<h4 class="wp-block-heading">2. Cloud Logging</h4>



<p>集中管理所有服務的 Log，支援複雜的查詢和分析。維運人員可以輕鬆追蹤問題，了解系統行為。</p>



<p>而且它還支援長期儲存，有助於後續的分析和稽核。</p>



<h4 class="wp-block-heading">3. Cloud Trace</h4>



<p>提供了詳細的 Request 追蹤功能。它可以追蹤一個 Request 在不同服務之間的傳遞過程，幫助我們找出效能瓶頸，就是看出 Latency 高到底是卡在哪裡。</p>



<p>特別是在微服務架構中，這個功能對於問題診斷極為重要。</p>



<h4 class="wp-block-heading">4. 即時警報系統</h4>



<p>當系統出現異常時（如錯誤率升高、回應時間變長），會立即通過 Email、簡訊等方式通知相關人員。不同層級的問題有不同的通知策略，確保運維團隊能及時處理各種情況。這個警報系統也與事件處理流程整合，能夠自動創建工單 (Ticket)，追踪問題解決過程。</p>



<h2 class="wp-block-heading">四、結論</h2>



<p>打造一個優秀的售票系統不僅需要穩定的技術架構，更需要良好的使用者體驗設計。關鍵改進點總結如下：</p>



<h3 class="wp-block-heading">(一) 系統架構層面</h3>



<ul class="wp-block-list">
<li>1. 多層次快取策略</li>



<li>2. 智慧負載平衡</li>



<li>3. 資料分片處理</li>



<li>4. 異步處理機制</li>
</ul>



<h3 class="wp-block-heading">(二) 使用者體驗層面</h3>



<ul class="wp-block-list">
<li>1. 透明的排隊機制</li>



<li>2. 即時狀態更新</li>



<li>3. 清晰的錯誤提示</li>



<li>4. 合理的重試機制</li>
</ul>



<h3 class="wp-block-heading">(三) 運營管理層面</h3>



<ul class="wp-block-list">
<li>1. 完善的監控系統</li>



<li>2. 靈活的擴展策略</li>



<li>3. 有效的成本控制</li>



<li>4. 安全防護機制</li>
</ul>



<p>這些層面的改進點環環相扣，缺一不可。好的系統架構是基礎，但如果沒有良好的使用者體驗設計，用戶仍然會感到挫折。</p>



<p>同樣，沒有完善的運營管理機制，再好的系統也可能因為無法及時發現和處理問題而導致服務中斷。只有將這三個層面都做好，才能打造出真正優秀的售票系統。</p>



<p></p><p>The post <a href="https://dongdonggcp.com/2024/12/05/concert-ticketing-system-architecture-analyzing-and-improvement/">[GCP 教學] 周杰倫演唱會 AWS 售票系統架構解析 – 系統穩和 vs 使用者體驗，哪個重要？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2024/12/05/concert-ticketing-system-architecture-analyzing-and-improvement/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8135</post-id>	</item>
		<item>
		<title>如何替網站設定 GCP Load Balancer (負載平衡器)？架構規劃與設定步驟詳解</title>
		<link>https://dongdonggcp.com/2024/09/25/how-to-config-gcp-load-balancer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-config-gcp-load-balancer</link>
					<comments>https://dongdonggcp.com/2024/09/25/how-to-config-gcp-load-balancer/#comments</comments>
		
		<dc:creator><![CDATA[東東]]></dc:creator>
		<pubDate>Wed, 25 Sep 2024 08:49:32 +0000</pubDate>
				<category><![CDATA[Load Balancer]]></category>
		<category><![CDATA[負載平衡]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=7373</guid>

					<description><![CDATA[<p>當你使用虛擬機器架設好一個網站，你可能會考慮使用 GCP Load Balancer，<br />
這其實也是整個 GCP 最核心的功能，很多大企業也是為此而選擇上雲。<br />
以下逐步帶你確認幾個重要的問題，和設定的步驟。</p>
<p>The post <a href="https://dongdonggcp.com/2024/09/25/how-to-config-gcp-load-balancer/">如何替網站設定 GCP Load Balancer (負載平衡器)？架構規劃與設定步驟詳解</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>當你使用虛擬機器架設好一個網站，你可能會考慮使用 GCP Load Balancer，</p>



<p>這其實也是整個 GCP 最核心的功能，很多大企業也是為此而選擇上雲。</p>



<p>以下逐步帶你確認幾個重要的問題，和設定的步驟。</p>



<h1 class="wp-block-heading">一、Load Balancer 的架構規劃問題確認</h1>



<h2 class="wp-block-heading">(一) 你為什麼要使用 Load Balancer？</h2>



<p>因為 LB 可以達到的效果很多，要看你的情境和預算適不適合，</p>



<p>例如：</p>



<p>1. 你有多台機器要平均分散流量。</p>



<p>這是 LB 的基本功能，它可以自動分流外部流量到所有的機器。</p>



<p>2. 你不想再自己申請 SSL 憑證，想要使用 <a href="https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs">Google 免費的憑證</a>。</p>



<p>坊間有很多 SSL 憑證供應商，都要付費購買，而且並不便宜，</p>



<p>憑證到期還要自己申請展期，萬一錯過展期時間，</p>



<p>網站就會出現憑證錯誤的訊息 </p>



<p>使用者會懷疑網站是不是有問題，影響信譽。</p>



<p>Google 提供免費而且自動續約的憑證，</p>



<p>Google 自己也是<a href="https://pki.goog/">權威的憑證授權單位</a>，</p>



<p>有 Google 幫你的網站背書，免費又方便。</p>



<p>但有一個條件，就是<a href="https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns"><strong>你的網域必須指向 LB 的 IP 位址，才能讓憑證生效</strong></a>，後續也會說明相關步驟。</p>



<p>3. 你有多個後端 (多種不同的服務)，想依照網址分流到不同後端。</p>



<p>或是依照使用者所在的位置，或是要造訪的網站，</p>



<p>分流到不同機器，都可以使用 LB。</p>



<p>4. 你想用 Cloud Armor 保護主機，阻擋 DDoS 攻擊。</p>



<p>因為 Cloud Armor 必須設定在 LB 上，才能發揮作用，</p>



<p>為此你必須使用 LB，才能在上面套用 Cloud Armor 的防禦政策。</p>



<p>5. 你的網站包含大量媒體內容 (圖片或影片)，想要串接 Cloud CDN 發布內容。</p>



<p>同上，Cloud CDN 也必須設定在 LB 上，才能發揮作用。</p>



<p>6. 確認費用可以接受</p>



<p>假如你只有一台 e2-medium 規格的虛擬機器，並且直接對外服務，</p>



<p>費用包含進出 LB 的資料處理費用 (每 GiB 0.008 美元)，</p>



<p>以及轉發規則 (Forwarding Rule) 的費用 (每小時 0.025 美元)，</p>



<p>假設你的資料處理每月 10 GiB 左右，最基本的費用</p>



<p>0.008 * 10 GB * 2 (資料進和出)&nbsp; + 0.025 * 每月730小時 = 0.08 + 18.25 = 18.41 美元</p>



<p>如果可以接受，就可以考慮採用。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1459" height="776" src="https://dongdonggcp.com/wp-content/uploads/2024/09/01-load-balancer-e8b2bbe794a8-1.png?w=1024" alt="GCP Load Balancer 基本費用" class="wp-image-7375" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/01-load-balancer-e8b2bbe794a8-1.png 1459w, https://dongdonggcp.com/wp-content/uploads/2024/09/01-load-balancer-e8b2bbe794a8-1-300x160.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/01-load-balancer-e8b2bbe794a8-1-1024x545.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/01-load-balancer-e8b2bbe794a8-1-768x408.png 768w" sizes="(max-width: 1459px) 100vw, 1459px" /><figcaption class="wp-element-caption">GCP Load Balancer 基本費用<br>截圖自 <a href="https://cloud.google.com/products/calculator">GCP 價格計算機</a></figcaption></figure>



<p>如果上述的問題，只要有一個是肯定的，就可以再往下進行。</p>



<p>在本文的範例中，我們就假設上述需求全部都要做到，</p>



<p>藉此來說明每個功能需要達成的條件和步驟。</p>



<h2 class="wp-block-heading">(二) 你是否要<a href="https://cloud.google.com/compute/docs/autoscaler">自動擴充 (Autoscale)</a>？</h2>



<p>自動擴充就是當流量大的時候，</p>



<p>GCP 會幫你建立相同的主機來對外服務，</p>



<p>而分流的問題，LB 會自動幫你處理，</p>



<p>讓你的每台主機平均分散負載。</p>



<p>這樣也可以達成高可用性 (High Availibility)，</p>



<p>如果你的其中一台機器有問題，</p>



<p>其他主機還是可以持續運作，LB 也可以將流量傳到正常的主機。</p>



<p>但是要做到 Autoscale，必須做到以下兩件事：</p>



<p>1. 把你的主機變成無狀態的 (Stateless)&nbsp;</p>



<p>既然你的主機要隨著流量變大時要自動擴充，</p>



<p>也代表流量變小時要能夠自動縮減，</p>



<p>就是主機會被刪除掉，那主機內的資料不就會跟著消失？</p>



<p>沒錯，所以<strong>你的資料庫必須要往外面放，讓你的主機變成是無狀態的。</strong></p>



<p>例如你另外用一台主機專門放資料庫，或是乾脆直接用 <a href="https://cloud.google.com/sql/docs">Cloud SQL</a>。</p>



<p>讓你所有的主機，都往外部存取資料庫，主機就不存放任何資料了。</p>



<p>除了資料庫以外，你的設定檔如果經常會變動，</p>



<p>或是有用戶會上傳檔案或圖片到主機上，</p>



<p>這些儲存位置，你都要用程式把儲存位置導向外部，</p>



<p>建議使用 Cloud Storage。</p>



<p>這代表你的系統架構要改，不可以把所有資料都放在同一台上了。</p>



<p>2. 建立映像檔、執行個體範本和執行個體群組</p>



<p>這些是什麼東西？</p>



<p>按照 GCP 的邏輯，你不能把現有主機直接到 Load Balancer，</p>



<p>Autoscaling 之所以能運作，</p>



<p>你要建立一個<a href="https://cloud.google.com/compute/docs/instance-groups/working-with-managed-instances#what_is_a_managed_instance">執行個體群組 (Instance Group；簡稱 IG)</a>，&nbsp;</p>



<p><strong>因為 IG 在擴充的時候，必須要知道你的主機長什麼樣子</strong>。</p>



<p>所以 IG 要讀取你的<a href="https://cloud.google.com/compute/docs/instance-templates">執行個體範本 (Instance Template)</a> 當中，</p>



<p>你所指定的映像檔 (Image)，</p>



<p>執行個體範本也會記錄主機規格、要開在哪一個 Region 或 Zone、</p>



<p>哪一個 VPC 網路、Subnet、Disk 用哪一種、</p>



<p>對外開放的 Port 要 HTTP 或 HTTPS、要不要有外部 IP 等。</p>



<p>而映像檔可以想像成是燒光碟片的概念，</p>



<p>針對你準備好的機器的開機磁碟 (Boot Disk) 燒成光碟，</p>



<p>之後主機擴充都是拿這片光碟，安裝到每一台新的機器當中。</p>



<p>如下圖：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1095" height="561" src="https://dongdonggcp.com/wp-content/uploads/2024/09/02e5bbbae7ab8b-instance-group-e5928ce8a7b8e799bc-autoscaling-e79a84e6b581e7a88b-1.png?w=1024" alt="建立 Instance Group 和觸發 Autoscaling 的流程" class="wp-image-7377" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/02e5bbbae7ab8b-instance-group-e5928ce8a7b8e799bc-autoscaling-e79a84e6b581e7a88b-1.png 1095w, https://dongdonggcp.com/wp-content/uploads/2024/09/02e5bbbae7ab8b-instance-group-e5928ce8a7b8e799bc-autoscaling-e79a84e6b581e7a88b-1-300x154.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/02e5bbbae7ab8b-instance-group-e5928ce8a7b8e799bc-autoscaling-e79a84e6b581e7a88b-1-1024x525.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/02e5bbbae7ab8b-instance-group-e5928ce8a7b8e799bc-autoscaling-e79a84e6b581e7a88b-1-768x393.png 768w" sizes="(max-width: 1095px) 100vw, 1095px" /><figcaption class="wp-element-caption">建立 Instance Group 和觸發 Autoscaling 的流程<br>資料來源：自行繪製</figcaption></figure>



<p>所以總結起來，建立 GCP Load Balancer 主要步驟是這樣：</p>



<p>1. 對你的主機建立映像檔</p>



<p>2. 建立執行個體範本，指向你的映像檔</p>



<p>3. 建立執行個體群組，使用你的執行個體範本</p>



<p>4. 建立負載平衡器，連接到你的執行個體群組</p>



<p>5. 設定 DNS 網域解析到你 LB 的 IP 位址</p>



<p>接下來就介紹整個流程的詳細步驟。</p>



<h1 class="wp-block-heading">二、建立 Load Balancer 的整體架構和步驟</h1>



<p>這裡就假設你已經準備好一台「無狀態的」機器，在上面已<a href="https://www.youtube.com/watch?v=sdbB28K0src">架設好 Apache 的網頁</a>，如下範例：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1221" height="449" src="https://dongdonggcp.com/wp-content/uploads/2024/09/03-e5bbbae7ab8be4b880e58fb0e4b8bbe6a99fe4b8a6e69eb6e8a8ade5a5bde7b6b2e7ab99-1.png?w=1024" alt="在 GCP 建立一台主機並架設好網站" class="wp-image-7379" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/03-e5bbbae7ab8be4b880e58fb0e4b8bbe6a99fe4b8a6e69eb6e8a8ade5a5bde7b6b2e7ab99-1.png 1221w, https://dongdonggcp.com/wp-content/uploads/2024/09/03-e5bbbae7ab8be4b880e58fb0e4b8bbe6a99fe4b8a6e69eb6e8a8ade5a5bde7b6b2e7ab99-1-300x110.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/03-e5bbbae7ab8be4b880e58fb0e4b8bbe6a99fe4b8a6e69eb6e8a8ade5a5bde7b6b2e7ab99-1-1024x377.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/03-e5bbbae7ab8be4b880e58fb0e4b8bbe6a99fe4b8a6e69eb6e8a8ade5a5bde7b6b2e7ab99-1-768x282.png 768w" sizes="(max-width: 1221px) 100vw, 1221px" /><figcaption class="wp-element-caption">建立一台主機並架設好網站<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>你會看到我的網頁是 HTTP，沒有 SSL 憑證的狀態，這個不用擔心，</p>



<p>因為我會把 SSL 憑證做在 LB 的前端上面，</p>



<p>而流量進入到 VM，就可以不用再做 HTTPS。</p>



<p>沒問題的話就開始後續的動作。</p>



<h2 class="wp-block-heading">(一) 建立映像檔</h2>



<p>首先我們先把 VM 關機，然後去 Image 的頁面。</p>



<p>為什麼要關機呢？因為<a href="https://cloud.google.com/compute/docs/images/create-custom#minimize_writing_data_to_the_persistent_disk">開機時 VM 還是會有對 Disk 的讀寫</a>，</p>



<p>這時建立 Image 可能會有讀寫不完全的問題，</p>



<p>所以關機再建 Image 比較好。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="843" height="865" src="https://dongdonggcp.com/wp-content/uploads/2024/09/04-e5bbbae7ab8b-image-1.png?w=843" alt="在 GCP 上建立 Image" class="wp-image-7380" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/04-e5bbbae7ab8b-image-1.png 843w, https://dongdonggcp.com/wp-content/uploads/2024/09/04-e5bbbae7ab8b-image-1-292x300.png 292w, https://dongdonggcp.com/wp-content/uploads/2024/09/04-e5bbbae7ab8b-image-1-768x788.png 768w" sizes="(max-width: 843px) 100vw, 843px" /><figcaption class="wp-element-caption">建立 Image<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在命名的部分，建議加上版本號碼，</p>



<p>因為以後如果你的網站要改版，你會建很多個 Image，</p>



<p>為了方便管理，你可以使用一套命名規則來給 Image 命名。</p>



<p>然後指向我們剛建立的主機的 Boot Disk。</p>



<p>而 Location 的部分，如果你的 Image 非常重要，</p>



<p>建議選 Multi-Regional，</p>



<p>像我只是為了 Demo 就選 Regional 即可，沒問題就按下 Create。</p>



<p>另外因為 Google 會把所有 VM 的公開 Image&nbsp; </p>



<p>(如 Debian、Ubuntu…) 都放在同一個頁面，</p>



<p>所以你很難找到你剛建立的映像檔，你可以把 Project ID 複製起來，</p>



<p>貼到 Filter，指定欄位 Created By，再貼上 Project ID，按下 Enter，</p>



<p>就能快速找到你建好的 Image 如下：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="943" height="329" src="https://dongdonggcp.com/wp-content/uploads/2024/09/05-e7a2bae8aa8d-image-e5bbbae7ab8be5ae8ce68890-1.png?w=943" alt="確認 Image 建立完成" class="wp-image-7382" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/05-e7a2bae8aa8d-image-e5bbbae7ab8be5ae8ce68890-1.png 943w, https://dongdonggcp.com/wp-content/uploads/2024/09/05-e7a2bae8aa8d-image-e5bbbae7ab8be5ae8ce68890-1-300x105.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/05-e7a2bae8aa8d-image-e5bbbae7ab8be5ae8ce68890-1-768x268.png 768w" sizes="(max-width: 943px) 100vw, 943px" /><figcaption class="wp-element-caption">確認 Image 建立完成<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(二) 建立執行個體範本，指向你的映像檔</h2>



<p>點擊 Compute Engine =&gt; Intance Template。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1741" height="861" src="https://dongdonggcp.com/wp-content/uploads/2024/09/06-e5bbbae7ab8b-instance-template-1.png?w=1024" alt="在 GCP 建立 Instance Template" class="wp-image-7383" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/06-e5bbbae7ab8b-instance-template-1.png 1741w, https://dongdonggcp.com/wp-content/uploads/2024/09/06-e5bbbae7ab8b-instance-template-1-300x148.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/06-e5bbbae7ab8b-instance-template-1-1024x506.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/06-e5bbbae7ab8b-instance-template-1-768x380.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/06-e5bbbae7ab8b-instance-template-1-1536x760.png 1536w" sizes="(max-width: 1741px) 100vw, 1741px" /><figcaption class="wp-element-caption">建立 Instance Template<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在命名的部分，就依照你的命名原則來設定，</p>



<p>例如也加上版本號碼，跟 Image 對齊。</p>



<p>Location 指的是，你的 Template 要存在哪裡？</p>



<p>Template 只是一個小小的設定檔，</p>



<p>不是真的機器，也不會佔儲存費用。</p>



<p>它提醒的是，如果你存在 Global，</p>



<p>有可能你要用的時候，剛好別的 Region 壞掉了，</p>



<p>那你取得 Template 的時間會比較長，</p>



<p>因為要等它從其他 Region 拿過來，所以建議你選 Regional。</p>



<p>但如果選只台灣 Region (asia-east1) ，</p>



<p>萬一台灣的壞掉，就拿不到 Template 也是很麻煩，</p>



<p>那這樣不是選 Global 比較好？</p>



<p>其實不管選哪個，實際上 Template 拿不到的機率很低，</p>



<p>所以選哪個都可以。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1053" height="456" src="https://dongdonggcp.com/wp-content/uploads/2024/09/07-e7b5a6-instance-template-e591bde5908de4b8a6e8a8ade5ae9ae4bd8de7bdae-1.png?w=1024" alt="在 GCP 給 Instance Template 命名並設定位置" class="wp-image-7385" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/07-e7b5a6-instance-template-e591bde5908de4b8a6e8a8ade5ae9ae4bd8de7bdae-1.png 1053w, https://dongdonggcp.com/wp-content/uploads/2024/09/07-e7b5a6-instance-template-e591bde5908de4b8a6e8a8ade5ae9ae4bd8de7bdae-1-300x130.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/07-e7b5a6-instance-template-e591bde5908de4b8a6e8a8ade5ae9ae4bd8de7bdae-1-1024x443.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/07-e7b5a6-instance-template-e591bde5908de4b8a6e8a8ade5ae9ae4bd8de7bdae-1-768x333.png 768w" sizes="(max-width: 1053px) 100vw, 1053px" /><figcaption class="wp-element-caption">給 Instance Template 命名並設定位置<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來選擇規格，我是為了 Demo 而選擇最便宜的 f1-micro。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1504" height="1024" src="https://dongdonggcp.com/wp-content/uploads/2024/09/e8a39c-109-instance-template-e69c80e5b08fe8a68fe6a0bce79a84-gcp-e4b8bbe6a99f-f1-micro-e79a84e8b2bbe794a8-1.png?w=1024" alt="在 GCP 設定 Instance Template 使用 f1-micro 主機" class="wp-image-7387" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/e8a39c-109-instance-template-e69c80e5b08fe8a68fe6a0bce79a84-gcp-e4b8bbe6a99f-f1-micro-e79a84e8b2bbe794a8-1.png 1504w, https://dongdonggcp.com/wp-content/uploads/2024/09/e8a39c-109-instance-template-e69c80e5b08fe8a68fe6a0bce79a84-gcp-e4b8bbe6a99f-f1-micro-e79a84e8b2bbe794a8-1-300x204.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/e8a39c-109-instance-template-e69c80e5b08fe8a68fe6a0bce79a84-gcp-e4b8bbe6a99f-f1-micro-e79a84e8b2bbe794a8-1-1024x697.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/e8a39c-109-instance-template-e69c80e5b08fe8a68fe6a0bce79a84-gcp-e4b8bbe6a99f-f1-micro-e79a84e8b2bbe794a8-1-768x523.png 768w" sizes="(max-width: 1504px) 100vw, 1504px" /><figcaption class="wp-element-caption">設定 Instance Template 使用 f1-micro 主機<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來 <a href="https://cloud.google.com/compute/docs/instances/placement-policies-overview">Placement Policy</a> 的部分，是在問你在同一個 Zone (機房) 裡，</p>



<p>主機要不要集中在同一台實體機上。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="759" height="255" src="https://dongdonggcp.com/wp-content/uploads/2024/09/08-e8a8ade5ae9a-instance-template-e79a84-placement-policy-1.png?w=759" alt="在 GCP 設定  Instance Template 的 Placement Policy" class="wp-image-7390" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/08-e8a8ade5ae9a-instance-template-e79a84-placement-policy-1.png 759w, https://dongdonggcp.com/wp-content/uploads/2024/09/08-e8a8ade5ae9a-instance-template-e79a84-placement-policy-1-300x101.png 300w" sizes="(max-width: 759px) 100vw, 759px" /><figcaption class="wp-element-caption">設定&nbsp; Instance Template 的 Placement Policy<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>這裡分成兩種：</p>



<p>1. No Policy</p>



<p>主機「可能」會放在不同的實體機上，</p>



<p>因為 GCP 會因應客戶持續不斷的開機需求，</p>



<p>去分配機器開在哪裡，如果不指定，</p>



<p>主機有可能會開在同一台實體機上，</p>



<p>那實體機有問題，上面的主機會同時無法運作，算是風險比較高的。</p>



<p>2. Spread</p>



<p>主機「一定」會放在不同的實體機上，</p>



<p>這樣就不會因為某台實體機的問題，</p>



<p>讓你的主機同時不能運作，比較保險，那我們就選 Spread。</p>



<p>接下來是最重要的 Boot Disk，要指向你建立的 Image</p>



<p>在這裡你可以選擇用哪種 Disk，以及它的大小。</p>



<p>但要注意，Instance Template 是建立完成後，就不能再回來改的，</p>



<p>如果你設定錯誤，就必須要重新建立 Template，</p>



<p>所以這邊要小心設定。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1843" height="1037" src="https://dongdonggcp.com/wp-content/uploads/2024/09/09-e8a8ade5ae9a-instance-template-e79a84-boot-disk-e68c87e59091e887aae8a882e79a84-image-1.png?w=1024" alt="在 GCP 設定 Instance Template 的 Boot Disk 指向自訂的 Image" class="wp-image-7393" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/09-e8a8ade5ae9a-instance-template-e79a84-boot-disk-e68c87e59091e887aae8a882e79a84-image-1.png 1843w, https://dongdonggcp.com/wp-content/uploads/2024/09/09-e8a8ade5ae9a-instance-template-e79a84-boot-disk-e68c87e59091e887aae8a882e79a84-image-1-300x169.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/09-e8a8ade5ae9a-instance-template-e79a84-boot-disk-e68c87e59091e887aae8a882e79a84-image-1-1024x576.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/09-e8a8ade5ae9a-instance-template-e79a84-boot-disk-e68c87e59091e887aae8a882e79a84-image-1-768x432.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/09-e8a8ade5ae9a-instance-template-e79a84-boot-disk-e68c87e59091e887aae8a882e79a84-image-1-1536x864.png 1536w" sizes="(max-width: 1843px) 100vw, 1843px" /><figcaption class="wp-element-caption">設定 Instance Template 的 Boot Disk 指向自訂的 Image<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來是 Identity and API access 就照你原本 VM 的設定，</p>



<p>如果你原本就沒有調整，那就保持預設即可。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="752" height="313" src="https://dongdonggcp.com/wp-content/uploads/2024/09/10-e8a8ade5ae9a-instance-template-e79a84-service-account-1.png?w=752" alt="在 GCP 設定 Instance Template 的 Service Account" class="wp-image-7394" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/10-e8a8ade5ae9a-instance-template-e79a84-service-account-1.png 752w, https://dongdonggcp.com/wp-content/uploads/2024/09/10-e8a8ade5ae9a-instance-template-e79a84-service-account-1-300x125.png 300w" sizes="(max-width: 752px) 100vw, 752px" /><figcaption class="wp-element-caption">設定 Instance Template 的 Service Account<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在 Firewall 的部分，請同時把下方 Advanced options 和 Networking 展開。</p>



<p>在這裡，HTTP 和 HTTPS 是完全對外開放的，不限任何的 IP 來源。</p>



<p>但我們的主機只要允許 Load Balancer 的流量進來就好了，所以這邊<strong>不要打勾</strong>。</p>



<p>那下面還有一個 Allow Load Balancer Health Checks 是不是應該勾起來？</p>



<p>它是要幫你檢查主機是否健康的機制，它的流量會從特定的網段過來，</p>



<p>這裡勾起來就會自動允許那個來檢查的網段 35.191.0.0/16 和 130.211.0.0/22。</p>



<p>但是我建議不要勾。</p>



<p>我的做法是，你一定要設定專屬的網路標記 (Network Tag)，</p>



<p>這樣你未來才方便調整套用到 IG 的防火牆規則，你想開什麼協定、哪一個 Port、從什麼網段，</p>



<p>你都可以在防火牆規則的頁面自由調整，例如我在這裡設定 apache-1，</p>



<p>我如果要調整防火牆，我就在相關的防火牆規則加上 “apache-1” 這個標記就好了，</p>



<p><strong>因為你的 Template 是完全不能修改的</strong>，</p>



<p>防火牆設錯就必須刪除重建，毫無任何彈性，</p>



<p>還不如只設定專屬的網路標記，未來防火牆想怎麼改就怎麼改，方便很多！</p>



<p>後面設定防火牆的部分會再詳細說明。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1362" height="934" src="https://dongdonggcp.com/wp-content/uploads/2024/09/11-e8a8ade5ae9a-instance-template-e79a84e998b2e781abe78986-1.png?w=1024" alt="在 GCP 設定 Instance Template 的防火牆" class="wp-image-7396" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/11-e8a8ade5ae9a-instance-template-e79a84e998b2e781abe78986-1.png 1362w, https://dongdonggcp.com/wp-content/uploads/2024/09/11-e8a8ade5ae9a-instance-template-e79a84e998b2e781abe78986-1-300x206.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/11-e8a8ade5ae9a-instance-template-e79a84e998b2e781abe78986-1-1024x702.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/11-e8a8ade5ae9a-instance-template-e79a84e998b2e781abe78986-1-768x527.png 768w" sizes="(max-width: 1362px) 100vw, 1362px" /><figcaption class="wp-element-caption">設定 Instance Template 的防火牆<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在 Networking 下方的 Network Interfaces 部分，</p>



<p>這邊看你是否要部署到特定的 VPC 或 Subnet ，再視情況調整，</p>



<p>重要的是 IP 要改成 None，為什麼不要 IP 呢？</p>



<p><strong>因為 Load Balancer 會用一個 IP 專門對外服務，</strong></p>



<p><strong>所以你不需要給 Instance Group 的機器再分配外部 IP，</strong></p>



<p>不然會變成，你已經有 LB 的 IP 對外，同時你的每一台主機也都有外部 IP，</p>



<p>這樣有人就可以繞過 LB 直接到達你的主機，是有資安疑慮的。</p>



<p>所以請把外部 IP 設為 None，沒問題的話再按下 Done。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1118" height="1025" src="https://dongdonggcp.com/wp-content/uploads/2024/09/12-e8a8ade5ae9a-instance-template-e4b88de8a681e5a496e983a8-ip-1.png?w=1024" alt="在 GCP 設定 Instance Template 不要外部 IP" class="wp-image-7397" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/12-e8a8ade5ae9a-instance-template-e4b88de8a681e5a496e983a8-ip-1.png 1118w, https://dongdonggcp.com/wp-content/uploads/2024/09/12-e8a8ade5ae9a-instance-template-e4b88de8a681e5a496e983a8-ip-1-300x275.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/12-e8a8ade5ae9a-instance-template-e4b88de8a681e5a496e983a8-ip-1-1024x939.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/12-e8a8ade5ae9a-instance-template-e4b88de8a681e5a496e983a8-ip-1-768x704.png 768w" sizes="(max-width: 1118px) 100vw, 1118px" /><figcaption class="wp-element-caption">設定 Instance Template 不要外部 IP<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>這裡小小補充一下，針對上述 Instance Template 的建立，</p>



<p>你也可以在 Management 的 Automation 當中，</p>



<p>使用<a href="https://cloud.google.com/compute/docs/instances/startup-scripts/linux">開機指令碼 (Startup-Scripts)</a> 設定到執行個體範本，不用 Image。</p>



<p>每當 IG 擴充機器時，機器會自動執行 Startup-Scripts 的指令，</p>



<p>自動連線到某個地方安裝應用程式或抓取程式碼。</p>



<p>不過每次開機器時，你必須要等它花時間抓到相關檔案，</p>



<p>並且安裝設定完成，才能對外服務。</p>



<p>萬一它連線或安裝異常，你還要「趕快」人工連進去除錯，</p>



<p>是「每一台擴充出來的機器」都要除錯，</p>



<p>因為 Load Balancer 要送流量進來了，</p>



<p>你不趕快調整，新的用戶就會進到有問題的機器，</p>



<p>反而導致你可能會手忙腳亂。</p>



<p>所以還是建議直接使用都安裝設定完成的 Image，</p>



<p>是比較好的選擇，這裡我們就不做任何設定。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="894" height="646" src="https://dongdonggcp.com/wp-content/uploads/2024/09/13-e8a8ade5ae9a-instance-template-automation-e4bf9de68c81e7a9bae799bd-1.png?w=894" alt="在 GCP 設定 Instance Template Automation 保持空白" class="wp-image-7399" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/13-e8a8ade5ae9a-instance-template-automation-e4bf9de68c81e7a9bae799bd-1.png 894w, https://dongdonggcp.com/wp-content/uploads/2024/09/13-e8a8ade5ae9a-instance-template-automation-e4bf9de68c81e7a9bae799bd-1-300x217.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/13-e8a8ade5ae9a-instance-template-automation-e4bf9de68c81e7a9bae799bd-1-768x555.png 768w" sizes="(max-width: 894px) 100vw, 894px" /><figcaption class="wp-element-caption">設定 Instance Template Automation 保持空白<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>至於其他的進階選項，看你有沒有特殊需求，再調整即可，</p>



<p>不然就保持預設，點擊最下面的 Create，就建立完成了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="916" height="713" src="https://dongdonggcp.com/wp-content/uploads/2024/09/14-e8a8ade5ae9a-instance-template-e585b6e4bb96e980b2e99a8ee981b8e9a085-1.png?w=916" alt="設定 Instance Template 其他進階選項" class="wp-image-7401" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/14-e8a8ade5ae9a-instance-template-e585b6e4bb96e980b2e99a8ee981b8e9a085-1.png 916w, https://dongdonggcp.com/wp-content/uploads/2024/09/14-e8a8ade5ae9a-instance-template-e585b6e4bb96e980b2e99a8ee981b8e9a085-1-300x234.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/14-e8a8ade5ae9a-instance-template-e585b6e4bb96e980b2e99a8ee981b8e9a085-1-768x598.png 768w" sizes="(max-width: 916px) 100vw, 916px" /><figcaption class="wp-element-caption">設定 Instance Template 其他進階選項<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(三) 建立執行個體群組，使用你的執行個體範本</h2>



<p>進入執行個體群組頁面後，選擇無狀態的 (Stateless)，</p>



<p>然後選擇你的 Instance Template。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1893" height="858" src="https://dongdonggcp.com/wp-content/uploads/2024/09/15-e5bbbae7ab8b-instance-groupefbc8ce591bde5908de4b8a6e68c87e5ae9ae7af84e69cac-1.png?w=1024" alt="在 GCP 建立 Instance Group，命名並指定範本" class="wp-image-7403" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/15-e5bbbae7ab8b-instance-groupefbc8ce591bde5908de4b8a6e68c87e5ae9ae7af84e69cac-1.png 1893w, https://dongdonggcp.com/wp-content/uploads/2024/09/15-e5bbbae7ab8b-instance-groupefbc8ce591bde5908de4b8a6e68c87e5ae9ae7af84e69cac-1-300x136.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/15-e5bbbae7ab8b-instance-groupefbc8ce591bde5908de4b8a6e68c87e5ae9ae7af84e69cac-1-1024x464.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/15-e5bbbae7ab8b-instance-groupefbc8ce591bde5908de4b8a6e68c87e5ae9ae7af84e69cac-1-768x348.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/15-e5bbbae7ab8b-instance-groupefbc8ce591bde5908de4b8a6e68c87e5ae9ae7af84e69cac-1-1536x696.png 1536w" sizes="(max-width: 1893px) 100vw, 1893px" /><figcaption class="wp-element-caption">建立 Instance Group，命名並指定範本<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Location 請選擇 Multiple Zones，因為你既然要 Autoscale，</p>



<p>就是想提高可用性，</p>



<p>你不會把所有機器都集到同一個機房 (Zone)，</p>



<p>在這裡你就應該選擇 Multiple Zones，</p>



<p>讓機器橫跨 A、B、C 三個 Zone，萬一有個 Zone 無法連線，</p>



<p>其他 Zone 的主機還是可以對外服務。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="604" height="209" src="https://dongdonggcp.com/wp-content/uploads/2024/09/16-e8a8ade5ae9a-instance-group-e79a84-location-1.png?w=604" alt="在 GCP 設定 Instance Group 的 Location" class="wp-image-7404" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/16-e8a8ade5ae9a-instance-group-e79a84-location-1.png 604w, https://dongdonggcp.com/wp-content/uploads/2024/09/16-e8a8ade5ae9a-instance-group-e79a84-location-1-300x104.png 300w" sizes="(max-width: 604px) 100vw, 604px" /><figcaption class="wp-element-caption">設定 Instance Group 的 Location<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來的 <a href="https://cloud.google.com/compute/docs/instance-groups/regional-mig-distribution-shape">Target Distribution Shape</a> 指的是，</p>



<p>你的機器如何分配到這些 Zone，</p>



<p>在可用的選項中，包含 Even 和 Balanced 兩種：</p>



<p>(1) Even&nbsp;</p>



<p>指的是 IG 會 100% 做到機器都平均分散三個 Zone 中，</p>



<p>使命必達的概念。</p>



<p>(2) Balanced&nbsp;</p>



<p>指的是 IG 會「儘量」做到機器都平均分散三個 Zone 中。</p>



<p>為什麼說「儘量」？</p>



<p>因為它會考慮每個 Zone 的資源可用性，</p>



<p>例如 CPU、記憶體和 Disk 是否足夠，</p>



<p>以及其他資源包含配額、硬體、成本等，</p>



<p>然後把機器開在相對足夠的 Zone，</p>



<p>所以和 Even 比起來，「比較不平均」，</p>



<p>但保留了一點開機器的彈性。</p>



<p>像是台灣 Region asia-east-1 的 Zone B，因為是預設選項，</p>



<p>所以經常機器被開滿，所以選擇 Balanced 是比較好的選項。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="605" height="147" src="https://dongdonggcp.com/wp-content/uploads/2024/09/17-e8a8ade5ae9a-instance-group-e79a84e4b8bbe6a99fe4bd8de7bdaee58886e9858de7ad96e795a5-1.png?w=605" alt="在 GCP 設定 Instance Group 的主機位置分配策略" class="wp-image-7406" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/17-e8a8ade5ae9a-instance-group-e79a84e4b8bbe6a99fe4bd8de7bdaee58886e9858de7ad96e795a5-1.png 605w, https://dongdonggcp.com/wp-content/uploads/2024/09/17-e8a8ade5ae9a-instance-group-e79a84e4b8bbe6a99fe4bd8de7bdaee58886e9858de7ad96e795a5-1-300x73.png 300w" sizes="(max-width: 605px) 100vw, 605px" /><figcaption class="wp-element-caption">設定 Instance Group 的主機位置分配策略<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>至於 Allow Instance Redistribution 是什麼意思？</p>



<p>指的是你的主機會被 IG 主動重新分配，</p>



<p>就是它會自動從機器多的 Zone 刪除機器，</p>



<p>再增加到機器少的 Zone。</p>



<p>假設你有 12 台機器分布在A、B、C 三個 Zone，每個 Zone 4台。</p>



<p>如果你不小心刪掉了 Zone C 的 3 台，IG 會這樣調整：</p>



<p>(1) 從 Zone A 和 Zone B 各刪掉1台</p>



<p>(2) 在 Zonce C 新增 2 台</p>



<p>(3) 這樣每個 Zone 就又都是3台了，達到平衡。</p>



<p>要注意你只是刪掉 3 台機器，它又主動多刪掉你 2 台，整體運作能力會暫時下降。</p>



<p>因為你的機器並沒有異常，就這樣突然被刪掉，</p>



<p>再去另一個 Zone 開起來，反而讓你的系統不穩。</p>



<p>所以當你在 Target Distribution Shape 選擇 Even 時，為了保持平均，</p>



<p>它才會問你要不要勾 Allow Instance Redistribution，</p>



<p>當然我建議不用勾選，確保系統穩定比較重要。</p>



<p>如果你選 Balanced，預設就不會再給你選擇 Redistribution 了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1188" height="645" src="https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e887aae58b95e9878de696b0e58886e9858de7a4bae6848fe59c96-1.png?w=1024" alt="GCP Instance Group 的自動重新分配示意圖" class="wp-image-7408" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e887aae58b95e9878de696b0e58886e9858de7a4bae6848fe59c96-1.png 1188w, https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e887aae58b95e9878de696b0e58886e9858de7a4bae6848fe59c96-1-300x163.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e887aae58b95e9878de696b0e58886e9858de7a4bae6848fe59c96-1-1024x556.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e887aae58b95e9878de696b0e58886e9858de7a4bae6848fe59c96-1-768x417.png 768w" sizes="(max-width: 1188px) 100vw, 1188px" /><figcaption class="wp-element-caption">Instance Group 的自動重新分配示意圖<br>截圖自 <a href="https://cloud.google.com/compute/docs/instance-groups/regional-migs">GCP 官方文件</a></figcaption></figure>



<p>接下來是 Autoscaling Mode，它問你三種模式要選擇哪一種？</p>



<p>(1) On：自動增加也自動縮減機器</p>



<p>(2) Sacle out：自動增加機器，但不自動縮減</p>



<p>(3) Off：不要擴充也不要縮減</p>



<p>選 (1) 的話，流量增加會增加機器，流量減少會自動減少機器，</p>



<p>我們可以理解除了增加可用性，也是為了節省成本。</p>



<p>選 (2) 則是為了穩定性考量，怕下次流量突然爆增，</p>



<p>所以機器寧可增加也不要縮減。</p>



<p>那選 (3) 是為了什麼？</p>



<p>一方面是成本考量，不要多開機器，另一方面，如果機器有問題，</p>



<p>IG 會自動刪掉它然後重建，就是你的服務不管碰到什麼問題，</p>



<p>它都會一直復活，至少你不用人工進去處理，</p>



<p>還是節省不少你維護的時間。</p>



<p>所以三個選項各有考量，我們在這裡就選擇 (1)，自動增加和縮減機器。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="607" height="347" src="https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e693b4e58585e6a8a1e5bc8f-2.png?w=607" alt="GCP Instance Group 的擴充模式" class="wp-image-7409" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e693b4e58585e6a8a1e5bc8f-2.png 607w, https://dongdonggcp.com/wp-content/uploads/2024/09/18-instance-group-e79a84e693b4e58585e6a8a1e5bc8f-2-300x171.png 300w" sizes="(max-width: 607px) 100vw, 607px" /><figcaption class="wp-element-caption">Instance Group 的擴充模式<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Minimum/Maximum number of instances 就是你整個 IG 機器數量的上下限，我們就先設定1～3 台。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="587" height="132" src="https://dongdonggcp.com/wp-content/uploads/2024/09/19-instance-group-e79a84e4b8bbe6a99fe695b8e9878fe4b88ae4b88be99990-1.png?w=587" alt="設定 GCP Instance Group 的主機數量上下限" class="wp-image-7411" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/19-instance-group-e79a84e4b8bbe6a99fe695b8e9878fe4b88ae4b88be99990-1.png 587w, https://dongdonggcp.com/wp-content/uploads/2024/09/19-instance-group-e79a84e4b8bbe6a99fe695b8e9878fe4b88ae4b88be99990-1-300x67.png 300w" sizes="(max-width: 587px) 100vw, 587px" /><figcaption class="wp-element-caption">Instance Group 的主機數量上下限<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p><a href="https://cloud.google.com/compute/docs/autoscaler#autoscaling_policy">Autoscaling signals</a>&nbsp; 指的是觸發你擴充機器的時機，有 4 種 Signal Type 可以選擇：</p>



<p>(1) CPU Utilization</p>



<p>指的是 IG 裡所有機器的 CPU 使用率，是最基本的選項。</p>



<p>(2) HTTP Load Balancing Utilization</p>



<p>指的是 LB 的使用率，它並不是特定的效能指標，</p>



<p>它包含 CPU、網路流量、HTTP Session 數量、每秒請求數 (RPS) 和 Disk I/O，</p>



<p>由 GCP 綜合考量所計算出來的指標，</p>



<p>所以不會只偏重單一指標，是從整體角度來看。</p>



<p>(3) Cloud Pub/Sub Queue</p>



<p>這部分和資料處理管道 (Pileline) 有關，</p>



<p>例如你的主機是拿來做串流資料 (Streaming Data) 處理的，</p>



<p>前端資料來源都從 Load Balancer 進來，</p>



<p>然後分散給不同的機器來處理，</p>



<p>這裡就是確認每台機器收到多少消息，包含還沒處理完的訊息，</p>



<p>因為前端的資料量可能時大時小，</p>



<p>如果累積的訊息太多，機器會來不及處理，</p>



<p>就可使用這個指標讓它自動擴充機器來幫忙處理。</p>



<p>(4) Cloud Monitoring Metric&nbsp;</p>



<p>指的就是 Cloud Monitoring 的指標，都可以拿來判斷是否要擴充機器，</p>



<p>以前只能用 CPU 來判斷，但有些機器可能是記憶容易飆高，</p>



<p>這樣用 CPU 判斷就不夠精準，</p>



<p>你就可以選擇其他指標例如記憶體使用率 (Memory Usage)，</p>



<p>或進來的網路流量 (Ingress Bytes) 等等。</p>



<p>如果你只是在測試，想要讓 Autoscale 馬上發生，可以直接調成 5%，</p>



<p>在此我們就先使用預設的 CPU Utilization 60%。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="584" height="280" src="https://dongdonggcp.com/wp-content/uploads/2024/09/20-instance-group-e79a84-autoscaling-signals-1.png?w=584" alt="在 GCP 設定 Instance Group 的 Autoscaling signals" class="wp-image-7412" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/20-instance-group-e79a84-autoscaling-signals-1.png 584w, https://dongdonggcp.com/wp-content/uploads/2024/09/20-instance-group-e79a84-autoscaling-signals-1-300x144.png 300w" sizes="(max-width: 584px) 100vw, 584px" /><figcaption class="wp-element-caption">Instance Group 的 Autoscaling signals<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p><a href="https://cloud.google.com/compute/docs/autoscaler/predictive-autoscaling">Predictive Autoscaling</a> 指的是透過預測來提早擴充，</p>



<p>它會依照你過去主機擴充的指標，</p>



<p>例如上面設定的 CPU 使用率，我們原本設定 60% 才擴充，</p>



<p>它可能 CPU 到 58% 的時候，就預測可能要超過 60% 了，</p>



<p>於是提前擴充機器。</p>



<p>這樣的好處是，你原本的機器就不會因為新的還沒擴充出來，</p>



<p>自己在那邊獨撐大局，造成機器不穩定的狀況。</p>



<p>不過它需要你的歷史資料，用來建立機器學習的模型，才方便預測。</p>



<p>所以你的服務至少要開 3 天以上，才有足夠資料讓它可以訓練。</p>



<p>在這裡我們就選擇 Off 即可，這段沒問題就可按下 Done。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="547" height="363" src="https://dongdonggcp.com/wp-content/uploads/2024/09/21-instance-group-e79a84-predictive-autoscaling-1.png?w=547" alt="設定 GCP Instance Group 的 Predictive Autoscaling" class="wp-image-7414" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/21-instance-group-e79a84-predictive-autoscaling-1.png 547w, https://dongdonggcp.com/wp-content/uploads/2024/09/21-instance-group-e79a84-predictive-autoscaling-1-300x199.png 300w" sizes="(max-width: 547px) 100vw, 547px" /><figcaption class="wp-element-caption">Instance Group 的 Predictive Autoscaling<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Autoscaling Schedules 是依照時間來自動擴充的功能，</p>



<p>如果你能確定流量較大的時間，</p>



<p>例如每天晚上八點到十點，你就可以設定此功能。</p>



<p>但我們現在是依照 CPU 來決定是否擴充，</p>



<p>這兩個功能是互斥的，所以就不能再設定它。</p>



<p>如下圖它呈現反灰的狀態。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="513" height="130" src="https://dongdonggcp.com/wp-content/uploads/2024/09/22-instance-group-e79a84-autoscaling-schedules-1.png?w=513" alt="設定 GCP Instance Group 的 Autoscaling Schedules" class="wp-image-7416" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/22-instance-group-e79a84-autoscaling-schedules-1.png 513w, https://dongdonggcp.com/wp-content/uploads/2024/09/22-instance-group-e79a84-autoscaling-schedules-1-300x76.png 300w" sizes="(max-width: 513px) 100vw, 513px" /><figcaption class="wp-element-caption">Instance Group 的 Autoscaling Schedules<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Initialization period 指的是新的機器擴充要等它多久，</p>



<p>每一台新擴充的機器，都是需要跑一遍開機過程的，</p>



<p>所以要預留時間等它開好。</p>



<p>因為開機時，機器是很忙的，CPU 一定都會飆非常高，</p>



<p>像我今天的 custom-vm 剛開機時，CPU 已經飆到 93%。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="709" height="370" src="https://dongdonggcp.com/wp-content/uploads/2024/09/23-e4b8bbe6a99fe9968be6a99fe69982e79a84-cpu-e5b7b2e7b693e9a386e588b0-93-1.png?w=709" alt="GCP 主機開機時的 CPU 已經飆到 93%" class="wp-image-7417" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/23-e4b8bbe6a99fe9968be6a99fe69982e79a84-cpu-e5b7b2e7b693e9a386e588b0-93-1.png 709w, https://dongdonggcp.com/wp-content/uploads/2024/09/23-e4b8bbe6a99fe9968be6a99fe69982e79a84-cpu-e5b7b2e7b693e9a386e588b0-93-1-300x157.png 300w" sizes="(max-width: 709px) 100vw, 709px" /><figcaption class="wp-element-caption">主機開機時的 CPU 已經飆到 93%<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>如果這個值設太短，例如 5 秒鐘，那新的機器還在開機當中，</p>



<p>CPU 還是很高，追成 IG 誤判它 CPU 飆高，</p>



<p>所以當場又決定再擴充一台新的。</p>



<p>代表你新的機器還沒開好，又再開新的，</p>



<p>如果每一台都要開機很久，它就一直開新到直到上限開好開滿。</p>



<p>但是如果你時間設太長，你又要等很久才能確認總體的負載，</p>



<p>萬一用戶流量突然爆增，你的擴充又會來不及。</p>



<p>所以針對這種情況，你需要測試你的主機，從開機到準備對外服務，</p>



<p>差不多要多久，越精準越好，才能兼顧擴充速度並減少誤判。</p>



<p>在這裡我們也依照預設的 60 秒即可。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1116" height="325" src="https://dongdonggcp.com/wp-content/uploads/2024/09/24-instance-group-e79a84-initialization-period-1.png?w=1024" alt="設定 GCP Instance Group 的 Initialization Period" class="wp-image-7420" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/24-instance-group-e79a84-initialization-period-1.png 1116w, https://dongdonggcp.com/wp-content/uploads/2024/09/24-instance-group-e79a84-initialization-period-1-300x87.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/24-instance-group-e79a84-initialization-period-1-1024x298.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/24-instance-group-e79a84-initialization-period-1-768x224.png 768w" sizes="(max-width: 1116px) 100vw, 1116px" /><figcaption class="wp-element-caption">Instance Group 的 Initialization Period<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p><a href="https://cloud.google.com/compute/docs/autoscaler#scale-in_controls">Scale-in controls</a> 就是反過來，關於機器縮減的速度控制，</p>



<p>你的用戶流量突然降下來，但沒多久又飆上去，</p>



<p>這時如果機器自動縮減了，會來不及再次擴充出來應付流量。</p>



<p>這裡就是為了防止機器太快縮減，設定的緩衝時間，</p>



<p>例如我們設定 10 分鐘內不要刪除超過 1 台機器，或 50% 的機器。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1114" height="474" src="https://dongdonggcp.com/wp-content/uploads/2024/09/25-instance-group-e79a84-scale-in-controls-1.png?w=1024" alt="設定 GCP Instance Group 的 Scale-in controls" class="wp-image-7421" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/25-instance-group-e79a84-scale-in-controls-1.png 1114w, https://dongdonggcp.com/wp-content/uploads/2024/09/25-instance-group-e79a84-scale-in-controls-1-300x128.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/25-instance-group-e79a84-scale-in-controls-1-1024x436.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/25-instance-group-e79a84-scale-in-controls-1-768x327.png 768w" sizes="(max-width: 1114px) 100vw, 1114px" /><figcaption class="wp-element-caption">Instance Group 的 Scale-in controls<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>VM instance Lifecycle 指的是設定主機有狀況的時候，要做哪些反應。</p>



<p>Default Action On Failure 指的是因為我們已經設定要 Autoscale 了，</p>



<p>所以主機有問題 (Fail) 的話，它固定就是會 Repair Instance。</p>



<p>要注意字面上是「修復」，實際上它就是把機器刪掉，再重新建立。</p>



<p>它沒有那麼好會去幫你 Debug 啦 XD！</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1028" height="467" src="https://dongdonggcp.com/wp-content/uploads/2024/09/26-instance-group-e79a84-action-on-failure-1.png?w=1024" alt="設定 GCP Instance Group 的 Action On Failure" class="wp-image-7423" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/26-instance-group-e79a84-action-on-failure-1.png 1028w, https://dongdonggcp.com/wp-content/uploads/2024/09/26-instance-group-e79a84-action-on-failure-1-300x136.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/26-instance-group-e79a84-action-on-failure-1-1024x465.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/26-instance-group-e79a84-action-on-failure-1-768x349.png 768w" sizes="(max-width: 1028px) 100vw, 1028px" /><figcaption class="wp-element-caption">Instance Group 的 Action On Failure<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在 Autohealing 的部分，承上提到的 Fail，</p>



<p>GCP 是用它自己的標準來判斷是否 Fail。</p>



<p>我們通常是透過「健康狀態檢查」(Health Check) ，</p>



<p>明確地判斷它「健康」或「不健康」，</p>



<p>再決定要不要「修復」你的主機，</p>



<p>如果你之前還沒建立過 Health Check，可以在這裡點擊建立。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1593" height="888" src="https://dongdonggcp.com/wp-content/uploads/2024/09/27-e5bbbae7ab8b-health-check-1.png?w=1024" alt="在 GCP 建立 Health Check" class="wp-image-7424" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/27-e5bbbae7ab8b-health-check-1.png 1593w, https://dongdonggcp.com/wp-content/uploads/2024/09/27-e5bbbae7ab8b-health-check-1-300x167.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/27-e5bbbae7ab8b-health-check-1-1024x571.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/27-e5bbbae7ab8b-health-check-1-768x428.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/27-e5bbbae7ab8b-health-check-1-1536x856.png 1536w" sizes="(max-width: 1593px) 100vw, 1593px" /><figcaption class="wp-element-caption">建立 Health Check<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>當我們進入 Health Check 之後，首先給它命名。</p>



<p>在 Scope 部分，是依照 Load Balancer 的屬性來決定的，</p>



<p>我們後續是要建立 Global 的 LB，所以我們在這裡也選 Global。</p>



<p>而 Protocol 部分，因為我們是網頁，你可以選擇 HTTP 或 TCP，</p>



<p>但我們「一定要」選 HTTP，</p>



<p>因為它能夠檢查你的網頁回應碼是不是 “200 OK”。</p>



<p>如果你選 TCP，那網頁可能是 404 Error，</p>



<p>而檢查結果仍然是「健康」，那就是誤判，所以千萬不要選錯。</p>



<p>至於 Logs 的部分，就是記錄檢查成功或失敗的 Log，</p>



<p>你可以視情況決定要不要勾，在這裡我就勾起來。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1837" height="791" src="https://dongdonggcp.com/wp-content/uploads/2024/09/28-health-check-e8a8ade5ae9a-1.png?w=1024" alt="" class="wp-image-7426" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/28-health-check-e8a8ade5ae9a-1.png 1837w, https://dongdonggcp.com/wp-content/uploads/2024/09/28-health-check-e8a8ade5ae9a-1-300x129.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/28-health-check-e8a8ade5ae9a-1-1024x441.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/28-health-check-e8a8ade5ae9a-1-768x331.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/28-health-check-e8a8ade5ae9a-1-1536x661.png 1536w" sizes="(max-width: 1837px) 100vw, 1837px" /><figcaption class="wp-element-caption">Health Check 設定<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Health Criteria 就是你的判斷基準，怎樣叫健康，怎樣叫不健康。</p>



<p>例如預設值提到的，每 5 秒鐘檢查一次你的網頁，</p>



<p>然後等 5 秒鐘看有沒有回應 “200 OK”，</p>



<p>如果連續兩次都回應 “200 OK”，則視為「健康」；</p>



<p>如果連續兩次都不回應 “200 OK”，則視為「不健康」；</p>



<p>那如果介於兩者之間呢？</p>



<p>那就是繼續等它檢查結果，直到確定是否健康為止。</p>



<p>如果沒問題就可按下 Save。</p>



<p>Updates During VM Instance Repair 指的是我們的應用程式會改版，</p>



<p>在 IG 上就是會更換 Instance Template，</p>



<p>這裡是問要不要趁主機因為異常而重建的時候，順便開新版的機器。</p>



<p>你可以 Keep the same instance configuration 保持舊版，</p>



<p>或是 Update the instance configuration 順便換新版。</p>



<p>這要取決於你的 CI/CD 版本控管政策來決定。</p>



<p>在這裡我們只有一個版本，所以保持預設值即可。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1014" height="282" src="https://dongdonggcp.com/wp-content/uploads/2024/09/29-e8a8ade5ae9a-instance-group-e4b8bbe6a99fe9878de5bbbae69982e698afe590a6e8a681e69bb4e696b0e78988e69cac-1.png?w=1014" alt="Updates during VM Instance Repair 設定 Instance Group 主機重建時是否要更新版本" class="wp-image-7427" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/29-e8a8ade5ae9a-instance-group-e4b8bbe6a99fe9878de5bbbae69982e698afe590a6e8a681e69bb4e696b0e78988e69cac-1.png 1014w, https://dongdonggcp.com/wp-content/uploads/2024/09/29-e8a8ade5ae9a-instance-group-e4b8bbe6a99fe9878de5bbbae69982e698afe590a6e8a681e69bb4e696b0e78988e69cac-1-300x83.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/29-e8a8ade5ae9a-instance-group-e4b8bbe6a99fe9878de5bbbae69982e698afe590a6e8a681e69bb4e696b0e78988e69cac-1-768x214.png 768w" sizes="(max-width: 1014px) 100vw, 1014px" /><figcaption class="wp-element-caption">設定 Instance Group 主機重建時是否要更新版本<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Port mapping 是設定 Load Balancer 進來的時候，是經過哪一個 Port，</p>



<p>你可以先給它取個名字，或是設定 LB 的時候再設定也可以。</p>



<p>我們就先設定 Name 為 http，Port 設定為 80。</p>



<p>如果沒問題，就可以按下 Create 了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="627" height="422" src="https://dongdonggcp.com/wp-content/uploads/2024/09/30-e8a8ade5ae9a-instance-group-e79a84-port-mapping-1.png?w=627" alt="設定 Instance Group 的 Port mapping" class="wp-image-7429" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/30-e8a8ade5ae9a-instance-group-e79a84-port-mapping-1.png 627w, https://dongdonggcp.com/wp-content/uploads/2024/09/30-e8a8ade5ae9a-instance-group-e79a84-port-mapping-1-300x202.png 300w" sizes="(max-width: 627px) 100vw, 627px" /><figcaption class="wp-element-caption">設定 Instance Group 的 Port mapping<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來它會切到 Instance Group 的畫面如下：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1119" height="338" src="https://dongdonggcp.com/wp-content/uploads/2024/09/31-e5899be5bbbae7ab8b-instance-group-e79a84e795abe99da2-2.png?w=1024" alt="剛建立 Instance Group 的畫面" class="wp-image-7431" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/31-e5899be5bbbae7ab8b-instance-group-e79a84e795abe99da2-2.png 1119w, https://dongdonggcp.com/wp-content/uploads/2024/09/31-e5899be5bbbae7ab8b-instance-group-e79a84e795abe99da2-2-300x91.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/31-e5899be5bbbae7ab8b-instance-group-e79a84e795abe99da2-2-1024x309.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/31-e5899be5bbbae7ab8b-instance-group-e79a84e795abe99da2-2-768x232.png 768w" sizes="(max-width: 1119px) 100vw, 1119px" /><figcaption class="wp-element-caption">剛建立 Instance Group 的畫面<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們再點進去，你會看到它目前顯示 0% Healthy。</p>



<p>不要懷疑，這是正常的！</p>



<p><strong>因為防火牆還沒開放 Health Check 的網段來存取主機的網頁。</strong></p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1126" height="706" src="https://dongdonggcp.com/wp-content/uploads/2024/09/32-instance-group-e9a1afe7a4bae782ba-0-healthy-1.png?w=1024" alt="GCP Instance Group 顯示為 0% Healthy" class="wp-image-7432" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/32-instance-group-e9a1afe7a4bae782ba-0-healthy-1.png 1126w, https://dongdonggcp.com/wp-content/uploads/2024/09/32-instance-group-e9a1afe7a4bae782ba-0-healthy-1-300x188.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/32-instance-group-e9a1afe7a4bae782ba-0-healthy-1-1024x642.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/32-instance-group-e9a1afe7a4bae782ba-0-healthy-1-768x482.png 768w" sizes="(max-width: 1126px) 100vw, 1126px" /><figcaption class="wp-element-caption">Instance Group 顯示為 0% Healthy<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們可以再點右邊的 Errors，查看錯誤訊息。</p>



<p>如果你不知道為什麼它顯示不建康，都可以從這裡查到。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1407" height="1025" src="https://dongdonggcp.com/wp-content/uploads/2024/09/33-e69fa5e79c8b-instance-group-e98cafe8aaa4e8a88ae681af-1.png?w=1024" alt="查看 Instance Group 錯誤訊息" class="wp-image-7434" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/33-e69fa5e79c8b-instance-group-e98cafe8aaa4e8a88ae681af-1.png 1407w, https://dongdonggcp.com/wp-content/uploads/2024/09/33-e69fa5e79c8b-instance-group-e98cafe8aaa4e8a88ae681af-1-300x219.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/33-e69fa5e79c8b-instance-group-e98cafe8aaa4e8a88ae681af-1-1024x746.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/33-e69fa5e79c8b-instance-group-e98cafe8aaa4e8a88ae681af-1-768x559.png 768w" sizes="(max-width: 1407px) 100vw, 1407px" /><figcaption class="wp-element-caption">查看 Instance Group 錯誤訊息<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>另一方面，我們也可以去 Cloud Logging 查看，</p>



<p>點擊 Instance Group，</p>



<p>你會看到<strong>因為 IG 檢查不到主機，所以視為「不健康」</strong>，</p>



<p>觸發它刪掉原有的主機，然後再重建，</p>



<p>結果又檢查不健康，再次刪除重建&#8230;&#8230;。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1860" height="913" src="https://dongdonggcp.com/wp-content/uploads/2024/09/35-e5be9e-logging-e69fa5e79c8be588b0-instance-group-e8a2abe6aaa2e69fa5e782bae4b88de581a5e5bab7-1.png?w=1024" alt="從 Logging 查看到 Instance Group 被檢查為不健康" class="wp-image-7435" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/35-e5be9e-logging-e69fa5e79c8be588b0-instance-group-e8a2abe6aaa2e69fa5e782bae4b88de581a5e5bab7-1.png 1860w, https://dongdonggcp.com/wp-content/uploads/2024/09/35-e5be9e-logging-e69fa5e79c8be588b0-instance-group-e8a2abe6aaa2e69fa5e782bae4b88de581a5e5bab7-1-300x147.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/35-e5be9e-logging-e69fa5e79c8be588b0-instance-group-e8a2abe6aaa2e69fa5e782bae4b88de581a5e5bab7-1-1024x503.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/35-e5be9e-logging-e69fa5e79c8be588b0-instance-group-e8a2abe6aaa2e69fa5e782bae4b88de581a5e5bab7-1-768x377.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/35-e5be9e-logging-e69fa5e79c8be588b0-instance-group-e8a2abe6aaa2e69fa5e782bae4b88de581a5e5bab7-1-1536x754.png 1536w" sizes="(max-width: 1860px) 100vw, 1860px" /><figcaption class="wp-element-caption">從 Logging 查看到 Instance Group 被檢查為不健康<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們把 &#8220;healthCheckProbeResult&#8221; 這個 Log 展開，</p>



<p>會看到它的檢查結果，上面有註明是從哪裡來檢查的，</p>



<p>以及它去訪問哪一個 IP。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1290" height="1032" src="https://dongdonggcp.com/wp-content/uploads/2024/09/36-e5b195e9968b-log-e69fa5e79c8b-health-check-e7b590e69e9c-1.png?w=1024" alt="展開 Log 查看 Health Check 結果" class="wp-image-7437" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/36-e5b195e9968b-log-e69fa5e79c8b-health-check-e7b590e69e9c-1.png 1290w, https://dongdonggcp.com/wp-content/uploads/2024/09/36-e5b195e9968b-log-e69fa5e79c8b-health-check-e7b590e69e9c-1-300x240.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/36-e5b195e9968b-log-e69fa5e79c8b-health-check-e7b590e69e9c-1-1024x819.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/36-e5b195e9968b-log-e69fa5e79c8b-health-check-e7b590e69e9c-1-768x614.png 768w" sizes="(max-width: 1290px) 100vw, 1290px" /><figcaption class="wp-element-caption">展開 Log 查看 Health Check 結果<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來，我們就去設定防火牆，讓 Health Check 可以找到主機。</p>



<p>注意我們是點擊「防火牆規則」，不是「防火牆政策」喔！！</p>



<p>從 VPC Network =&gt; Firewall 進去防火牆設定頁面：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1206" height="594" src="https://dongdonggcp.com/wp-content/uploads/2024/09/37-e5bbbae7ab8be998b2e781abe78986e8a68fe58987-1.png?w=1024" alt="建立 GCP 防火牆規則" class="wp-image-7439" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/37-e5bbbae7ab8be998b2e781abe78986e8a68fe58987-1.png 1206w, https://dongdonggcp.com/wp-content/uploads/2024/09/37-e5bbbae7ab8be998b2e781abe78986e8a68fe58987-1-300x148.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/37-e5bbbae7ab8be998b2e781abe78986e8a68fe58987-1-1024x504.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/37-e5bbbae7ab8be998b2e781abe78986e8a68fe58987-1-768x378.png 768w" sizes="(max-width: 1206px) 100vw, 1206px" /><figcaption class="wp-element-caption">建立防火牆規則<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>命名通常是越清楚越好，例如命名為 “detault-allow-health-check-http”，</p>



<p>其中 “detault” 是每個 Project 裡第一個 VPC 的名字。</p>



<p>Log 可以打開，你可以確認每一次檢查主機的結果。</p>



<p>順序就保持預設的 1000，方向是 Ingress，</p>



<p>代表進入某台主機，動作就是 Allow。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="730" height="988" src="https://dongdonggcp.com/wp-content/uploads/2024/09/38-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987e5908de7a8b1e38081e696b9e59091e5928ce58b95e4bd9c-1.png?w=730" alt="設定 GCP 防火牆規則名稱、方向和動作" class="wp-image-7441" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/38-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987e5908de7a8b1e38081e696b9e59091e5928ce58b95e4bd9c-1.png 730w, https://dongdonggcp.com/wp-content/uploads/2024/09/38-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987e5908de7a8b1e38081e696b9e59091e5928ce58b95e4bd9c-1-222x300.png 222w" sizes="(max-width: 730px) 100vw, 730px" /><figcaption class="wp-element-caption">設定防火牆規則名稱、方向和動作<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Target Tag 是關鍵，我們在這裡要設定跟 Instance Template 一模一樣的 Tag，</p>



<p>這樣規則就可以套用到這個 IG 所有主機了。</p>



<p>接下來設定 Health Check 的來源網段為 <a href="https://cloud.google.com/load-balancing/docs/health-check-concepts#:~:text=Network%20Load%20Balancer-,35.191.0.0/16,130.211.0.0/22,-For%20IPv6%20traffic">35.191.0.0/16 和 130.211.0.0/22</a>。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1843" height="863" src="https://dongdonggcp.com/wp-content/uploads/2024/09/39-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987-target-tag-1.png?w=1024" alt="設定 GCP 防火牆規則 Target Tag" class="wp-image-7442" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/39-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987-target-tag-1.png 1843w, https://dongdonggcp.com/wp-content/uploads/2024/09/39-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987-target-tag-1-300x140.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/39-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987-target-tag-1-1024x479.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/39-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987-target-tag-1-768x360.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/39-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987-target-tag-1-1536x719.png 1536w" sizes="(max-width: 1843px) 100vw, 1843px" /><figcaption class="wp-element-caption">設定防火牆規則 Target Tag<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>Health Check 要檢查的 Port 是 80，所以這裡就設 80，</p>



<p>其他 Port 不用開，然後按下 Create。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="653" height="677" src="https://dongdonggcp.com/wp-content/uploads/2024/09/40-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987e9968be694be-port-http-80-1.png?w=653" alt="設定 GCP 防火牆規則開放 Port HTTP 80" class="wp-image-7444" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/40-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987e9968be694be-port-http-80-1.png 653w, https://dongdonggcp.com/wp-content/uploads/2024/09/40-e8a8ade5ae9ae998b2e781abe78986e8a68fe58987e9968be694be-port-http-80-1-289x300.png 289w" sizes="(max-width: 653px) 100vw, 653px" /><figcaption class="wp-element-caption">設定防火牆規則開放 Port HTTP 80<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>防火牆生效的速度很快，過沒多久，</p>



<p>IG 的檢查狀態就變成 Healthy 了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1747" height="1010" src="https://dongdonggcp.com/wp-content/uploads/2024/09/41-e79c8be588b0-instance-group-e8ae8a-healthy-e4ba86-1.png?w=1024" alt="看到 Instance Group 變 Healthy 了" class="wp-image-7445" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/41-e79c8be588b0-instance-group-e8ae8a-healthy-e4ba86-1.png 1747w, https://dongdonggcp.com/wp-content/uploads/2024/09/41-e79c8be588b0-instance-group-e8ae8a-healthy-e4ba86-1-300x173.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/41-e79c8be588b0-instance-group-e8ae8a-healthy-e4ba86-1-1024x592.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/41-e79c8be588b0-instance-group-e8ae8a-healthy-e4ba86-1-768x444.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/41-e79c8be588b0-instance-group-e8ae8a-healthy-e4ba86-1-1536x888.png 1536w" sizes="(max-width: 1747px) 100vw, 1747px" /><figcaption class="wp-element-caption">看到 Instance Group 變 Healthy 了<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們也去 Log 看一下，它也顯示為 Healthy。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1660" height="1029" src="https://dongdonggcp.com/wp-content/uploads/2024/09/42-e5be9e-log-e7a2bae8aa8d-instance-group-e6aaa2e69fa5e782ba-healthy-1.png?w=1024" alt="從 Log 確認 Instance Group 檢查為 Healthy" class="wp-image-7447" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/42-e5be9e-log-e7a2bae8aa8d-instance-group-e6aaa2e69fa5e782ba-healthy-1.png 1660w, https://dongdonggcp.com/wp-content/uploads/2024/09/42-e5be9e-log-e7a2bae8aa8d-instance-group-e6aaa2e69fa5e782ba-healthy-1-300x186.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/42-e5be9e-log-e7a2bae8aa8d-instance-group-e6aaa2e69fa5e782ba-healthy-1-1024x635.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/42-e5be9e-log-e7a2bae8aa8d-instance-group-e6aaa2e69fa5e782ba-healthy-1-768x476.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/42-e5be9e-log-e7a2bae8aa8d-instance-group-e6aaa2e69fa5e782ba-healthy-1-1536x952.png 1536w" sizes="(max-width: 1660px) 100vw, 1660px" /><figcaption class="wp-element-caption">從 Log 確認 Instance Group 檢查為 Healthy<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們也可以去 Compute Engine 頁面，IG 開的機器也會列在這裡，</p>



<p>你可以看到它的命名規則是 “IG 的名字 + 隨機英數4碼”，</p>



<p>如果到時有 Autoscale ，產生新機器的話，</p>



<p>也是用這樣的方式命名的。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1674" height="874" src="https://dongdonggcp.com/wp-content/uploads/2024/09/43-e5be9e-compute-engine-e79c8be588b0-instance-group-e79a84e4b8bbe6a99fe5908de7a8b1-1.png?w=1024" alt="從 Compute Engine 看到 Instance Group 的主機名稱" class="wp-image-7448" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/43-e5be9e-compute-engine-e79c8be588b0-instance-group-e79a84e4b8bbe6a99fe5908de7a8b1-1.png 1674w, https://dongdonggcp.com/wp-content/uploads/2024/09/43-e5be9e-compute-engine-e79c8be588b0-instance-group-e79a84e4b8bbe6a99fe5908de7a8b1-1-300x157.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/43-e5be9e-compute-engine-e79c8be588b0-instance-group-e79a84e4b8bbe6a99fe5908de7a8b1-1-1024x535.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/43-e5be9e-compute-engine-e79c8be588b0-instance-group-e79a84e4b8bbe6a99fe5908de7a8b1-1-768x401.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/43-e5be9e-compute-engine-e79c8be588b0-instance-group-e79a84e4b8bbe6a99fe5908de7a8b1-1-1536x802.png 1536w" sizes="(max-width: 1674px) 100vw, 1674px" /><figcaption class="wp-element-caption">從 Compute Engine 看到 Instance Group 的主機名稱<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(四) 建立負載平衡器，接到你的執行個體群組</h2>



<p>1. 設定精靈</p>



<p>我們就直接從 Network Services 進入 Load Balancing，點擊建立 LB。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1729" height="815" src="https://dongdonggcp.com/wp-content/uploads/2024/09/44-e5bbbae7ab8b-gcp-load-balancer-1.png?w=1024" alt="建立 GCP Load Balancer" class="wp-image-7450" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/44-e5bbbae7ab8b-gcp-load-balancer-1.png 1729w, https://dongdonggcp.com/wp-content/uploads/2024/09/44-e5bbbae7ab8b-gcp-load-balancer-1-300x141.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/44-e5bbbae7ab8b-gcp-load-balancer-1-1024x483.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/44-e5bbbae7ab8b-gcp-load-balancer-1-768x362.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/44-e5bbbae7ab8b-gcp-load-balancer-1-1536x724.png 1536w" sizes="(max-width: 1729px) 100vw, 1729px" /><figcaption class="wp-element-caption">建立 GCP Load Balancer<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>它會先問你，要用 Application Load Balancer 或是 Network Load Balancer，</p>



<p>你只要是網站使用 HTTP 或 HTTPS 協定的就用 ALB，其他協定或 Port 就選 NLB。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1011" height="768" src="https://dongdonggcp.com/wp-content/uploads/2024/09/45-e981b8e69387-application-load-balancer-httphttps-1.png?w=1011" alt="選擇 Application Load Balancer (HTTP/HTTPS)" class="wp-image-7451" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/45-e981b8e69387-application-load-balancer-httphttps-1.png 1011w, https://dongdonggcp.com/wp-content/uploads/2024/09/45-e981b8e69387-application-load-balancer-httphttps-1-300x228.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/45-e981b8e69387-application-load-balancer-httphttps-1-768x583.png 768w" sizes="(max-width: 1011px) 100vw, 1011px" /><figcaption class="wp-element-caption">選擇 Application Load Balancer (HTTP/HTTPS)<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>第二個問題也很簡單，你的網站是對外就選 Public，如果是對內就選 Internal。</p>



<p>會有 Internal 嗎？有的，如果你的系統架構有拆前端 Web 主機和 AP 主機的話，</p>



<p>那 Web 主機可設定為 Public，AP 主機可設為 Internal，</p>



<p>這樣 AP 主機就不會直接對外，提高安全性。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1022" height="658" src="https://dongdonggcp.com/wp-content/uploads/2024/09/46-e782ba-load-balancer-e981b8e69387-public-facing-external-1.png?w=1022" alt="為 Load Balancer 選擇 Public facing (external)" class="wp-image-7454" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/46-e782ba-load-balancer-e981b8e69387-public-facing-external-1.png 1022w, https://dongdonggcp.com/wp-content/uploads/2024/09/46-e782ba-load-balancer-e981b8e69387-public-facing-external-1-300x193.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/46-e782ba-load-balancer-e981b8e69387-public-facing-external-1-768x494.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" /><figcaption class="wp-element-caption">為 Load Balancer 選擇 Public facing (external)<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>再來是你的服務對向是全球的，還是只針對特定區域，例如只有台灣？</p>



<p>如果你有國外的巿場，你可以將主機同時部署在多個 Region，</p>



<p>這樣 LB 可以依照用戶所在的位置，就近轉發到最近的主機，快速回應用戶。</p>



<p>在這個範例裡選哪一個都可以，在這裡我們就選 Global。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1000" height="716" src="https://dongdonggcp.com/wp-content/uploads/2024/09/47-e782ba-load-balancer-e981b8e69387global-1.png?w=1000" alt="為 Load Balancer 選擇Global" class="wp-image-7455" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/47-e782ba-load-balancer-e981b8e69387global-1.png 1000w, https://dongdonggcp.com/wp-content/uploads/2024/09/47-e782ba-load-balancer-e981b8e69387global-1-300x215.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/47-e782ba-load-balancer-e981b8e69387global-1-768x550.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">為 Load Balancer 選擇Global<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在這裡我們要選 Global External ALB 或 Classic ALB，但兩者界面其實差不多，</p>



<p>只是 Global External ALB 有強調進階流量管理，可以寫語法來做到更複雜的功能，</p>



<p>例如依照封包標頭導向不同機器 (Header-Based Routing)、</p>



<p>依照權重分流 (Weight-Based Splitting) 等等。</p>



<p>在這個範例裡選哪一個都可以，也沒有價格差異，</p>



<p>我們就選 Global External ALB。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1028" height="751" src="https://dongdonggcp.com/wp-content/uploads/2024/09/48-e981b8e69387-global-external-application-load-balancer-1.png?w=1024" alt="選擇 Global External Application Load Balancer" class="wp-image-7457" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/48-e981b8e69387-global-external-application-load-balancer-1.png 1028w, https://dongdonggcp.com/wp-content/uploads/2024/09/48-e981b8e69387-global-external-application-load-balancer-1-300x219.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/48-e981b8e69387-global-external-application-load-balancer-1-1024x748.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/48-e981b8e69387-global-external-application-load-balancer-1-768x561.png 768w" sizes="(max-width: 1028px) 100vw, 1028px" /><figcaption class="wp-element-caption">選擇 Global External Application Load Balancer<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來再次確認你的選擇有沒有錯誤，沒有就按 Congifure，開始設定 LB 的細節。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="765" height="416" src="https://dongdonggcp.com/wp-content/uploads/2024/09/49-e7a2bae8aa8d-load-balancer-e5889de5a78be8a8ade5ae9a-1.png?w=765" alt="確認 Load Balancer 初始設定" class="wp-image-7458" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/49-e7a2bae8aa8d-load-balancer-e5889de5a78be8a8ade5ae9a-1.png 765w, https://dongdonggcp.com/wp-content/uploads/2024/09/49-e7a2bae8aa8d-load-balancer-e5889de5a78be8a8ade5ae9a-1-300x163.png 300w" sizes="(max-width: 765px) 100vw, 765px" /><figcaption class="wp-element-caption">確認 Load Balancer 初始設定<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>2. 前端 (Front End) 設定 (包含 IP 和 SSL 憑證)</p>



<p>現在進入前端設定的部分，左邊給 LB 命名 “lb-1”，右邊則是對前端命名 “fe-1”，</p>



<p>在 Protocol 部分，我們原本的網站是 HTTP 的，因為我們要把 SSL 憑證做在 LB 上，</p>



<p>讓 LB 來處理 SSL 加密，所以這裡務必選擇 HTTPS。</p>



<p>PS. 假如你現在還沒有自己的 DNS 網域，</p>



<p>而且只是為了練習的話，請選擇 HTTP 就好。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1531" height="1024" src="https://dongdonggcp.com/wp-content/uploads/2024/09/50-load-balancer-e88887e5898de7abafe591bde5908defbc8ce981b8e69387-https-e58d94e5ae9a-1.png?w=1024" alt="Load Balancer 與前端命名，選擇 HTTPS 協定" class="wp-image-7460" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/50-load-balancer-e88887e5898de7abafe591bde5908defbc8ce981b8e69387-https-e58d94e5ae9a-1.png 1531w, https://dongdonggcp.com/wp-content/uploads/2024/09/50-load-balancer-e88887e5898de7abafe591bde5908defbc8ce981b8e69387-https-e58d94e5ae9a-1-300x201.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/50-load-balancer-e88887e5898de7abafe591bde5908defbc8ce981b8e69387-https-e58d94e5ae9a-1-1024x685.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/50-load-balancer-e88887e5898de7abafe591bde5908defbc8ce981b8e69387-https-e58d94e5ae9a-1-768x514.png 768w" sizes="(max-width: 1531px) 100vw, 1531px" /><figcaption class="wp-element-caption">Load Balancer 與前端命名，選擇 HTTPS 協定<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>IP 也務必要固定下來，所以我們把 “Ephemeral” 改成 “Create IP Address”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1607" height="463" src="https://dongdonggcp.com/wp-content/uploads/2024/09/51-e5bbbae7ab8be696b0e79a84e99d9ce6858b-ip-1.png?w=1024" alt="建立新的靜態 IP" class="wp-image-7461" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/51-e5bbbae7ab8be696b0e79a84e99d9ce6858b-ip-1.png 1607w, https://dongdonggcp.com/wp-content/uploads/2024/09/51-e5bbbae7ab8be696b0e79a84e99d9ce6858b-ip-1-300x86.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/51-e5bbbae7ab8be696b0e79a84e99d9ce6858b-ip-1-1024x295.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/51-e5bbbae7ab8be696b0e79a84e99d9ce6858b-ip-1-768x221.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/51-e5bbbae7ab8be696b0e79a84e99d9ce6858b-ip-1-1536x443.png 1536w" sizes="(max-width: 1607px) 100vw, 1607px" /><figcaption class="wp-element-caption">建立新的靜態 IP<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>然後我們給 IP 取名字，例如 “lb-ip”， Google 會從它的 IP Pool 中挑選一個發配出來。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="572" height="473" src="https://dongdonggcp.com/wp-content/uploads/2024/09/52-e7b5a6e99d9ce6858b-ip-e591bde5908d-1.png?w=572" alt="給靜態 IP 命名" class="wp-image-7463" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/52-e7b5a6e99d9ce6858b-ip-e591bde5908d-1.png 572w, https://dongdonggcp.com/wp-content/uploads/2024/09/52-e7b5a6e99d9ce6858b-ip-e591bde5908d-1-300x248.png 300w" sizes="(max-width: 572px) 100vw, 572px" /><figcaption class="wp-element-caption">給靜態 IP 命名<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>再來就是 SSL 憑證，我們點擊 “Create A New Certificate”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1873" height="478" src="https://dongdonggcp.com/wp-content/uploads/2024/09/53-e5bbbae7ab8be696b0e79a84-ssl-e68691e8ad89-1.png?w=1024" alt="在 GCP 建立新的 SSL 憑證" class="wp-image-7464" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/53-e5bbbae7ab8be696b0e79a84-ssl-e68691e8ad89-1.png 1873w, https://dongdonggcp.com/wp-content/uploads/2024/09/53-e5bbbae7ab8be696b0e79a84-ssl-e68691e8ad89-1-300x77.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/53-e5bbbae7ab8be696b0e79a84-ssl-e68691e8ad89-1-1024x261.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/53-e5bbbae7ab8be696b0e79a84-ssl-e68691e8ad89-1-768x196.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/53-e5bbbae7ab8be696b0e79a84-ssl-e68691e8ad89-1-1536x392.png 1536w" sizes="(max-width: 1873px) 100vw, 1873px" /><figcaption class="wp-element-caption">建立新的 SSL 憑證<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>它會轉到建立憑證的視窗，我們先給憑證命名 “cert-web1”，</p>



<p>在建立模式檔中，如果你自己有另外購買憑證，</p>



<p>可以直接上傳，但憑證的展期你要自己再次上傳。</p>



<p>如果你用 Google 的憑證，就可以自動展期，一勞永逸。</p>



<p>下方要設定你的網域，在這個範例中，</p>



<p>我們使用 “web1.dongdonggcp.com”，然後按下 “Create”。</p>



<p>PS.不要輸入跟我一樣的網域喔！如果你自己沒有網域，記得前面的通訊協定選擇 HTTP 就好，</p>



<p>因為它後面會要求你驗證 DNS 的 TXT Record。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="734" height="1009" src="https://dongdonggcp.com/wp-content/uploads/2024/09/54-ssl-e68691e8ad89e591bde5908de5928ce8a8ade5ae9a-1.png?w=734" alt="SSL 憑證命名和設定" class="wp-image-7466" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/54-ssl-e68691e8ad89e591bde5908de5928ce8a8ade5ae9a-1.png 734w, https://dongdonggcp.com/wp-content/uploads/2024/09/54-ssl-e68691e8ad89e591bde5908de5928ce8a8ade5ae9a-1-218x300.png 218w" sizes="(max-width: 734px) 100vw, 734px" /><figcaption class="wp-element-caption">SSL 憑證命名和設定<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>回到原本前端的頁面，這時我們勾選 “HTTP to HTTPS Redirect”，</p>



<p>代表如果有人在瀏覽器輸入 “http://web1.dongdonggcp.com 的話”，</p>



<p>它可以自動導向 “http<strong>s</strong>://web1.dongdonggcp.com”。</p>



<p>如果沒勾，它會打不開網頁喔！</p>



<p>因為兩者本來就是不同的 Port (連接埠)，就像不同的碼頭，</p>



<p>你停錯碼頭就找不到店家，網頁就進不去。</p>



<p>其實像 Open Source 的 Web Server 例如 Apache、Nginx 或 IIS，</p>



<p>很久以前就已經有這個功能了，</p>



<p>而 GCP 的 LB 後來也在用戶的建議之下，</p>



<p>做到可以一鍵勾選，提高了方便性，設定好之後就按下 Done。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="963" height="1040" src="https://dongdonggcp.com/wp-content/uploads/2024/09/55-e5898de7abafe68691e8ad89e7a2bae8aa8defbc8ce4b8a6e58bbee981b8-http-e8bd89e799bc-https-1.png?w=948" alt="前端憑證確認，並勾選 HTTP 轉發 HTTPS" class="wp-image-7468" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/55-e5898de7abafe68691e8ad89e7a2bae8aa8defbc8ce4b8a6e58bbee981b8-http-e8bd89e799bc-https-1.png 963w, https://dongdonggcp.com/wp-content/uploads/2024/09/55-e5898de7abafe68691e8ad89e7a2bae8aa8defbc8ce4b8a6e58bbee981b8-http-e8bd89e799bc-https-1-278x300.png 278w, https://dongdonggcp.com/wp-content/uploads/2024/09/55-e5898de7abafe68691e8ad89e7a2bae8aa8defbc8ce4b8a6e58bbee981b8-http-e8bd89e799bc-https-1-948x1024.png 948w, https://dongdonggcp.com/wp-content/uploads/2024/09/55-e5898de7abafe68691e8ad89e7a2bae8aa8defbc8ce4b8a6e58bbee981b8-http-e8bd89e799bc-https-1-768x829.png 768w" sizes="(max-width: 963px) 100vw, 963px" /><figcaption class="wp-element-caption">前端憑證確認，並勾選 HTTP 轉發 HTTPS<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>它回會到 LB 的主畫面，接下來我們按下 “Beckend Configuration” 進行後端的設定。</p>



<p>注意這裡的「後端」是從 LB 的角度，指的是要迎接流量進來的主機群，</p>



<p>而不是後端 AP 主機或資料庫的意思。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1868" height="518" src="https://dongdonggcp.com/wp-content/uploads/2024/09/56-e5898de7abafe7a2bae8aa8de4b8a6e980b2e585a5e5be8ce7abaf-1.png?w=1024" alt="前端確認並進入後端" class="wp-image-7469" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/56-e5898de7abafe7a2bae8aa8de4b8a6e980b2e585a5e5be8ce7abaf-1.png 1868w, https://dongdonggcp.com/wp-content/uploads/2024/09/56-e5898de7abafe7a2bae8aa8de4b8a6e980b2e585a5e5be8ce7abaf-1-300x83.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/56-e5898de7abafe7a2bae8aa8de4b8a6e980b2e585a5e5be8ce7abaf-1-1024x284.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/56-e5898de7abafe7a2bae8aa8de4b8a6e980b2e585a5e5be8ce7abaf-1-768x213.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/56-e5898de7abafe7a2bae8aa8de4b8a6e980b2e585a5e5be8ce7abaf-1-1536x426.png 1536w" sizes="(max-width: 1868px) 100vw, 1868px" /><figcaption class="wp-element-caption">前端確認並進入後端<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>3. 後端設定 (包含 Cloud CDN 和 Cloud Armor)</p>



<p>我們展開下拉式選單，點擊 “Create A Backend Service”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1885" height="1050" src="https://dongdonggcp.com/wp-content/uploads/2024/09/57-e9bb9ee6938ae4b88be68b89e981b8e596aee5bbbae7ab8be5be8ce7abafe69c8de58b99-1.png?w=1024" alt="點擊下拉選單建立後端服務" class="wp-image-7470" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/57-e9bb9ee6938ae4b88be68b89e981b8e596aee5bbbae7ab8be5be8ce7abafe69c8de58b99-1.png 1885w, https://dongdonggcp.com/wp-content/uploads/2024/09/57-e9bb9ee6938ae4b88be68b89e981b8e596aee5bbbae7ab8be5be8ce7abafe69c8de58b99-1-300x167.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/57-e9bb9ee6938ae4b88be68b89e981b8e596aee5bbbae7ab8be5be8ce7abafe69c8de58b99-1-1024x570.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/57-e9bb9ee6938ae4b88be68b89e981b8e596aee5bbbae7ab8be5be8ce7abafe69c8de58b99-1-768x428.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/57-e9bb9ee6938ae4b88be68b89e981b8e596aee5bbbae7ab8be5be8ce7abafe69c8de58b99-1-1536x856.png 1536w" sizes="(max-width: 1885px) 100vw, 1885px" /><figcaption class="wp-element-caption">點擊下拉選單建立後端服務<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>它會跳出建立「後端服務」的視窗，注意一個「後端服務」，可以接多個「後端」，</p>



<p>「後端服務」指的是 LB 的組成部分，「後端」則是連接的 IG，這裡不要混淆喔！</p>



<p>在通訊協定的部分，我們原始主機就是用 HTTP，所以就選 HTTP，</p>



<p>注意這裡很容易選錯，選錯就不會通喔！</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="829" height="1037" src="https://dongdonggcp.com/wp-content/uploads/2024/09/58-e5be8ce7abafe69c8de58b99e591bde5908de4b8a6e981b8e69387-http-1.png?w=819" alt="後端服務命名並選擇 HTTP" class="wp-image-7472" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/58-e5be8ce7abafe69c8de58b99e591bde5908de4b8a6e981b8e69387-http-1.png 829w, https://dongdonggcp.com/wp-content/uploads/2024/09/58-e5be8ce7abafe69c8de58b99e591bde5908de4b8a6e981b8e69387-http-1-240x300.png 240w, https://dongdonggcp.com/wp-content/uploads/2024/09/58-e5be8ce7abafe69c8de58b99e591bde5908de4b8a6e981b8e69387-http-1-819x1024.png 819w, https://dongdonggcp.com/wp-content/uploads/2024/09/58-e5be8ce7abafe69c8de58b99e591bde5908de4b8a6e981b8e69387-http-1-768x961.png 768w" sizes="(max-width: 829px) 100vw, 829px" /><figcaption class="wp-element-caption">後端服務命名並選擇 HTTP<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來設定「後端」，我們選擇我們建好的 IG 名稱 “apache-ig-1”，</p>



<p>你會看到它自動帶入 Port 80，這是我們在建立 IG 時就預先設定好的。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1844" height="670" src="https://dongdonggcp.com/wp-content/uploads/2024/09/59-e5be8ce7abafe981b8e69387-instance-group-e887aae58b95e5b8b6e585a5-port-80-1.png?w=1024" alt="後端選擇 Instance Group 自動帶入 Port 80" class="wp-image-7473" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/59-e5be8ce7abafe981b8e69387-instance-group-e887aae58b95e5b8b6e585a5-port-80-1.png 1844w, https://dongdonggcp.com/wp-content/uploads/2024/09/59-e5be8ce7abafe981b8e69387-instance-group-e887aae58b95e5b8b6e585a5-port-80-1-300x109.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/59-e5be8ce7abafe981b8e69387-instance-group-e887aae58b95e5b8b6e585a5-port-80-1-1024x372.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/59-e5be8ce7abafe981b8e69387-instance-group-e887aae58b95e5b8b6e585a5-port-80-1-768x279.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/59-e5be8ce7abafe981b8e69387-instance-group-e887aae58b95e5b8b6e585a5-port-80-1-1536x558.png 1536w" sizes="(max-width: 1844px) 100vw, 1844px" /><figcaption class="wp-element-caption">後端選擇 Instance Group 自動帶入 Port 80<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來是設定<a href="https://cloud.google.com/load-balancing/docs/backend-service#utilization_balancing_mode">平衡模式</a>，就是 LB 要怎麼分流的意思。</p>



<p>你可能會想，LB 不是平均分配流量到不同機器嗎？</p>



<p>為什麼還要設定如何分流？</p>



<p>要注意，同一個 IG 裡面的機器，是可以平均分配的，</p>



<p>這裡提到的是「不同 IG 之間的分流」，</p>



<p>它是說如果第一個 IG 已經達到最大利用率 (Utilization) 之後，</p>



<p>會再把流量送到第二個 IG，所以不同 IG 之間，收到的流量可能會不同。</p>



<p>而在這個範例當中，我們只有一個 IG，所以不需要特別設定，保持預設即可。</p>



<p>沒問題就按下 “Done”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1890" height="881" src="https://dongdonggcp.com/wp-content/uploads/2024/09/60-e5be8ce7abafe79a84e5b9b3e8a1a1e6a8a1e5bc8f-1.png?w=1024" alt="後端的平衡模式" class="wp-image-7475" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/60-e5be8ce7abafe79a84e5b9b3e8a1a1e6a8a1e5bc8f-1.png 1890w, https://dongdonggcp.com/wp-content/uploads/2024/09/60-e5be8ce7abafe79a84e5b9b3e8a1a1e6a8a1e5bc8f-1-300x140.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/60-e5be8ce7abafe79a84e5b9b3e8a1a1e6a8a1e5bc8f-1-1024x477.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/60-e5be8ce7abafe79a84e5b9b3e8a1a1e6a8a1e5bc8f-1-768x358.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/60-e5be8ce7abafe79a84e5b9b3e8a1a1e6a8a1e5bc8f-1-1536x716.png 1536w" sizes="(max-width: 1890px) 100vw, 1890px" /><figcaption class="wp-element-caption">後端的平衡模式<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來進入 Cloud CDN 的部分，我們就直接勾選 “Enable Cloud CDN”。</p>



<p>在 <a href="https://cloud.google.com/cdn/docs/caching#cache-modes">Cache Mode (快取模式)</a> 的部分，通常我們選 “Cache Static Content” 即可，</p>



<p>而首頁經常會變動，所以這個選項並不會 Cache 首頁，</p>



<p>但我們在這個範例只有首頁這張網頁，為了要示範 Cloud CDN 的效果，</p>



<p>所以故意去選 “Force Cache All Content”，</p>



<p>這樣我們到時候就可以看到首頁被 Cache 的樣子。</p>



<p>下面的 Client TTL 是指內容在用戶端瀏覽器存留的時間，</p>



<p>瀏覽器會記錄某個內容已經存在多久，</p>



<p>如果超過某個時間，例如一個小時，</p>



<p>它就會再次向 Cloud CDN 確認內容有沒有更新，</p>



<p>如果有更新，就會重新抓取，</p>



<p>如果沒更新，瀏覽器就會再使用原來的內容。</p>



<p>Default TTL，指的是內容放在 Cloud CDN 上存留的時間，</p>



<p>如果超過某個時間，例如一個小時，</p>



<p>它就會再次向原本的主機確認內容有沒有更新。</p>



<p>在這裡我們都保持預設即可。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1559" height="1012" src="https://dongdonggcp.com/wp-content/uploads/2024/09/61-e5be8ce7abafe5959fe794a8-cloud-cdn-e4b8a6e8a8ade5ae9ae5bfabe58f96e6a8a1e5bc8f-1.png?w=1024" alt="後端啟用 Cloud CDN 並設定快取模式" class="wp-image-7476" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/61-e5be8ce7abafe5959fe794a8-cloud-cdn-e4b8a6e8a8ade5ae9ae5bfabe58f96e6a8a1e5bc8f-1.png 1559w, https://dongdonggcp.com/wp-content/uploads/2024/09/61-e5be8ce7abafe5959fe794a8-cloud-cdn-e4b8a6e8a8ade5ae9ae5bfabe58f96e6a8a1e5bc8f-1-300x195.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/61-e5be8ce7abafe5959fe794a8-cloud-cdn-e4b8a6e8a8ade5ae9ae5bfabe58f96e6a8a1e5bc8f-1-1024x665.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/61-e5be8ce7abafe5959fe794a8-cloud-cdn-e4b8a6e8a8ade5ae9ae5bfabe58f96e6a8a1e5bc8f-1-768x499.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/61-e5be8ce7abafe5959fe794a8-cloud-cdn-e4b8a6e8a8ade5ae9ae5bfabe58f96e6a8a1e5bc8f-1-1536x997.png 1536w" sizes="(max-width: 1559px) 100vw, 1559px" /><figcaption class="wp-element-caption">後端啟用 Cloud CDN 並設定快取模式<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>再往下又出現一個 Health Check，</p>



<p>這跟我們在 IG 設定的 Health Check 有什麼不同？</p>



<p>這裡是要給 LB 判斷，這個後端的 IG 整體是否健康，</p>



<p>健康的話，才會送流量過來。</p>



<p>原本 IG 的 Health Check 是看主機是否健康，</p>



<p>不健康就會刪除重建機器。</p>



<p>所以同一個 Health Check，但在不同地方，發揮的效果是不同的喔！</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1784" height="406" src="https://dongdonggcp.com/wp-content/uploads/2024/09/62-e5be8ce7abafe981b8e69387-health-check-1.png?w=1024" alt="後端選擇 Health Check" class="wp-image-7478" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/62-e5be8ce7abafe981b8e69387-health-check-1.png 1784w, https://dongdonggcp.com/wp-content/uploads/2024/09/62-e5be8ce7abafe981b8e69387-health-check-1-300x68.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/62-e5be8ce7abafe981b8e69387-health-check-1-1024x233.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/62-e5be8ce7abafe981b8e69387-health-check-1-768x175.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/62-e5be8ce7abafe981b8e69387-health-check-1-1536x350.png 1536w" sizes="(max-width: 1784px) 100vw, 1784px" /><figcaption class="wp-element-caption">後端選擇 Health Check<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>再往下問你要不要啟動 Logging 功能，</p>



<p>這裡是指後端服務，有被存取的話都會記錄。</p>



<p>它還提供 Sample Rate (取樣率)，因為 Log 量可能會很大，</p>



<p>如果每一筆都記，資料量太大也會花很多錢，</p>



<p>所以它貼心地讓你設定 0~1 之間的數值，</p>



<p>例如 0.1 代表每 10 筆記錄 1 筆，就可以節省成本。</p>



<p>在這個範例只是要測試它的效果，所以我們還是設為 1。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="879" height="420" src="https://dongdonggcp.com/wp-content/uploads/2024/09/63-e5be8ce7abafe8a8ade5ae9a-logging-e58f96e6a8a3e78e87e782ba-1-1.png?w=879" alt="後端設定 Logging 取樣率為 1" class="wp-image-7479" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/63-e5be8ce7abafe8a8ade5ae9a-logging-e58f96e6a8a3e78e87e782ba-1-1.png 879w, https://dongdonggcp.com/wp-content/uploads/2024/09/63-e5be8ce7abafe8a8ade5ae9a-logging-e58f96e6a8a3e78e87e782ba-1-1-300x143.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/63-e5be8ce7abafe8a8ade5ae9a-logging-e58f96e6a8a3e78e87e782ba-1-1-768x367.png 768w" sizes="(max-width: 879px) 100vw, 879px" /><figcaption class="wp-element-caption">後端設定 Logging 取樣率為 1<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來這邊你可能看不出來，這是在設定什麼功能？</p>



<p>這其實就是 Cloud Armor，它預設就自動帶入 “<a href="https://cloud.google.com/armor/docs/security-policy-overview#:~:text=default%20security%20policy">Default Security Policy</a>”，</p>



<p>這個 Policy 的詳細內容就是下方的 “Name” 和 “Throttle Action Settings”，</p>



<p>就是節流閥的意思。</p>



<p>預設是說， 如果一分鐘之內，</p>



<p>每一個 IP 如果有超過 500 個 Request 進來，超過的部分就禁存存取。</p>



<p>我們在這個範例想要測試它的效果，所以就乾脆不要設定 “IP Address” 了，</p>



<p>我們改成 “ALL”，代表不分 IP，只要整個後端服務在一分鐘之內，</p>



<p>只超過 500 個 Request 就開始拒絕。</p>



<p>接著我按下 Create。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1625" height="1005" src="https://dongdonggcp.com/wp-content/uploads/2024/09/64-e5be8ce7abafe887aae58b95e5bbbae7ab8be9a090e8a8ade79a84-cloud-armor-security-policy-1.png?w=1024" alt="" class="wp-image-7480" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/64-e5be8ce7abafe887aae58b95e5bbbae7ab8be9a090e8a8ade79a84-cloud-armor-security-policy-1.png 1625w, https://dongdonggcp.com/wp-content/uploads/2024/09/64-e5be8ce7abafe887aae58b95e5bbbae7ab8be9a090e8a8ade79a84-cloud-armor-security-policy-1-300x186.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/64-e5be8ce7abafe887aae58b95e5bbbae7ab8be9a090e8a8ade79a84-cloud-armor-security-policy-1-1024x633.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/64-e5be8ce7abafe887aae58b95e5bbbae7ab8be9a090e8a8ade79a84-cloud-armor-security-policy-1-768x475.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/64-e5be8ce7abafe887aae58b95e5bbbae7ab8be9a090e8a8ade79a84-cloud-armor-security-policy-1-1536x950.png 1536w" sizes="(max-width: 1625px) 100vw, 1625px" /><figcaption class="wp-element-caption">後端自動建立預設的 Cloud Armor Security Policy<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>這樣我們 LB 後端就設定好了，接下來進入 Routing Rules。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1836" height="983" src="https://dongdonggcp.com/wp-content/uploads/2024/09/65-e5be8ce7abafe8a8ade5ae9ae5ae8ce68890efbc8ce980b2e585a5-routing-rules-1.png?w=1024" alt="後端設定完成，進入 Routing Rules" class="wp-image-7482" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/65-e5be8ce7abafe8a8ade5ae9ae5ae8ce68890efbc8ce980b2e585a5-routing-rules-1.png 1836w, https://dongdonggcp.com/wp-content/uploads/2024/09/65-e5be8ce7abafe8a8ade5ae9ae5ae8ce68890efbc8ce980b2e585a5-routing-rules-1-300x161.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/65-e5be8ce7abafe8a8ade5ae9ae5ae8ce68890efbc8ce980b2e585a5-routing-rules-1-1024x548.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/65-e5be8ce7abafe8a8ade5ae9ae5ae8ce68890efbc8ce980b2e585a5-routing-rules-1-768x411.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/65-e5be8ce7abafe8a8ade5ae9ae5ae8ce68890efbc8ce980b2e585a5-routing-rules-1-1536x822.png 1536w" sizes="(max-width: 1836px) 100vw, 1836px" /><figcaption class="wp-element-caption">後端設定完成，進入 Routing Rules<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>4.分流規則</p>



<p>因為我們只有一個前端和一個後端服務，</p>



<p>從頭到尾只有一條路，所以不用再做任何設定。</p>



<p>如果你有多個後端，例如有 web1.dongdonggcp.com 和 web2.dongdonggcp.com，</p>



<p>那我們就可以設定 LB，讓它依照用戶輸入的網址，</p>



<p>流向不同的後端主機。</p>



<p>在這裡我們可以直接點擊 “Review And Finalize”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1858" height="889" src="https://dongdonggcp.com/wp-content/uploads/2024/09/66-e7a2bae8aa8d-routing-rulesefbc8ce980b2e585a5e69c80e7b582e6aaa2e69fa5-1.png?w=1024" alt="確認 Routing Rules，進入最終檢查" class="wp-image-7483" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/66-e7a2bae8aa8d-routing-rulesefbc8ce980b2e585a5e69c80e7b582e6aaa2e69fa5-1.png 1858w, https://dongdonggcp.com/wp-content/uploads/2024/09/66-e7a2bae8aa8d-routing-rulesefbc8ce980b2e585a5e69c80e7b582e6aaa2e69fa5-1-300x144.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/66-e7a2bae8aa8d-routing-rulesefbc8ce980b2e585a5e69c80e7b582e6aaa2e69fa5-1-1024x490.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/66-e7a2bae8aa8d-routing-rulesefbc8ce980b2e585a5e69c80e7b582e6aaa2e69fa5-1-768x367.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/66-e7a2bae8aa8d-routing-rulesefbc8ce980b2e585a5e69c80e7b582e6aaa2e69fa5-1-1536x735.png 1536w" sizes="(max-width: 1858px) 100vw, 1858px" /><figcaption class="wp-element-caption">確認 Routing Rules，進入最終檢查<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們可以在這裡給 LB 做最終檢查，看看有沒有設定錯誤的地方，</p>



<p>比較重要的地方例如：前端是 HTTP 或 HTTPS、憑證是否有設定好，</p>



<p>以及後端 IG 是否正確、是否使用正確的 Port 等等。</p>



<p>因為設錯要再改會很花時間，所以建議多看一下，沒問題我們就按下 “Create”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1837" height="1038" src="https://dongdonggcp.com/wp-content/uploads/2024/09/67-e7a2bae8aa8d-load-balancer-e695b4e9ab94e8a8ade5ae9ae4b8a6e5bbbae7ab8b-1.png?w=1024" alt="確認 Load Balancer 整體設定並建立" class="wp-image-7485" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/67-e7a2bae8aa8d-load-balancer-e695b4e9ab94e8a8ade5ae9ae4b8a6e5bbbae7ab8b-1.png 1837w, https://dongdonggcp.com/wp-content/uploads/2024/09/67-e7a2bae8aa8d-load-balancer-e695b4e9ab94e8a8ade5ae9ae4b8a6e5bbbae7ab8b-1-300x170.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/67-e7a2bae8aa8d-load-balancer-e695b4e9ab94e8a8ade5ae9ae4b8a6e5bbbae7ab8b-1-1024x579.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/67-e7a2bae8aa8d-load-balancer-e695b4e9ab94e8a8ade5ae9ae4b8a6e5bbbae7ab8b-1-768x434.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/67-e7a2bae8aa8d-load-balancer-e695b4e9ab94e8a8ade5ae9ae4b8a6e5bbbae7ab8b-1-1536x868.png 1536w" sizes="(max-width: 1837px) 100vw, 1837px" /><figcaption class="wp-element-caption">確認 Load Balancer 整體設定並建立<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在等待建立過程當中，你會看到它正在轉圈圈，</p>



<p>大約 2 分鐘就會建立完成，但實際上還沒全部完成喔，後面還有一些步驟。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="987" height="449" src="https://dongdonggcp.com/wp-content/uploads/2024/09/68-e7ad89e5be85e5bbbae7ab8b-load-balancer-1.png?w=987" alt="等待建立 Load Balancer" class="wp-image-7486" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/68-e7ad89e5be85e5bbbae7ab8b-load-balancer-1.png 987w, https://dongdonggcp.com/wp-content/uploads/2024/09/68-e7ad89e5be85e5bbbae7ab8b-load-balancer-1-300x136.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/68-e7ad89e5be85e5bbbae7ab8b-load-balancer-1-768x349.png 768w" sizes="(max-width: 987px) 100vw, 987px" /><figcaption class="wp-element-caption">等待建立 Load Balancer<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>現在我們看到兩個 LB 顯示為綠色勾勾，</p>



<p>除了我們設定的 “lb-1”，還有一個叫 “fe-1-redirect”，</p>



<p>就是幫我們把 HTTP 轉發到 HTTPS 的功能。</p>



<p>我們可以點擊 “lb-1” 進去看看。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1233" height="263" src="https://dongdonggcp.com/wp-content/uploads/2024/09/69-e7a2bae8aa8d-load-balancer-e5bbbae7ab8be5ae8ce68890-1.png?w=1024" alt="確認 Load Balancer 建立完成" class="wp-image-7488" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/69-e7a2bae8aa8d-load-balancer-e5bbbae7ab8be5ae8ce68890-1.png 1233w, https://dongdonggcp.com/wp-content/uploads/2024/09/69-e7a2bae8aa8d-load-balancer-e5bbbae7ab8be5ae8ce68890-1-300x64.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/69-e7a2bae8aa8d-load-balancer-e5bbbae7ab8be5ae8ce68890-1-1024x218.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/69-e7a2bae8aa8d-load-balancer-e5bbbae7ab8be5ae8ce68890-1-768x164.png 768w" sizes="(max-width: 1233px) 100vw, 1233px" /><figcaption class="wp-element-caption">確認 Load Balancer 建立完成<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>你會看到我們剛設定好的憑證，再點進去會看到 “Provisioning” 的狀態，</p>



<p>再往下查看網域，顯示為 “<a href="https://cloud.google.com/load-balancing/docs/ssl-certificates/troubleshooting">Failed_Not_Visible</a>” 的狀態，</p>



<p>因為你如果使用 GCP 的免費憑證，它會要求你的網域必須解析到 LB 的 IP。</p>



<p>如果沒有就會呈現這個狀態，直到你去設定 DNS，讓它解析成功為止。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1815" height="746" src="https://dongdonggcp.com/wp-content/uploads/2024/09/70-e5be9e-load-balancer-e7a2bae8aa8de68691e8ad89e69c89e5958fe9a18c-1.png?w=1024" alt="從 Load Balancer 確認憑證有問題" class="wp-image-7489" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/70-e5be9e-load-balancer-e7a2bae8aa8de68691e8ad89e69c89e5958fe9a18c-1.png 1815w, https://dongdonggcp.com/wp-content/uploads/2024/09/70-e5be9e-load-balancer-e7a2bae8aa8de68691e8ad89e69c89e5958fe9a18c-1-300x123.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/70-e5be9e-load-balancer-e7a2bae8aa8de68691e8ad89e69c89e5958fe9a18c-1-1024x421.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/70-e5be9e-load-balancer-e7a2bae8aa8de68691e8ad89e69c89e5958fe9a18c-1-768x316.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/70-e5be9e-load-balancer-e7a2bae8aa8de68691e8ad89e69c89e5958fe9a18c-1-1536x631.png 1536w" sizes="(max-width: 1815px) 100vw, 1815px" /><figcaption class="wp-element-caption">從 Load Balancer 確認憑證有問題<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>5.設定 DNS 網域解析到你 LB 的 IP 位址</p>



<p>DNS 的設定界面不一定在 GCP 上喔，</p>



<p>這裡指的是你註冊 DNS (購買網域) 的地方，</p>



<p>你可能用的是 <a href="https://domain.hinet.net/#/">Hinet 的 DNS</a>，或是國外的 <a href="https://tw.godaddy.com/">GoDaddy</a> 或 <a href="https://www.namecheap.com/">Namecheap</a> 等等。</p>



<p>像我是在 GoDaddy 註冊 DNS 的，但是我已經<a href="https://cloud.google.com/dns/docs/migrating">轉移管理權限到 Cloud DNS</a> 了。</p>



<p>我就直接從 Cloud DNS 點擊進入我的網域。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1807" height="986" src="https://dongdonggcp.com/wp-content/uploads/2024/09/71-e980b2e585a5-cloud-dns-e8a8ade5ae9a-1.png?w=1024" alt="進入 Cloud DNS 設定" class="wp-image-7490" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/71-e980b2e585a5-cloud-dns-e8a8ade5ae9a-1.png 1807w, https://dongdonggcp.com/wp-content/uploads/2024/09/71-e980b2e585a5-cloud-dns-e8a8ade5ae9a-1-300x164.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/71-e980b2e585a5-cloud-dns-e8a8ade5ae9a-1-1024x559.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/71-e980b2e585a5-cloud-dns-e8a8ade5ae9a-1-768x419.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/71-e980b2e585a5-cloud-dns-e8a8ade5ae9a-1-1536x838.png 1536w" sizes="(max-width: 1807px) 100vw, 1807px" /><figcaption class="wp-element-caption">進入 Cloud DNS 設定<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>在 DNS Name 的部分，輸入子網域就好了，例如 “web1”。</p>



<p>而 Resource Record Type，我們是要指向主機的 IP 位址，</p>



<p>選擇 A Record，其他保持預設。</p>



<p>下方則是輸入 LB 的 IP 位址，按下 Create。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1852" height="808" src="https://dongdonggcp.com/wp-content/uploads/2024/09/72-e696b0e5a29e-a-record-e68c87e59091-load-balancer-ip-1.png?w=1024" alt="新增 A Record 指向 Load Balancer IP" class="wp-image-7492" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/72-e696b0e5a29e-a-record-e68c87e59091-load-balancer-ip-1.png 1852w, https://dongdonggcp.com/wp-content/uploads/2024/09/72-e696b0e5a29e-a-record-e68c87e59091-load-balancer-ip-1-300x131.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/72-e696b0e5a29e-a-record-e68c87e59091-load-balancer-ip-1-1024x447.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/72-e696b0e5a29e-a-record-e68c87e59091-load-balancer-ip-1-768x335.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/72-e696b0e5a29e-a-record-e68c87e59091-load-balancer-ip-1-1536x670.png 1536w" sizes="(max-width: 1852px) 100vw, 1852px" /><figcaption class="wp-element-caption">新增 A Record 指向 Load Balancer IP<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h1 class="wp-block-heading">三、檢查 Load Balancer 各項設定</h1>



<h2 class="wp-block-heading">(一) SSL 憑證</h2>



<p>當我們設定好 DNS，需要一點時間等它生效，</p>



<p>我們可以用 <a href="https://toolbox.googleapps.com/apps/main/">Google Admin Toolbox</a> 檢查，</p>



<p>這是一個免費的工具，任何人都可以直接使用。</p>



<p>我們直接點擊 “Dig”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1470" height="1030" src="https://dongdonggcp.com/wp-content/uploads/2024/09/73-e5898de5be80-google-admin-toolbox-dig-e58a9fe883bd-1.png?w=1024" alt="前往 Google Admin Toolbox Dig 功能" class="wp-image-7493" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/73-e5898de5be80-google-admin-toolbox-dig-e58a9fe883bd-1.png 1470w, https://dongdonggcp.com/wp-content/uploads/2024/09/73-e5898de5be80-google-admin-toolbox-dig-e58a9fe883bd-1-300x210.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/73-e5898de5be80-google-admin-toolbox-dig-e58a9fe883bd-1-1024x717.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/73-e5898de5be80-google-admin-toolbox-dig-e58a9fe883bd-1-768x538.png 768w" sizes="(max-width: 1470px) 100vw, 1470px" /><figcaption class="wp-element-caption">前往 Google Admin Toolbox Dig 功能<br>截圖自 <a href="https://toolbox.googleapps.com/apps/main/">Google Admin Toolbox</a></figcaption></figure>



<p>接下來直接在 “名稱” 裡輸入網域，然後點擊 “A”，</p>



<p>它就會解析這個網域是否指向某個 IP 位址，</p>



<p>像我在輸入之後，它就解析到 LB 的 IP 位址，代表 DNS 已經生效了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1851" height="1035" src="https://dongdonggcp.com/wp-content/uploads/2024/09/74-e7a2bae8aa8de7b6b2e59f9fe8a7a3e69e90e588b0-load-balancer-e79a84-ip-1.png?w=1024" alt="確認網域解析到 Load Balancer 的 IP" class="wp-image-7495" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/74-e7a2bae8aa8de7b6b2e59f9fe8a7a3e69e90e588b0-load-balancer-e79a84-ip-1.png 1851w, https://dongdonggcp.com/wp-content/uploads/2024/09/74-e7a2bae8aa8de7b6b2e59f9fe8a7a3e69e90e588b0-load-balancer-e79a84-ip-1-300x168.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/74-e7a2bae8aa8de7b6b2e59f9fe8a7a3e69e90e588b0-load-balancer-e79a84-ip-1-1024x573.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/74-e7a2bae8aa8de7b6b2e59f9fe8a7a3e69e90e588b0-load-balancer-e79a84-ip-1-768x429.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/74-e7a2bae8aa8de7b6b2e59f9fe8a7a3e69e90e588b0-load-balancer-e79a84-ip-1-1536x859.png 1536w" sizes="(max-width: 1851px) 100vw, 1851px" /><figcaption class="wp-element-caption">確認網域解析到 Load Balancer 的 IP<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們再回去看憑證的狀態，</p>



<p>因為 Google 也確認我的網域有解析到正確的 IP 位址，</p>



<p>所以 SSL 憑證就變成 “Active” 的狀態。</p>



<p>你會看到它的到期日是 2024/12/1，但是不用擔心，等到那一天，</p>



<p>憑證會再自動展期，我們什麼事情都不用做。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="958" height="853" src="https://dongdonggcp.com/wp-content/uploads/2024/09/75-e68691e8ad89e8ae8ae68890-active-e78b80e6858b-1.png?w=958" alt="憑證變成 Active 狀態" class="wp-image-7496" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/75-e68691e8ad89e8ae8ae68890-active-e78b80e6858b-1.png 958w, https://dongdonggcp.com/wp-content/uploads/2024/09/75-e68691e8ad89e8ae8ae68890-active-e78b80e6858b-1-300x267.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/75-e68691e8ad89e8ae8ae68890-active-e78b80e6858b-1-768x684.png 768w" sizes="(max-width: 958px) 100vw, 958px" /><figcaption class="wp-element-caption">憑證變成 Active 狀態<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>最後我們就可以在瀏覽器輸入網址，會看到網頁終於顯示出來了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="699" height="195" src="https://dongdonggcp.com/wp-content/uploads/2024/09/76-e7a2bae8aa8de7b6b2e9a081e6ada3e5b8b8e9a1afe7a4ba-1.png?w=699" alt="確認網頁正常顯示" class="wp-image-7498" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/76-e7a2bae8aa8de7b6b2e9a081e6ada3e5b8b8e9a1afe7a4ba-1.png 699w, https://dongdonggcp.com/wp-content/uploads/2024/09/76-e7a2bae8aa8de7b6b2e9a081e6ada3e5b8b8e9a1afe7a4ba-1-300x84.png 300w" sizes="(max-width: 699px) 100vw, 699px" /><figcaption class="wp-element-caption">確認網頁正常顯示<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們可以再點擊網址左邊的圖示，再點擊「已建立安全連線」，</p>



<p>會展開安全性的頁面，看到「憑證有效」，</p>



<p>再點擊下去，就會看到完整的憑證資訊。</p>



<p>其中 Google Trust Services 就是 Google 成立的根憑證授權單位，</p>



<p>代表 Google 背書證明憑證是有效的。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1853" height="614" src="https://dongdonggcp.com/wp-content/uploads/2024/09/77-e5be9e-chrome-e7808fe8a6bde599a8e69fa5e588b0e68691e8ad89e698afe69c89e69588e79a84-1.png?w=1024" alt="" class="wp-image-7499" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/77-e5be9e-chrome-e7808fe8a6bde599a8e69fa5e588b0e68691e8ad89e698afe69c89e69588e79a84-1.png 1853w, https://dongdonggcp.com/wp-content/uploads/2024/09/77-e5be9e-chrome-e7808fe8a6bde599a8e69fa5e588b0e68691e8ad89e698afe69c89e69588e79a84-1-300x99.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/77-e5be9e-chrome-e7808fe8a6bde599a8e69fa5e588b0e68691e8ad89e698afe69c89e69588e79a84-1-1024x339.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/77-e5be9e-chrome-e7808fe8a6bde599a8e69fa5e588b0e68691e8ad89e698afe69c89e69588e79a84-1-768x254.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/77-e5be9e-chrome-e7808fe8a6bde599a8e69fa5e588b0e68691e8ad89e698afe69c89e69588e79a84-1-1536x509.png 1536w" sizes="(max-width: 1853px) 100vw, 1853px" /><figcaption class="wp-element-caption">從 Chrome 瀏覽器查到憑證是有效的<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>還可以再點擊詳細資訊，然後點「序號」，可以看到「欄位值」顯示序號。</p>



<p>這裡可以確認這個憑證，和我們在 LB 上憑證頁面的序號一模一樣，</p>



<p>證明這真的是我剛建立的憑證。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1906" height="993" src="https://dongdonggcp.com/wp-content/uploads/2024/09/78-e7a2bae8aa8de68691e8ad89e698afe795b6e5889de59ca8-load-balancer-e4b88ae5bbbae7ab8be79a84-1.png?w=1024" alt="確認憑證是當初在 Load Balancer 上建立的" class="wp-image-7500" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/78-e7a2bae8aa8de68691e8ad89e698afe795b6e5889de59ca8-load-balancer-e4b88ae5bbbae7ab8be79a84-1.png 1906w, https://dongdonggcp.com/wp-content/uploads/2024/09/78-e7a2bae8aa8de68691e8ad89e698afe795b6e5889de59ca8-load-balancer-e4b88ae5bbbae7ab8be79a84-1-300x156.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/78-e7a2bae8aa8de68691e8ad89e698afe795b6e5889de59ca8-load-balancer-e4b88ae5bbbae7ab8be79a84-1-1024x533.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/78-e7a2bae8aa8de68691e8ad89e698afe795b6e5889de59ca8-load-balancer-e4b88ae5bbbae7ab8be79a84-1-768x400.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/78-e7a2bae8aa8de68691e8ad89e698afe795b6e5889de59ca8-load-balancer-e4b88ae5bbbae7ab8be79a84-1-1536x800.png 1536w" sizes="(max-width: 1906px) 100vw, 1906px" /><figcaption class="wp-element-caption">確認憑證是當初在 Load Balancer 上建立的<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(二) Cloud CDN</h2>



<p>因為我們在後端還有勾選 Cloud CDN，</p>



<p>我們可以在 Chrome 瀏覽器最右邊點擊三個小點，</p>



<p>再點擊「更多工具」=&gt;「開發人員工具」，來測試 CDN 的效果。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1640" height="997" src="https://dongdonggcp.com/wp-content/uploads/2024/09/79-e5959fe58b95-chrome-e9968be799bce4babae593a1e5b7a5e585b7-1.png?w=1024" alt="啟動 Chrome 開發人員工具" class="wp-image-7502" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/79-e5959fe58b95-chrome-e9968be799bce4babae593a1e5b7a5e585b7-1.png 1640w, https://dongdonggcp.com/wp-content/uploads/2024/09/79-e5959fe58b95-chrome-e9968be799bce4babae593a1e5b7a5e585b7-1-300x182.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/79-e5959fe58b95-chrome-e9968be799bce4babae593a1e5b7a5e585b7-1-1024x623.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/79-e5959fe58b95-chrome-e9968be799bce4babae593a1e5b7a5e585b7-1-768x467.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/79-e5959fe58b95-chrome-e9968be799bce4babae593a1e5b7a5e585b7-1-1536x934.png 1536w" sizes="(max-width: 1640px) 100vw, 1640px" /><figcaption class="wp-element-caption">啟動 Chrome 開發人員工具<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>你會看到右邊顯示一堆按鈕，這時我們再重新整理網頁。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1853" height="873" src="https://dongdonggcp.com/wp-content/uploads/2024/09/80-e9878de696b0e695b4e79086e7b6b2e9a081e4bba5e69fa5e79c8be5b081e58c85e8b387e8a88a-1.png?w=1024" alt="" class="wp-image-7503" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/80-e9878de696b0e695b4e79086e7b6b2e9a081e4bba5e69fa5e79c8be5b081e58c85e8b387e8a88a-1.png 1853w, https://dongdonggcp.com/wp-content/uploads/2024/09/80-e9878de696b0e695b4e79086e7b6b2e9a081e4bba5e69fa5e79c8be5b081e58c85e8b387e8a88a-1-300x141.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/80-e9878de696b0e695b4e79086e7b6b2e9a081e4bba5e69fa5e79c8be5b081e58c85e8b387e8a88a-1-1024x482.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/80-e9878de696b0e695b4e79086e7b6b2e9a081e4bba5e69fa5e79c8be5b081e58c85e8b387e8a88a-1-768x362.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/80-e9878de696b0e695b4e79086e7b6b2e9a081e4bba5e69fa5e79c8be5b081e58c85e8b387e8a88a-1-1536x724.png 1536w" sizes="(max-width: 1853px) 100vw, 1853px" /><figcaption class="wp-element-caption">重新整理網頁以查看封包資訊<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>你會看到右邊的圖表區域產生變化，</p>



<p>我們再點擊 Network =&gt; Index.html =&gt; Headers 會看到詳細訊息，</p>



<p>例如 Status Code 為 “304 Not Modified”，平常我們看到應該是 “200 OK”，</p>



<p>304 則代表 Index.html 這個網頁已經被 Cloud CDN 暫存，</p>



<p>瀏覽器確認內容是一樣的，沒有更新，</p>



<p>所以就會繼續使用本機的版本。</p>



<p>再往下看 Cache-Control 的部分，看到 “max-age=3600”，</p>



<p>表示這個內容會在瀏覽器存在一個小時，</p>



<p>跟我們在 Cloud CDN 設定的 Client TTL 長度是相同的。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1514" height="1035" src="https://dongdonggcp.com/wp-content/uploads/2024/09/110-e7a2bae8aa8de7b6b2e9a081e69c89e8a2ab-cloud-cdn-cache-1.png?w=1024" alt="確認網頁有被 Cloud CDN Cache" class="wp-image-7506" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/110-e7a2bae8aa8de7b6b2e9a081e69c89e8a2ab-cloud-cdn-cache-1.png 1514w, https://dongdonggcp.com/wp-content/uploads/2024/09/110-e7a2bae8aa8de7b6b2e9a081e69c89e8a2ab-cloud-cdn-cache-1-300x205.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/110-e7a2bae8aa8de7b6b2e9a081e69c89e8a2ab-cloud-cdn-cache-1-1024x700.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/110-e7a2bae8aa8de7b6b2e9a081e69c89e8a2ab-cloud-cdn-cache-1-768x525.png 768w" sizes="(max-width: 1514px) 100vw, 1514px" /><figcaption class="wp-element-caption">確認網頁有被 Cloud CDN Cache<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們也可以從 Cloud Logging 來看，點擊 “Application Load Balancer”，&nbsp;</p>



<p>然後展開狀態為 304 的 Log，可以看到一些關於 Cloud CDN 的內容，</p>



<p>例如 “CacheLookup: True” 代表 CDN 有查詢該內容是否在 CDN 節點上，</p>



<p>只代表有執行”查詢”動作。</p>



<p>而 “CacheHit: True” 則代表找到了，俗稱「快取命中」。</p>



<p>最下方還能看到 “StatusDetails: “Response_From_Cache””，</p>



<p>代表內容是從 CDN 節點回覆的。</p>



<p>由此可證明我們的 Cloud CDN 有設定正確，讓它能夠有效運作。</p>



<h2 class="wp-block-heading">(三) Cloud Armor</h2>



<p>我們直接使用 Cloud Shell 來做為發送流量的機器，</p>



<p>點擊右上角的圖示：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1850" height="846" src="https://dongdonggcp.com/wp-content/uploads/2024/09/81-e5959fe58b95-cloud-shell-2.png?w=1024" alt="啟動 Cloud Shell" class="wp-image-7508" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/81-e5959fe58b95-cloud-shell-2.png 1850w, https://dongdonggcp.com/wp-content/uploads/2024/09/81-e5959fe58b95-cloud-shell-2-300x137.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/81-e5959fe58b95-cloud-shell-2-1024x468.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/81-e5959fe58b95-cloud-shell-2-768x351.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/81-e5959fe58b95-cloud-shell-2-1536x702.png 1536w" sizes="(max-width: 1850px) 100vw, 1850px" /><figcaption class="wp-element-caption">啟動 Cloud Shell<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>待 Cloud Shell 視窗開啟完成後，輸入以下指令，更新套件位置，</p>



<p>這樣才能讓它從最新的位置自動下載並安裝軟體。</p>



<p>sudo apt-get update</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="902" height="858" src="https://dongdonggcp.com/wp-content/uploads/2024/09/82-cloud-shell-e69bb4e696b0e5a597e4bbb6e4bd8de7bdae-1.png?w=902" alt="Cloud Shell 更新套件位置" class="wp-image-7510" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/82-cloud-shell-e69bb4e696b0e5a597e4bbb6e4bd8de7bdae-1.png 902w, https://dongdonggcp.com/wp-content/uploads/2024/09/82-cloud-shell-e69bb4e696b0e5a597e4bbb6e4bd8de7bdae-1-300x285.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/82-cloud-shell-e69bb4e696b0e5a597e4bbb6e4bd8de7bdae-1-768x731.png 768w" sizes="(max-width: 902px) 100vw, 902px" /><figcaption class="wp-element-caption">Cloud Shell 更新套件位置<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>接下來安裝壓力測試軟體 Siege：&nbsp;</p>



<p>sudo apt-get install siege</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="897" height="542" src="https://dongdonggcp.com/wp-content/uploads/2024/09/83-e5ae89e8a39de5a393e58a9be6b8ace8a9a6e8bb9fe9ab94-siege-1.png?w=897" alt="安裝壓力測試軟體 Siege" class="wp-image-7511" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/83-e5ae89e8a39de5a393e58a9be6b8ace8a9a6e8bb9fe9ab94-siege-1.png 897w, https://dongdonggcp.com/wp-content/uploads/2024/09/83-e5ae89e8a39de5a393e58a9be6b8ace8a9a6e8bb9fe9ab94-siege-1-300x181.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/83-e5ae89e8a39de5a393e58a9be6b8ace8a9a6e8bb9fe9ab94-siege-1-768x464.png 768w" sizes="(max-width: 897px) 100vw, 897px" /><figcaption class="wp-element-caption">安裝壓力測試軟體 Siege<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們在前面後端設定中，是設定每分鐘超過 500 的 Request，超求就禁止存取。</p>



<p>所以我們故意設定發出 550 個 Request，讓它超過 500 次，指令如下：</p>



<p>siege -c 5 -r 110 <a href="https://web1.dongdonggcp.com/">https://web1.dongdonggcp.com/</a></p>



<p>c 代表同時執行多少個執行緒。</p>



<p>r 代表每個執行緒發出的請求。</p>



<p>兩者相乘總共 550 次。</p>



<p>由於次數不高，差不多 4 秒左右就已送出 550 個 Request 了。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1089" height="369" src="https://dongdonggcp.com/wp-content/uploads/2024/09/84-e4bdbfe794a8-siege-e799bce98081-550-e6aca1-request-1.png?w=1024" alt="使用 Siege 發送 550 次 Request" class="wp-image-7513" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/84-e4bdbfe794a8-siege-e799bce98081-550-e6aca1-request-1.png 1089w, https://dongdonggcp.com/wp-content/uploads/2024/09/84-e4bdbfe794a8-siege-e799bce98081-550-e6aca1-request-1-300x102.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/84-e4bdbfe794a8-siege-e799bce98081-550-e6aca1-request-1-1024x347.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/84-e4bdbfe794a8-siege-e799bce98081-550-e6aca1-request-1-768x260.png 768w" sizes="(max-width: 1089px) 100vw, 1089px" /><figcaption class="wp-element-caption">使用 Siege 發送 550 次 Request<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>然後我們去看 Cloud Armor，也看到它有一個 Policy 在運作，</p>



<p>而且已經套用到 “bk-1” 這個後端。</p>



<p>接著我們再點擊 Policy 名稱：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1807" height="654" src="https://dongdonggcp.com/wp-content/uploads/2024/09/85-e69fa5e79c8b-cloud-armor-security-policy-1.png?w=1024" alt="查看 Cloud Armor Security Policy
截圖自 GCP Console" class="wp-image-7514" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/85-e69fa5e79c8b-cloud-armor-security-policy-1.png 1807w, https://dongdonggcp.com/wp-content/uploads/2024/09/85-e69fa5e79c8b-cloud-armor-security-policy-1-300x109.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/85-e69fa5e79c8b-cloud-armor-security-policy-1-1024x371.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/85-e69fa5e79c8b-cloud-armor-security-policy-1-768x278.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/85-e69fa5e79c8b-cloud-armor-security-policy-1-1536x556.png 1536w" sizes="(max-width: 1807px) 100vw, 1807px" /><figcaption class="wp-element-caption">查看 Cloud Armor Security Policy<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>進去後看到 Logs 的頁籤，點擊該頁籤，再點擊 “View Policy Logs”：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1716" height="878" src="https://dongdonggcp.com/wp-content/uploads/2024/09/86-e69fa5e79c8b-cloud-armor-policy-logs-1.png?w=1024" alt="" class="wp-image-7515" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/86-e69fa5e79c8b-cloud-armor-policy-logs-1.png 1716w, https://dongdonggcp.com/wp-content/uploads/2024/09/86-e69fa5e79c8b-cloud-armor-policy-logs-1-300x153.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/86-e69fa5e79c8b-cloud-armor-policy-logs-1-1024x524.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/86-e69fa5e79c8b-cloud-armor-policy-logs-1-768x393.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/86-e69fa5e79c8b-cloud-armor-policy-logs-1-1536x786.png 1536w" sizes="(max-width: 1716px) 100vw, 1716px" /><figcaption class="wp-element-caption">查看 Cloud Armor Policy Logs<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>你會看到它開打 Cloud Logging 的畫面，</p>



<p>並且自動套用查詢和 Cloud Armor Policy 有關的 Log 語法，</p>



<p>看到 ALB 總共收到 550 次 Request，</p>



<p>其中 507 次是正確的，而另外 43 次則有 403 錯誤。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1881" height="1013" src="https://dongdonggcp.com/wp-content/uploads/2024/09/87-e5be9e-cloud-logging-e79c8be588b0e799bce587ba-550-e6aca1-requestefbc8ce69c89-403-e98cafe8aaa4-1.png?w=1024" alt="從 Cloud Logging 看到發出 550 次 Request，有 403 錯誤" class="wp-image-7517" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/87-e5be9e-cloud-logging-e79c8be588b0e799bce587ba-550-e6aca1-requestefbc8ce69c89-403-e98cafe8aaa4-1.png 1881w, https://dongdonggcp.com/wp-content/uploads/2024/09/87-e5be9e-cloud-logging-e79c8be588b0e799bce587ba-550-e6aca1-requestefbc8ce69c89-403-e98cafe8aaa4-1-300x162.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/87-e5be9e-cloud-logging-e79c8be588b0e799bce587ba-550-e6aca1-requestefbc8ce69c89-403-e98cafe8aaa4-1-1024x551.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/87-e5be9e-cloud-logging-e79c8be588b0e799bce587ba-550-e6aca1-requestefbc8ce69c89-403-e98cafe8aaa4-1-768x414.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/87-e5be9e-cloud-logging-e79c8be588b0e799bce587ba-550-e6aca1-requestefbc8ce69c89-403-e98cafe8aaa4-1-1536x827.png 1536w" sizes="(max-width: 1881px) 100vw, 1881px" /><figcaption class="wp-element-caption">從 Cloud Logging 看到發出 550 次 Request，有 403 錯誤<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們再點開其中一筆 Log，</p>



<p>看到 Request 被 Cloud Armor 擋住，</p>



<p>它在 “EnforcedSecurityPolicy” 有相關細節，</p>



<p>說明現在已經觸發 “Throttle” 節流動作，</p>



<p>動作執行的結果是 “DENY” 拒絕 Request。</p>



<p>代表 Cloud Armor 的設定是有生效的，</p>



<p>對於超過上限的 Request 有執行阻擋動作。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1239" height="1032" src="https://dongdonggcp.com/wp-content/uploads/2024/09/88-e79c8be588b0-cloud-armor-e998bbe6938b-request-e79a84e8a898e98c84-1.png?w=1024" alt="看到 Cloud Armor 阻擋 Request 的記錄" class="wp-image-7520" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/88-e79c8be588b0-cloud-armor-e998bbe6938b-request-e79a84e8a898e98c84-1.png 1239w, https://dongdonggcp.com/wp-content/uploads/2024/09/88-e79c8be588b0-cloud-armor-e998bbe6938b-request-e79a84e8a898e98c84-1-300x250.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/88-e79c8be588b0-cloud-armor-e998bbe6938b-request-e79a84e8a898e98c84-1-1024x853.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/88-e79c8be588b0-cloud-armor-e998bbe6938b-request-e79a84e8a898e98c84-1-768x640.png 768w" sizes="(max-width: 1239px) 100vw, 1239px" /><figcaption class="wp-element-caption">看到 Cloud Armor 阻擋 Request 的記錄<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(四) Autoscale 功能</h2>



<p>最後我們要確認最重要的功能，</p>



<p>到底 Autoscale 能不能如期擴充機器。&nbsp;</p>



<p>我們這次就不設上限，每秒 250 個 Request，</p>



<p>一直打到它長出新的機器為止：</p>



<p>siege -c 250 <a href="https://web1.dongdonggcp.com/">https://web1.dongdonggcp.com/</a></p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1234" height="80" src="https://dongdonggcp.com/wp-content/uploads/2024/09/89-e4bdbfe794a8-siege-e799bce98081e6af8fe7a792-250-e5808b-request-1.png?w=1024" alt="使用 Siege 發送每秒 250 個 Request" class="wp-image-7522" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/89-e4bdbfe794a8-siege-e799bce98081e6af8fe7a792-250-e5808b-request-1.png 1234w, https://dongdonggcp.com/wp-content/uploads/2024/09/89-e4bdbfe794a8-siege-e799bce98081e6af8fe7a792-250-e5808b-request-1-300x19.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/89-e4bdbfe794a8-siege-e799bce98081e6af8fe7a792-250-e5808b-request-1-1024x66.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/89-e4bdbfe794a8-siege-e799bce98081e6af8fe7a792-250-e5808b-request-1-768x50.png 768w" sizes="(max-width: 1234px) 100vw, 1234px" /><figcaption class="wp-element-caption">使用 Siege 發送每秒 250 個 Request<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>執行之後，游標會不見，是正確的，表示現在正在發送流量。</p>



<p>我們可以直接去 IG 的頁面觀查，點擊 IG 的名字。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1668" height="805" src="https://dongdonggcp.com/wp-content/uploads/2024/09/90-e980b2e585a5-instance-group-1.png?w=1024" alt="" class="wp-image-7524" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/90-e980b2e585a5-instance-group-1.png 1668w, https://dongdonggcp.com/wp-content/uploads/2024/09/90-e980b2e585a5-instance-group-1-300x145.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/90-e980b2e585a5-instance-group-1-1024x494.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/90-e980b2e585a5-instance-group-1-768x371.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/90-e980b2e585a5-instance-group-1-1536x741.png 1536w" sizes="(max-width: 1668px) 100vw, 1668px" /><figcaption class="wp-element-caption">進入 Instance Group<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們看到 IG 一直保持在 1 台機器，</p>



<p>因為 CPU 使用率一直到不了 60%，大概只有 18% 左右。</p>



<p>所以沒有觸發 Autoscale。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1653" height="922" src="https://dongdonggcp.com/wp-content/uploads/2024/09/91-e79c8be588b0-istance-group-e6b292e69c89e693b4e58585e6a99fe599a8-1.png?w=1024" alt="看到 Instance Group 沒有擴充機器" class="wp-image-7525" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/91-e79c8be588b0-istance-group-e6b292e69c89e693b4e58585e6a99fe599a8-1.png 1653w, https://dongdonggcp.com/wp-content/uploads/2024/09/91-e79c8be588b0-istance-group-e6b292e69c89e693b4e58585e6a99fe599a8-1-300x167.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/91-e79c8be588b0-istance-group-e6b292e69c89e693b4e58585e6a99fe599a8-1-1024x571.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/91-e79c8be588b0-istance-group-e6b292e69c89e693b4e58585e6a99fe599a8-1-768x428.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/91-e79c8be588b0-istance-group-e6b292e69c89e693b4e58585e6a99fe599a8-1-1536x857.png 1536w" sizes="(max-width: 1653px) 100vw, 1653px" /><figcaption class="wp-element-caption">看到 Instance Group 沒有擴充機器<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>那我們就直接點擊 IG 的 “Edit”，</p>



<p>把 “Target CPU Utilization” 從 60% 改成 5%，再按下 “Save”。</p>



<p>讓它的 CPU 只要有一點負載，就輕易觸發 Autoscale。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="629" height="674" src="https://dongdonggcp.com/wp-content/uploads/2024/09/92-e4bfaee694b9-instance-grooup-e79a84-capacity-e5be9e-60-e694b9e68890-5-1.png?w=629" alt="" class="wp-image-7527" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/92-e4bfaee694b9-instance-grooup-e79a84-capacity-e5be9e-60-e694b9e68890-5-1.png 629w, https://dongdonggcp.com/wp-content/uploads/2024/09/92-e4bfaee694b9-instance-grooup-e79a84-capacity-e5be9e-60-e694b9e68890-5-1-280x300.png 280w" sizes="(max-width: 629px) 100vw, 629px" /><figcaption class="wp-element-caption">修改 Instance Grooup 的 Capacity 從 60% 改成 5%<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>然後我們再持續觀察，就看到它直接從一台機器，</p>



<p>一口氣長到三台機器。</p>



<p>而每一台機器的 CPU 使用率其實沒有很高，約 18% 左右，</p>



<p>因為已經超過 5% 所以就觸發了 Autoscale，</p>



<p>三台機器的加總 CPU 使用率為 54%，</p>



<p>而每台機器的 Capacity 是 5%，三台上限為 15%，</p>



<p>所以系統提示機器數量已經到達上限，</p>



<p>提示你要不要再增加更多機器。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1798" height="1028" src="https://dongdonggcp.com/wp-content/uploads/2024/09/93-e79c8be588b0-instance-group-e693b4e58585e588b0e4b88ae99990-1.png?w=1024" alt="看到 Instance Group 擴充到上限" class="wp-image-7528" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/93-e79c8be588b0-instance-group-e693b4e58585e588b0e4b88ae99990-1.png 1798w, https://dongdonggcp.com/wp-content/uploads/2024/09/93-e79c8be588b0-instance-group-e693b4e58585e588b0e4b88ae99990-1-300x172.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/93-e79c8be588b0-instance-group-e693b4e58585e588b0e4b88ae99990-1-1024x585.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/93-e79c8be588b0-instance-group-e693b4e58585e588b0e4b88ae99990-1-768x439.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/93-e79c8be588b0-instance-group-e693b4e58585e588b0e4b88ae99990-1-1536x878.png 1536w" sizes="(max-width: 1798px) 100vw, 1798px" /><figcaption class="wp-element-caption">看到 Instance Group 擴充到上限<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們可以點擊 IG 的 “Overview” 看到有 IG 底下有三台機器，</p>



<p>或是去 “VM Instances” 也會看到相同的三台機器。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1832" height="967" src="https://dongdonggcp.com/wp-content/uploads/2024/09/94-e79c8be588b0-instance-group-e6a99fe599a8e995b7e588b03e58fb0-1.png?w=1024" alt="看到 Instance Group 機器長到3台" class="wp-image-7530" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/94-e79c8be588b0-instance-group-e6a99fe599a8e995b7e588b03e58fb0-1.png 1832w, https://dongdonggcp.com/wp-content/uploads/2024/09/94-e79c8be588b0-instance-group-e6a99fe599a8e995b7e588b03e58fb0-1-300x158.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/94-e79c8be588b0-instance-group-e6a99fe599a8e995b7e588b03e58fb0-1-1024x541.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/94-e79c8be588b0-instance-group-e6a99fe599a8e995b7e588b03e58fb0-1-768x405.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/94-e79c8be588b0-instance-group-e6a99fe599a8e995b7e588b03e58fb0-1-1536x811.png 1536w" sizes="(max-width: 1832px) 100vw, 1832px" /><figcaption class="wp-element-caption">看到 Instance Group 機器長到3台<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>所以我們已經確認成功觸發了 Autoscale，</p>



<p>那就回到 Cloud Shell 按下 “Ctrl + C” 停止 Siege，</p>



<p>它也提供相關統計資料，顯示總共發出了 25 萬次的 Request，</p>



<p>每個 Request 平均回應時間為 1.71 秒，算是比較慢的，</p>



<p>因為機器規格很小，而且打的次數又快，所以回應速度變慢許多。</p>



<p>然後它又說成功次數和 Request 總數一模一樣，</p>



<p>表示所有的 Request 都有被我們的網站接住。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1637" height="614" src="https://dongdonggcp.com/wp-content/uploads/2024/09/95-e7a2bae8aa8d-siege-e799bce98081e79a84-request-e695b8e9878fe7b5b1e8a888-1.png?w=1024" alt="確認 Siege 發送的 Request 數量統計" class="wp-image-7531" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/95-e7a2bae8aa8d-siege-e799bce98081e79a84-request-e695b8e9878fe7b5b1e8a888-1.png 1637w, https://dongdonggcp.com/wp-content/uploads/2024/09/95-e7a2bae8aa8d-siege-e799bce98081e79a84-request-e695b8e9878fe7b5b1e8a888-1-300x113.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/95-e7a2bae8aa8d-siege-e799bce98081e79a84-request-e695b8e9878fe7b5b1e8a888-1-1024x384.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/95-e7a2bae8aa8d-siege-e799bce98081e79a84-request-e695b8e9878fe7b5b1e8a888-1-768x288.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/95-e7a2bae8aa8d-siege-e799bce98081e79a84-request-e695b8e9878fe7b5b1e8a888-1-1536x576.png 1536w" sizes="(max-width: 1637px) 100vw, 1637px" /><figcaption class="wp-element-caption">確認 Siege 發送的 Request 數量統計<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>我們也看一下 Cloud Logging，可以看到總共收到的 Request 數量，</p>



<p>因為我在壓力測試之前也做過其他測試，所以數量比較多。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1835" height="1033" src="https://dongdonggcp.com/wp-content/uploads/2024/09/96-e5be9e-cloud-logging-e7a2bae8aa8de694b6e588b0e79a84-request-1.png?w=1024" alt="從 Cloud Logging 確認收到的 Request" class="wp-image-7533" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/96-e5be9e-cloud-logging-e7a2bae8aa8de694b6e588b0e79a84-request-1.png 1835w, https://dongdonggcp.com/wp-content/uploads/2024/09/96-e5be9e-cloud-logging-e7a2bae8aa8de694b6e588b0e79a84-request-1-300x169.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/96-e5be9e-cloud-logging-e7a2bae8aa8de694b6e588b0e79a84-request-1-1024x576.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/96-e5be9e-cloud-logging-e7a2bae8aa8de694b6e588b0e79a84-request-1-768x432.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/96-e5be9e-cloud-logging-e7a2bae8aa8de694b6e588b0e79a84-request-1-1536x865.png 1536w" sizes="(max-width: 1835px) 100vw, 1835px" /><figcaption class="wp-element-caption">從 Cloud Logging 確認收到的 Request<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>所以整個測試就完成了。</p>



<p>最後我們這個範例，在整個 GCP 的 LB 架構如下，</p>



<p>其中藍色字代表我們建立好的各項服務所提供的功能：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="2840" height="1158" src="https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1.png?w=1024" alt="GCP Load Balancer 完整範例架構" class="wp-image-7534" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1.png 2840w, https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1-300x122.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1-1024x418.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1-768x313.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1-1536x626.png 1536w, https://dongdonggcp.com/wp-content/uploads/2024/09/108-gcp-load-balancer-e5ae8ce695b4e7af84e4be8be69eb6e6a78b-1-2048x835.png 2048w" sizes="(max-width: 2840px) 100vw, 2840px" /><figcaption class="wp-element-caption">GCP Load Balancer 完整範例架構<br>資料來源：自行繪製</figcaption></figure>



<h1 class="wp-block-heading">四、逐步刪除各項資源</h1>



<p>接下來更重要的是，把服務照順序刪除。</p>



<p>不要放著讓它跑啊，整個架構都會計費的！</p>



<p>至於要刪除也是有順序的，順序錯是會卡住無法刪除的：</p>



<h2 class="wp-block-heading">(一) 刪除 Load Balancer、憑證、後端</h2>



<p>因為不能一次刪兩個 LB，所以先選 “lb-1” 來刪除，它會順便問你要不要把憑證跟後端都刪除。</p>



<p>憑證跟後端放著不會產生費用，憑證是有公信力的建議留著。</p>



<p>而後端則是必須要刪除，要不然 IG 會無法刪除。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1002" height="1057" src="https://dongdonggcp.com/wp-content/uploads/2024/09/97-e588aae999a4-load-balancere38081e5be8ce7abafe5928ce68691e8ad89-1.png?w=971" alt="刪除 Load Balancer、後端和憑證" class="wp-image-7537" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/97-e588aae999a4-load-balancere38081e5be8ce7abafe5928ce68691e8ad89-1.png 1002w, https://dongdonggcp.com/wp-content/uploads/2024/09/97-e588aae999a4-load-balancere38081e5be8ce7abafe5928ce68691e8ad89-1-284x300.png 284w, https://dongdonggcp.com/wp-content/uploads/2024/09/97-e588aae999a4-load-balancere38081e5be8ce7abafe5928ce68691e8ad89-1-971x1024.png 971w, https://dongdonggcp.com/wp-content/uploads/2024/09/97-e588aae999a4-load-balancere38081e5be8ce7abafe5928ce68691e8ad89-1-768x810.png 768w" sizes="(max-width: 1002px) 100vw, 1002px" /><figcaption class="wp-element-caption">刪除 Load Balancer、後端和憑證<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>刪完記得再刪除負責把 HTTP 轉到 HTTPS 的 “fe-1-redirect”。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1627" height="602" src="https://dongdonggcp.com/wp-content/uploads/2024/09/98-e588aae999a4-load-balancer-e79a84-redirect-e58a9fe883bd-1.png?w=1024" alt="刪除 Load Balancer 的 Redirect 功能" class="wp-image-7538" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/98-e588aae999a4-load-balancer-e79a84-redirect-e58a9fe883bd-1.png 1627w, https://dongdonggcp.com/wp-content/uploads/2024/09/98-e588aae999a4-load-balancer-e79a84-redirect-e58a9fe883bd-1-300x111.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/98-e588aae999a4-load-balancer-e79a84-redirect-e58a9fe883bd-1-1024x379.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/98-e588aae999a4-load-balancer-e79a84-redirect-e58a9fe883bd-1-768x284.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/98-e588aae999a4-load-balancer-e79a84-redirect-e58a9fe883bd-1-1536x568.png 1536w" sizes="(max-width: 1627px) 100vw, 1627px" /><figcaption class="wp-element-caption">刪除 Load Balancer 的 Redirect 功能<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(二) 刪除 Cloud Armor 的 Policy</h2>



<p>當我們進入 Policy 的頁面應該會看到 Target 的數量為 0，</p>



<p>如果前面 LG 還沒刪掉，Target 數量就是 1，</p>



<p>那 Policy 是<a href="https://cloud.google.com/armor/docs/configure-security-policies#:~:text=You%20must%20remove%20all%20backend%20services%20from%20the%20policy%20before%20you%20can%20delete%20it.">無法刪除</a>的，再等 1~2 分鐘等它歸 0。</p>



<p>要注意這部分容易忘記，因為當初我們是在 LB 後端設定的，</p>



<p>根本沒來過 Cloud Armor 的頁面，所以非常容易忘記。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1847" height="884" src="https://dongdonggcp.com/wp-content/uploads/2024/09/99-e59ca8-cloud-armor-e588aae999a4-policy-1.png?w=1024" alt="在 Cloud Armor 刪除 Policy" class="wp-image-7541" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/99-e59ca8-cloud-armor-e588aae999a4-policy-1.png 1847w, https://dongdonggcp.com/wp-content/uploads/2024/09/99-e59ca8-cloud-armor-e588aae999a4-policy-1-300x144.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/99-e59ca8-cloud-armor-e588aae999a4-policy-1-1024x490.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/99-e59ca8-cloud-armor-e588aae999a4-policy-1-768x368.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/99-e59ca8-cloud-armor-e588aae999a4-policy-1-1536x735.png 1536w" sizes="(max-width: 1847px) 100vw, 1847px" /><figcaption class="wp-element-caption">在 Cloud Armor 刪除 Policy<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(三) 釋放靜態 IP</h2>



<p>因為 LB 刪除了，所以原本靜態的 IP 會變成閒置狀態，</p>



<p>要注意，IP 分配給 LB 使用時，<a href="https://cloud.google.com/vpc/network-pricing#:~:text=Static%20IP%20address%20(assigned%20but%20unused)">IP 是免費的</a>，</p>



<p>但如果閒置的話，它的費用會比在 VM 上使用還貴，</p>



<p>這也很容易忘記喔！</p>



<p>另外釋放 IP 的按鈕在最旁邊，要把視窗拉開才會看到。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1890" height="642" src="https://dongdonggcp.com/wp-content/uploads/2024/09/100-e59ca8-vpc-network-e9878be694bee99d9ce6858b-ip-1.png?w=1024" alt="在 VPC Network 釋放靜態 IP" class="wp-image-7542" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/100-e59ca8-vpc-network-e9878be694bee99d9ce6858b-ip-1.png 1890w, https://dongdonggcp.com/wp-content/uploads/2024/09/100-e59ca8-vpc-network-e9878be694bee99d9ce6858b-ip-1-300x102.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/100-e59ca8-vpc-network-e9878be694bee99d9ce6858b-ip-1-1024x348.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/100-e59ca8-vpc-network-e9878be694bee99d9ce6858b-ip-1-768x261.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/100-e59ca8-vpc-network-e9878be694bee99d9ce6858b-ip-1-1536x522.png 1536w" sizes="(max-width: 1890px) 100vw, 1890px" /><figcaption class="wp-element-caption">在 VPC Network 釋放靜態 IP<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(四) 刪除 Instance Group</h2>



<p>再來我們要刪除 IG 了，刪除之後務必確認它是否刪除成功。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1871" height="847" src="https://dongdonggcp.com/wp-content/uploads/2024/09/101-e588aae999a4-instance-group-1.png?w=1024" alt="刪除 Instance Group" class="wp-image-7544" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/101-e588aae999a4-instance-group-1.png 1871w, https://dongdonggcp.com/wp-content/uploads/2024/09/101-e588aae999a4-instance-group-1-300x136.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/101-e588aae999a4-instance-group-1-1024x464.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/101-e588aae999a4-instance-group-1-768x348.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/101-e588aae999a4-instance-group-1-1536x695.png 1536w" sizes="(max-width: 1871px) 100vw, 1871px" /><figcaption class="wp-element-caption">刪除 Instance Group<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>像是這個例子，我看到下面這個錯誤，”apache-ig-1” 這個 IG，</p>



<p>被相同名字的 Autoscaler 綁住，一直處於調整機器數量的狀態，所以無法刪除。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1059" height="539" src="https://dongdonggcp.com/wp-content/uploads/2024/09/102-e588aae999a4-instance-group-e79a84e98cafe8aaa4e8a88ae681af-1.png?w=1024" alt="刪除 Instance Group 的錯誤訊息" class="wp-image-7545" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/102-e588aae999a4-instance-group-e79a84e98cafe8aaa4e8a88ae681af-1.png 1059w, https://dongdonggcp.com/wp-content/uploads/2024/09/102-e588aae999a4-instance-group-e79a84e98cafe8aaa4e8a88ae681af-1-300x153.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/102-e588aae999a4-instance-group-e79a84e98cafe8aaa4e8a88ae681af-1-1024x521.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/102-e588aae999a4-instance-group-e79a84e98cafe8aaa4e8a88ae681af-1-768x391.png 768w" sizes="(max-width: 1059px) 100vw, 1059px" /><figcaption class="wp-element-caption">刪除 Instance Group 的錯誤訊息<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>因為 IG 的 CPU Capacity 之前調整到 5%，有點太低，</p>



<p>偏偏開關機這件事情，耗用的 CPU 太多，</p>



<p>所以讓 IG 一直不斷在開機又關機，變得無法刪除。</p>



<p>再改回 60%，讓 Autoscale 的門檻提高，不要再動不動就 Scale。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1336" height="1029" src="https://dongdonggcp.com/wp-content/uploads/2024/09/103-e4bfaee694b9-instance-group-e79a84-capacitye59b9e-60-1.png?w=1024" alt="修改 Instance Group 的 Capacity 回 60%" class="wp-image-7547" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/103-e4bfaee694b9-instance-group-e79a84-capacitye59b9e-60-1.png 1336w, https://dongdonggcp.com/wp-content/uploads/2024/09/103-e4bfaee694b9-instance-group-e79a84-capacitye59b9e-60-1-300x231.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/103-e4bfaee694b9-instance-group-e79a84-capacitye59b9e-60-1-1024x789.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/103-e4bfaee694b9-instance-group-e79a84-capacitye59b9e-60-1-768x592.png 768w" sizes="(max-width: 1336px) 100vw, 1336px" /><figcaption class="wp-element-caption">修改 Instance Group 的 Capacity回 60%<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<p>後來設定好之後，IG 就成功刪除了。</p>



<h2 class="wp-block-heading">(五) 刪除 Instance Template</h2>



<p>Instance Template 不會產生任何費用，有需要留著也沒關係。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1825" height="437" src="https://dongdonggcp.com/wp-content/uploads/2024/09/104-e588aae999a4-instance-template-1.png?w=1024" alt="刪除 Instance Template" class="wp-image-7548" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/104-e588aae999a4-instance-template-1.png 1825w, https://dongdonggcp.com/wp-content/uploads/2024/09/104-e588aae999a4-instance-template-1-300x72.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/104-e588aae999a4-instance-template-1-1024x245.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/104-e588aae999a4-instance-template-1-768x184.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/104-e588aae999a4-instance-template-1-1536x368.png 1536w" sizes="(max-width: 1825px) 100vw, 1825px" /><figcaption class="wp-element-caption">刪除 Instance Template<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(六) 刪除 Image</h2>



<p>Image 是會佔用一點點空間的，但是沒多少費用，要刪不刪都可以。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1795" height="771" src="https://dongdonggcp.com/wp-content/uploads/2024/09/105-e588aae999a4-image-1.png?w=1024" alt="" class="wp-image-7550" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/105-e588aae999a4-image-1.png 1795w, https://dongdonggcp.com/wp-content/uploads/2024/09/105-e588aae999a4-image-1-300x129.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/105-e588aae999a4-image-1-1024x440.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/105-e588aae999a4-image-1-768x330.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/105-e588aae999a4-image-1-1536x660.png 1536w" sizes="(max-width: 1795px) 100vw, 1795px" /><figcaption class="wp-element-caption">刪除 Image<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(七) 刪除原本用來做 Image 的主機和 Disk</h2>



<p>機器沒開是不會計費的，但它的 Disk 還是會有費用，你可以看情況要不要刪。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1869" height="450" src="https://dongdonggcp.com/wp-content/uploads/2024/09/106-e588aae999a4e887aae8a882e79a84e4b8bbe6a99f-1.png?w=1024" alt="刪除自訂的主機" class="wp-image-7551" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/106-e588aae999a4e887aae8a882e79a84e4b8bbe6a99f-1.png 1869w, https://dongdonggcp.com/wp-content/uploads/2024/09/106-e588aae999a4e887aae8a882e79a84e4b8bbe6a99f-1-300x72.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/106-e588aae999a4e887aae8a882e79a84e4b8bbe6a99f-1-1024x247.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/106-e588aae999a4e887aae8a882e79a84e4b8bbe6a99f-1-768x185.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/09/106-e588aae999a4e887aae8a882e79a84e4b8bbe6a99f-1-1536x370.png 1536w" sizes="(max-width: 1869px) 100vw, 1869px" /><figcaption class="wp-element-caption">刪除自訂的主機<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h2 class="wp-block-heading">(八) 刪除 DNS 記錄</h2>



<p>如果你是用 Hinet、GoDaddy 或 Namecheap，</p>



<p>DNS 記錄不會有額外費用，</p>



<p>如果是 Cloud DNS，有人持續在查詢網域的話，</p>



<p>會<a href="https://cloud.google.com/dns/pricing">依照查詢次數計費</a>，</p>



<p>不過查詢一百萬次才會有 0.4 美金，費用不高。</p>



<p>但 DNS 記錄留在那邊容易誤會，以為你還有主機是用這個網域，</p>



<p>為了管理的目的，還是建議刪乾淨比較好。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1422" height="1019" src="https://dongdonggcp.com/wp-content/uploads/2024/09/107-e588aae999a4-dns-e8a898e98c84-1.png?w=1024" alt="刪除 DNS 記錄" class="wp-image-7553" srcset="https://dongdonggcp.com/wp-content/uploads/2024/09/107-e588aae999a4-dns-e8a898e98c84-1.png 1422w, https://dongdonggcp.com/wp-content/uploads/2024/09/107-e588aae999a4-dns-e8a898e98c84-1-300x215.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/09/107-e588aae999a4-dns-e8a898e98c84-1-1024x734.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/09/107-e588aae999a4-dns-e8a898e98c84-1-768x550.png 768w" sizes="(max-width: 1422px) 100vw, 1422px" /><figcaption class="wp-element-caption">刪除 DNS 記錄<br>截圖自 <a href="https://console.cloud.google.com/">GCP Console</a></figcaption></figure>



<h1 class="wp-block-heading">五、結論</h1>



<p>我們終於完成整個 Load Balacer 的建立過程，</p>



<p>你會發現整個架構運作起來，有非常多要考慮的地方，</p>



<p>除了 Instance Group 和 Instance Template 相關的前置作業要做，</p>



<p>還有 Google 的 SSL 憑證、Cloud CDN 和 Cloud Armor 功能，</p>



<p>要搭配 LB 才能運作。</p>



<p>前前後後有很多互相關聯的設定，</p>



<p>牽一髮而動全身，設錯要改還很麻煩，</p>



<p>務必要弄懂所有細節，或是多做幾次才能駕輕就熟。</p>



<p>當你整個做完一遍，你就算是掌握了 GCP 的核心功能 &#8211; Autoscale，</p>



<p>以後面對高流量的服務，就可以透過 LB 和 IG 的設定，</p>



<p>來打造一個高可用的雲端架構。</p>



<p>如果對於 LB 的原理還不了解，</p>



<p>可以參考<a href="https://masterconcept.ai/zh-hant/blog/beyond-load-pressure-improving-website-performance-why-gcp-load-balancing-is-your-best-choice/">《超越負載壓力，提升網站效能！為什麼 GCP Load Balancing 是你最佳的選擇？》</a>這篇文章。</p>



<p>本文同時刊登於思想科技官網部落格文章 <a href="https://masterconcept.ai/zh-hant/learning-column/google-cloud-zh-hant/gcp-kol-x-master-concept-how-to-set-a-gcp-load-balancer-for-a-website/">【東東老師 X 思想科技】如何替網站設定 GCP Load Balancer 確認架構規劃問題？與詳細設定步驟。</a></p><p>The post <a href="https://dongdonggcp.com/2024/09/25/how-to-config-gcp-load-balancer/">如何替網站設定 GCP Load Balancer (負載平衡器)？架構規劃與設定步驟詳解</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2024/09/25/how-to-config-gcp-load-balancer/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7373</post-id>	</item>
		<item>
		<title>[GCP 線上課程] GCP 負載平衡依照權重分流 Load Balancer weight-based traffic splitting</title>
		<link>https://dongdonggcp.com/2024/03/30/gcp-load-balancer-weight-based-traffic-splitting/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gcp-load-balancer-weight-based-traffic-splitting</link>
					<comments>https://dongdonggcp.com/2024/03/30/gcp-load-balancer-weight-based-traffic-splitting/#respond</comments>
		
		<dc:creator><![CDATA[東東]]></dc:creator>
		<pubDate>Sat, 30 Mar 2024 05:20:22 +0000</pubDate>
				<category><![CDATA[Google Cloud Platform]]></category>
		<category><![CDATA[Load Balancer]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[分流]]></category>
		<category><![CDATA[負載平衡]]></category>
		<guid isPermaLink="false">https://dongdonggcp.wordpress.com/?p=6019</guid>

					<description><![CDATA[<p>在 GCP 上要做到依權重分流的方法很多 [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2024/03/30/gcp-load-balancer-weight-based-traffic-splitting/">[GCP 線上課程] GCP 負載平衡依照權重分流 Load Balancer weight-based traffic splitting</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>在 GCP 上要做到依權重分流的方法很多，</p>



<p>如下：</p>



<p>1.Cloud DNS 依權重解析到不同 IP (超簡單)</p>



<p>2.Google App Engine 不同版本分流 (超簡單)</p>



<p>3.Cloud Function 不同版本分流 (超簡單)</p>



<p>4.Cloud Run 不同版本分流 (超簡單)</p>



<p>5.Nginx 設定檔 (非GCP但也很簡單)</p>



<p>6.HTTP(S) Load Balancer 依權重分流 </p>



<p>偏偏 Load Balancer 是最複雜的，</p>



<p>明明就很單純的功能，</p>



<p>不知道 GCP 為什麼要搞得這麼複雜？</p>



<p>這裡快速分享一下步驟。</p>



<p>目標：依照 70%，30%的權重，分配流量到2個後端。</p>



<p>為了簡化，我在後端都用非代管執行個體群組，</p>



<p>各自接到一台 VM，hello-world-a 和 hello-world-b</p>



<p>Load Balancer 部分，</p>



<p>前端通訊協定就用 HTTP，</p>



<p>接2個後端，分別接到2個非代管執行個體群組。</p>



<p>架構圖如下：</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2082" height="940" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42.png?w=1024" alt="" class="wp-image-6023" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42.png 2082w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42-300x135.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42-1024x462.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42-768x347.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42-1536x693.png 1536w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.42.42-2048x925.png 2048w" sizes="(max-width: 2082px) 100vw, 2082px" /></figure>



<p>一、上述建立主機、執行個體群組的部分省略，兩張網頁呈現如下：</p>



<p>vm: hello-world-a</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="480" height="192" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.45.13.png?w=480" alt="" class="wp-image-6025" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.45.13.png 480w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.45.13-300x120.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></figure>



<p>vm: hello-world-b</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="518" height="178" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.45.17.png?w=518" alt="" class="wp-image-6026" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.45.17.png 518w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.45.17-300x103.png 300w" sizes="(max-width: 518px) 100vw, 518px" /></figure>



<p>二、接下來要建立負載平衡了，要注意，</p>



<p>前端先不要建，建立兩個後端，接到兩個執行個體群組。</p>



<p>完成如下：</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="538" height="222" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.49.51.png?w=538" alt="" class="wp-image-6028" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.49.51.png 538w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.49.51-300x124.png 300w" sizes="(max-width: 538px) 100vw, 538px" /></figure>



<p>三、接下來要打指令了，</p>



<p>分流的關鍵物件叫做 urm-map</p>



<p>先寫好一個 YAML 檔，我取名 map，</p>



<p>紅色部分請各位自行替換。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1318" height="658" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.51.27.png?w=1024" alt="" class="wp-image-6030" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.51.27.png 1318w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.51.27-300x150.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.51.27-1024x511.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d8812.51.27-768x383.png 768w" sizes="(max-width: 1318px) 100vw, 1318px" /></figure>



<p>為了方便大家複製貼上，我就貼在這裡，語法我就不解釋了。</p>



<pre class="wp-block-code alignwide"><code>defaultService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-a
kind: compute #urlMap
name: web-map-http
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-a
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: /
    priority: 2
    routeAction:
        weightedBackendServices:
        - backendService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-a
          weight: 70
        - backendService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-b
          weight: 30</code></pre>



<p>四、YAML 檔準備好，用指令來建立 url-map：</p>



<p>gcloud beta compute url-maps import web-map-http &#8211;source map &#8211;global</p>



<p>五、再來建立 target-http-proxies</p>



<p>gcloud beta compute target-http-proxies create http-lb-proxy-adv &#8211;url-map=web-map-http</p>



<p>六、在建立前端之前，先保留一個靜態 IP</p>



<p>gcloud compute addresses create lb-ipv4 &nbsp; &nbsp; &#8211;ip-version=IPV4 &nbsp; &nbsp; &#8211;global</p>



<p>七、確認取得 IP</p>



<p>gcloud compute addresses describe lb-ipv4 &nbsp; &nbsp; &#8211;format=&#8221;get(address)&#8221; &nbsp; &nbsp; &#8211;global</p>



<p>八、建立 forwarding-rules</p>



<p>gcloud beta compute forwarding-rules create http-content-rule &nbsp; &nbsp; &#8211;load-balancing-scheme EXTERNAL_MANAGED &nbsp; &nbsp; &#8211;address=lb-ipv4-2 &nbsp; &nbsp; &#8211;global &nbsp; &nbsp; &#8211;target-http-proxy=http-lb-proxy-adv &nbsp; &nbsp; &#8211;ports=80</p>



<p>建立過程截圖如下：</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2660" height="820" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47.png?w=1024" alt="" class="wp-image-6034" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47.png 2660w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47-300x92.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47-1024x316.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47-768x237.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47-1536x474.png 1536w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.26.47-2048x631.png 2048w" sizes="(max-width: 2660px) 100vw, 2660px" /></figure>



<p>接下來點網頁看看，</p>



<p>會發現很多次是 v1，有幾次是 v2。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="411" height="300" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.37.41.png?w=411" alt="" class="wp-image-6035" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.37.41.png 411w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.37.41-300x219.png 300w" sizes="(max-width: 411px) 100vw, 411px" /></figure>



<p>想多打一點流量進去，使用 siege，</p>



<p>在 Cloud Shell 安裝 siege：</p>



<p>sudo apt-get install siege</p>



<p>開始測試，例如打個200下：</p>



<p>siege -c 10 -r 2- -d1 http://34.49.24.227</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1542" height="502" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.31.58.png?w=1024" alt="" class="wp-image-6038" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.31.58.png 1542w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.31.58-300x98.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.31.58-1024x333.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.31.58-768x250.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.31.58-1536x500.png 1536w" sizes="(max-width: 1542px) 100vw, 1542px" /></figure>



<p>然後 Load Balancer 監控頁面可以看到分流的圖：</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="591" height="908" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.39.22.png?w=591" alt="" class="wp-image-6044" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.39.22.png 591w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.39.22-195x300.png 195w" sizes="(max-width: 591px) 100vw, 591px" /></figure>



<p>我們去 Cloud Logging 去看結果，</p>



<p>看到2個後端接收 Request 的次數比較，</p>



<p>包含我最初手動點擊網頁的次數，和 siege 200 次，</p>



<p>2個後端分別收到 209 次和 91次，大概是69.67%：30.30%，</p>



<p>如果打更多次，比例會更接近 70%：30%。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1849" height="1038" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.32.27.png?w=1024" alt="" class="wp-image-6040" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.32.27.png 1849w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.32.27-300x168.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.32.27-1024x575.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.32.27-768x431.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-28-e4b88be58d8812.32.27-1536x862.png 1536w" sizes="(max-width: 1849px) 100vw, 1849px" /></figure>



<p>也可以從 Cloud Monitoring 看到兩個後端接收 Reuqest 的圖表：</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2478" height="1486" src="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04.png?w=1024" alt="" class="wp-image-6042" srcset="https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04.png 2478w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04-300x180.png 300w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04-1024x614.png 1024w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04-768x461.png 768w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04-1536x921.png 1536w, https://dongdonggcp.com/wp-content/uploads/2024/03/e688aae59c96-2024-03-30-e4b88be58d881.15.04-2048x1228.png 2048w" sizes="(max-width: 2478px) 100vw, 2478px" /></figure>



<p>以上分享。</p>



<p>來源可參考這份文件：</p>



<p><a href="https://codelabs.developers.google.com/externalhttplb-adv#4">https://codelabs.developers.google.com/externalhttplb-adv#4</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>順便置入一下，關於更多 GCP 負載平衡的概念和實作教學，都在東東的 <a href="https://dongdonggcp.com/gcp-architect-class/" target="_blank" rel="noopener" title="">GCP 線上課程《雲端架構師養成班》</a>，有需要可以進來看喔！</p><p>The post <a href="https://dongdonggcp.com/2024/03/30/gcp-load-balancer-weight-based-traffic-splitting/">[GCP 線上課程] GCP 負載平衡依照權重分流 Load Balancer weight-based traffic splitting</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2024/03/30/gcp-load-balancer-weight-based-traffic-splitting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6019</post-id>	</item>
	</channel>
</rss>
