<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Khomkrit | Cloud &amp; Infrastructure Architect</title><link>https://khomkrit.cc/</link><description>Recent content on Khomkrit | Cloud &amp; Infrastructure Architect</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 08 Jun 2026 22:46:12 +0700</lastBuildDate><atom:link href="https://khomkrit.cc/index.xml" rel="self" type="application/rss+xml"/><item><title>Accuracy Precision Recall</title><link>https://khomkrit.cc/blogs/accuracy-precision-recall/</link><pubDate>Mon, 08 Jun 2026 22:46:12 +0700</pubDate><guid>https://khomkrit.cc/blogs/accuracy-precision-recall/</guid><description>&lt;p&gt;&lt;img alt="Accuracy Precision Recall" loading="lazy" src="https://khomkrit.cc/images/Precision.png"&gt;&lt;/p&gt;
&lt;h2 id="confusion-matrix"&gt;Confusion Matrix&lt;/h2&gt;
&lt;p&gt;ตัวอย่างผลการทำนายจาก Classification Model
เราจะเริ่ม model ที่ใช้ทำนายแค่ 2 class ว่าผลที่ได้คือ positive หรือ negative&lt;/p&gt;
&lt;p&gt;ถ้าเรากำหนดค่า positive threshold ไว้ที่ 0.5&lt;/p&gt;
&lt;p&gt;ถ้าข้อมูลตัวอย่างเป็น 0.7 , 0.3, 0.6 , 0.7 , 0.8, 0.1 , 0.4&lt;/p&gt;
&lt;p&gt;แปลงผลเป็น class ได้เป็น&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;positive, negative, positive, positive, positive, negative, negative
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;เราลองเอาผลการทำนาย กับ ค่าจริง จาก dataset (Ground truth) นำมาเปรียบเทียบกัน&lt;/p&gt;
&lt;p&gt;Ground truth: positive, negative, negative, positive, positive, positive, negative
Predicted: positive, negative, positive ,positive, positive, negative, negative
การวัดผลการทำนายโดย Model จะอยู่ในรูปแบบของ confusion matrix ซึ่งจะมีหน้าตาประมาณนี้&lt;/p&gt;</description></item><item><title>Debug ยังไงดี ? เราไม่มี shell ใน container! วิธีใช้ kubectl debug ทะลวงเข้า Distroless Container ใน Kubernetes</title><link>https://khomkrit.cc/blogs/kubernetes-debug/</link><pubDate>Mon, 08 Jun 2026 22:46:12 +0700</pubDate><guid>https://khomkrit.cc/blogs/kubernetes-debug/</guid><description>&lt;p&gt;&lt;img alt="distorless Debugging" loading="lazy" src="https://khomkrit.cc/images/yamu_jay-computer-9056546.jpg"&gt;&lt;/p&gt;
&lt;p&gt;ในการสร้าง Container Image ระดับ Production มาตรฐานที่เหล่า DevOps และ System Architect มักจะเลือกใช้กันคือการทำ Distroless Image หรือการใช้ FROM scratch เนื่องจากมันมอบข้อได้เปรียบที่สำคัญ 3 ประการให้กับระบบ:&lt;/p&gt;
&lt;p&gt;🚀- Performance &amp;amp; Speed (ขนาดเล็ก โหลดไว): ตัด Component ของระบบปฏิบัติการที่พะรุงพะรังออกไป ทำให้ Image มีขนาดเล็กจิ๋ว ดึง (Pull) จาก Registry ได้ไว และ Start Container ได้รวดเร็ว&lt;/p&gt;
&lt;p&gt;🛡️ - Security (ลดช่องโหว่): ลด Attack Surface หรือพื้นที่การโจมตีจากภายนอกได้อย่างชะงัด เพราะไม่มี Shell (/bin/bash หรือ /bin/sh) และไม่มี Utilities เครื่องมือแฮกใดๆ ติดมาใน Image เลย&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stability (ความเสถียรขั้นสุด): ตัดความซับซ้อนทิ้ง มีเฉพาะ Application Binary และ Dependencies ที่จำเป็นต่อการรันโปรแกรมเท่านั้น&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pain-point-ปลอดภยสดขด-แต-debug-ชวตเปลยน"&gt;Pain Point: ปลอดภัยสุดขีด แต่ Debug ชีวิตเปลี่ยน&lt;/h3&gt;
&lt;p&gt;ความปลอดภัยที่ได้มา แลกมากับความเจ็บปวดตอนที่ระบบมีปัญหาบน Production ครับ เพราะโดยปกติเวลาเราต้องการเข้าไปดู State ภายใน Pod เรามักจะใช้ท่ามาตรฐานคือ:&lt;/p&gt;</description></item><item><title>VectorMesh – ออกแบบระบบ Enterprise AI-RAG ที่รองรับ High Traffic และ Secure by Design</title><link>https://khomkrit.cc/case-studies/vectormesh/</link><pubDate>Tue, 12 May 2026 12:05:22 +0700</pubDate><guid>https://khomkrit.cc/case-studies/vectormesh/</guid><description>&lt;p&gt;&lt;img alt="Vector Mesh overview architecture" loading="lazy" src="https://khomkrit.cc/images/279eff97-0663-4c9d-aaac-352125cbc4c6.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;TL;DR: บทความนี้เจาะลึกแนวคิดการออกแบบและสร้าง VectorMesh ซึ่งเป็นสถาปัตยกรรมแพลตฟอร์ม AI-RAG (Retrieval-Augmented Generation) ระดับองค์กร โดยมุ่งเน้นแก้ปัญหาคอขวด (Bottleneck) ของการนำ AI ไปใช้งานจริง ผ่านการใช้ Rust, Microservices, Kubernetes (Istio + APISIX) และ Observability แบบเต็มสูบ&lt;/p&gt;
&lt;h3 id="the-problem-เมอ-ai-ทวไป-ไมตอบโจทยระดบ-enterprise"&gt;The Problem: เมื่อ AI ทั่วไป ไม่ตอบโจทย์ระดับ Enterprise&lt;/h3&gt;
&lt;p&gt;ปัจจุบันทุกองค์กรอยากนำ AI/LLM เข้ามาช่วยวิเคราะห์ข้อมูลและสร้าง Automated Workflow แต่ปัญหาที่มักเจอเมื่อนำไปขึ้น Production จริงคือ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Security &amp;amp; Privacy: ข้อมูลความลับหลุดออกไปข้างนอก และการเชื่อมต่อภายในระบบไม่มีการเข้ารหัส&lt;/li&gt;
&lt;li&gt;Scalability: ระบบล่มเมื่อมีผู้ใช้งานพร้อมกันจำนวนมาก (High Concurrent) โดยเฉพาะในส่วนของการทำ Text Embedding&lt;/li&gt;
&lt;li&gt;Observability Blind Spots: เมื่อระบบประกอบด้วยหลาย Services เวลาระบบหน่วง ทีมหาจุดเกิดเหตุไม่เจอ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-solution-vectormesh-architecture"&gt;The Solution: VectorMesh Architecture&lt;/h3&gt;
&lt;p&gt;เพื่อแก้ปัญหาเหล่านี้ ผมจึงออกแบบ VectorMesh ให้เป็น Cloud-Native API Platform อย่างเต็มรูปแบบ โดยแยกส่วนประมวลผลออกจากกัน (Decoupling) เพื่อให้สามารถ Scale เฉพาะจุดที่โหลดหนักได้ นี่คือ Core Engineering Decisions ที่ผมเลือกใช้:&lt;/p&gt;</description></item><item><title>จ่ายแพงกว่าทำไม? เจาะลึกวิธีรัน Production บน K8s ด้วย Spot + On-Demand</title><link>https://khomkrit.cc/case-studies/spotvsondemand/</link><pubDate>Thu, 04 Jul 2024 21:32:12 +0700</pubDate><guid>https://khomkrit.cc/case-studies/spotvsondemand/</guid><description>&lt;p&gt;&lt;img alt="Cloud Instance " loading="lazy" src="https://khomkrit.cc/images/spotvsondemand.png"&gt;&lt;/p&gt;
&lt;h3 id="cloud-instance-มประเภทไหนบาง"&gt;Cloud Instance มีประเภทไหนบ้าง&lt;/h3&gt;
&lt;p&gt;Cloud Instance ภายใน Cloud Provider ชั้นนำอย่าง AWS, GCP หรือ Azure สามารถแบ่งประเภทการใช้งานหลักๆ ได้เป็น 2 รูปแบบ เพื่อตอบโจทย์ทั้งด้านความเสถียรและต้นทุน:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;On-Demand Instance: เป็นรูปแบบการใช้งานมาตรฐานที่เราเช่าใช้แบบรายชั่วโมงหรือรายวินาที ให้ความมั่นใจในด้าน Availability สูงสุด (24/7) เหมาะสำหรับ Workload ที่ต้องการความเสถียรและรันต่อเนื่องตลอดเวลา&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Spot Instance: ทางเลือกสำหรับสาย Optimized Cost ที่สามารถลดค่าใช้จ่ายได้ถึง 60 - 80% จากราคา On-Demand! แต่มาพร้อมกับข้อตกลงสำคัญคือ Cloud Provider มีสิทธิ์ &amp;lsquo;ยึดคืน&amp;rsquo; (Preempt) Instance ของเราได้ตลอดเวลา หากระบบต้องการ Capacity ไปใช้ในส่วนอื่น ซึ่งหมายความว่าแอปพลิเคชันของเราต้องถูกออกแบบมาให้รองรับการหยุดทำงานหรือการย้าย Node ได้โดยไม่กระทบต่อภาพรวมระบบ&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;เราควรจัดการ Workload แบบไหนดีให้เหมาะสมที่สุด ?&lt;/p&gt;
&lt;h3 id="the-golden-ratio-เลาถงสถาปตยกรรมทแบง-node-pool-เปน-2-สวน"&gt;The Golden Ratio: เล่าถึงสถาปัตยกรรมที่แบ่ง Node Pool เป็น 2 ส่วน:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;On-Demand Pool: สำหรับ Core Services ที่ห้ามตายเด็ดขาด (เช่น APISIX Ingress, Database, StatefulSet, ETCD)&lt;/li&gt;
&lt;li&gt;Spot Pool: สำหรับ Stateless Workloads(เช่น API Workers, AI Inference API, Background Jobs)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="prerequisites-สงทตองเตรยมตวกอนยาย-workload-ลง-spot"&gt;Prerequisites: สิ่งที่ต้องเตรียมตัวก่อนย้าย Workload ลง Spot&lt;/h3&gt;
&lt;p&gt;Stateless by Design: แอปพลิเคชันต้องไม่เก็บ State ไว้ใน Memory หรือ Local Disk หากถูกเตะออกกลางคัน State ต้องยังอยู่ใน Database (เช่น ScyllaDB หรือ Redis)&lt;/p&gt;</description></item></channel></rss>