# Azure Service Fabric

ในคอร์สนี้เราจะมาสอนการสร้าง **Microservices Architecture** ทั้งในเครื่องตัวเองและบนคลาว์กันดูบ้างว่ามันจะเป็นยังไง โดยในคอร์สนี้เราจะพามาเล่นคลาว์ของฝั่ง Microsoft ที่ชื่อว่า Azure และเราจะสร้างตัว microservices ไว้กับตัวที่มีชื่อว่า **Service Fabric** ที่ออกแบบมารองรับการทำงานของ architecture นี้โดยเฉพาะครับ

{% hint style="success" %}
**แนะนำให้อ่าน**\
ในบทความนี้เราจะพาเล่นคลาว์กัน แต่ถ้าเพื่อนๆยังไม่เคยลองเล่นคลาว์ของ Microsoft เลยก็สามารถเข้าไปลองเล่นได้ที่คอร์ส [👶 Microsoft Azure 101](https://saladpuk.gitbook.io/learn/cloud/azure101) หรือถ้ายังไม่รู้เลยว่าคลาว์คืออะไรก็สามารถเข้าไปศึกษาได้จากบทความนี้เลยครับ [👶 Cloud พื้นฐาน](https://saladpuk.gitbook.io/learn/basic/cloud101)
{% endhint %}

## 🤔 Service Fabric คือไร

เวลาที่เราจะสร้างแอพที่ **อึด ถึก ทน** โดยเฉพาะอย่าง Microservices Architecture แล้วละก็ มันจะมีหลายเรื่องเลยที่เราจะต้องไปลงมือจัดการด้วยตัวเอง แต่เดี๋ยวก่อนถ้าเราใช้ Service Fabric แล้วล่ะก็ ชีวิตของเราก็จะสบายขึ้น เพราะเจ้า Service Fabric มันจะรับผิดชอบดูแลให้เอง ดังนั้น Developer ก็มีหน้าที่แค่ลงมือเขียนแอพตามที่ตัวเองถนัด โดยไม่ต้องสนใจ Infrastructure ต่างๆเลย แถมของที่ได้ยังเป็นสิ่งที่เรียกว่า **Reliable Microservices & Containers** อีกด้วย

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-Lu0r80_h5YOPXui46sX%2Fimage.png?generation=1583529164093969\&alt=media)

## 🤔 ขอตัวอย่างแบบแจ่มๆหน่อย

เพื่อความรวดเร็วและเห็นภาพผมขอโชว์เป็น Video ด้านล่างนะ ซึ่งผมเขียนเป็นเกมปิงปอง โดยมีผู้เล่น 2 ฝั่ง และมีการคุยกันผ่าน Board game โดยทั้งหมดนี่ผมเขียนไว้ใน Service Fabric ซึ่งมันก็จะรับปิงปองไปเรื่อยๆ แล้วผมก็จะลองแกล้งทำให้เซิฟเวอร์ล่มดู แล้วมาดูกันว่ามันจะเกิดอะไรขึ้นกับแอพที่อยู่บน Service Fabric

{% embed url="<https://youtu.be/gQDOuVaLAhk>" %}

จากในตัวอย่างก็คือสิ่งที่เรียกว่า **Reliable Microservices** นั่นเอง ซึ่งปรกติถ้าเราอยากให้แอพของเราทำงานได้ต่อได้แม้ว่าเซิฟเวอร์จะล่มไปก็ตาม เราจะต้องมีการออกแบบทำ infrastructure อีกเยอะเลย ซึ่งโค้ดที่เราเขียนกันโดยปรกติมันจะทำแบบนี้ไม่ได้ แต่ข้อดีในการทำบน Service Fabric ก็คือ เราสามารถทำให้การเขียนโค้ดแบบเดิมๆของเรามีความสามารถในลักษณะนี้ได้นั่นเอง

## 🤔 ทำไมเซิฟล่มแล้วทำงานต่อได้ ?

### 😢 ปัญหา

ก่อนที่จะไปอธิบายว่ามันเกิดแบบนี้ได้ยังไง ผมขออธิบายก่อนว่าโดยปรกติถ้าเราเขียนโค้ดโดยไม่ได้ออกแบบเพื่อป้องกันเรื่องเซิฟเวอร์ล่ม มันจะเกิดสิ่งที่เรีกยว่า **Single point of failure** นั่นเอง เช่น เรามีแอพ 3 ตัวต่อไปที่ database ก้อนเดียวกันตามรูป

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LpqjWHlo8xC0s3vAo6k%2Fimage.png?generation=1583529150477170\&alt=media)

เจ้าแอพทั้ง 3 ตัวนี้ก็ทำงานตามปรกติไม่มีปัญหาอะไร จนกระทั่งตัว Database ที่มันต่อไปเกิดล่มด้วยสาเหตุอะไรก็แล้วแต่ (รวมถึงการทำ maintenance ด้วยนะ) ซึ่งผลที่ตามมาคือเจ้าแอพทั้ง 3 ตัวมันก็จะทำงานต่อไม่ได้นั่นเอง แม้ว่าตัวมันเองจะไม่ได้ล่มก็ตาม (เพราะมันไปดำเนินการต่างๆกับ database ไม่ได้ไงล่ะ)

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LrcVkU6xB04Xk2VvsMk%2Fimage.png?generation=1583529117232942\&alt=media)

จากที่ว่ามานี่แหละคือสิ่งที่เรียกว่า **Single point of failure**

{% hint style="success" %}
**Single point of failure**\
คืออาการของระบบที่ **เมื่อมีของบางอย่างพัง มันจะทำให้ระบบของเราใช้งานไม่ได้ทั้งหมดเลย** โดยไม่สนใจว่ามันจะเป็นเรื่องเล็กน้อยแค่ไหนก็ตาม เปรียบเทียบง่ายๆ ถ้าหัวใจคนเราหยุดเต้น แม้ว่าอวัยวะทุกอย่างเราจะทำงานได้เป็นปรกติ สุดท้ายก็ไม่รอดอยู่ดีนั่นเอง
{% endhint %}

### 😄 การแก้ปัญหา

ปรกติเราจะต้องจัดการเรื่องของ Infrastructure & Architecture เพื่อแก้ปัญหาเรื่องพวกนี้ เพื่อจะได้รับมือเมื่อมันล่ม เช่นการทำ Microservices เพราะแบบง่ายสุดมันก็จะตายแค่ service ของมันตัวเดียวเท่านั้น ส่วน service อื่นๆก็อาจจะใช้ **Default value strategy** ไปแก้ขัดระหว่างที่มันติดต่อหา service ที่ล่มไม่ได้นั่นเอง

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LrKXRw5UBmk5vP78rrj%2Fimage.png?generation=1583529168082543\&alt=media)

แต่ทั้งหมดนี่เราไม่ต้องทำแบบนี้ก็ได้ เพราะเจ้า **Service Fabric** เขาจัดการเรื่องเหล่านี้ให้เราทั้งหมดแล้ว อีกทั้งเราไม่ต้องใช้ Database อีกต่อไปเลยก็ได้นะ โดยสิ่งที่ service fabric ทำให้เราคือเขามีการเก็บข้อมูลต่างๆลงสิ่งที่เรียกว่า **Reliable Collection** ซึ่งมันจะมีการทำ Caching ต่างๆ และเขามี SDK รองรับ เพื่อสุดท้ายก็จะเขียนลง Disk ต่อ ดังนั้นขอบอกเลยว่า มันเร็วกว่าการไปต่อ Database เสียอีก

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-Lpr2vAYa4qOhvYE1l-A%2Fimage.png?generation=1583529168559864\&alt=media)

นอกจากนี้แอพของเราเวลาทำงานใน Service Fabric นั้นจะมีตัวหลักที่คอยทำงานอยู่ 1 ตัว และมีตัวสำรองอีกหลายๆตัวแล้วแต่เราจะตั้ง ซึ่งเมื่อไหร่ก็ตามที่ตัวหลักไม่สามารถทำงานต่อได้ด้วยเหตุผลอะไรก็ตาม เจ้าตัวสำรองก็จะถูกสลับมาทำงานแทนตัวหลักได้ต่อเลย

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LqRkoAzwm2DaQwXqZFG%2Fimage.png?generation=1583529100040934\&alt=media)

สุดท้ายเรื่องข้อมูลที่เมื่อมีการเปลี่ยนแปลงเกิดขึ้นปุ๊ป ตัวหลัก ก็จะทำการกระจายผลไปยังตัวสำรองต่างๆ เพื่อให้ตัวสำรองมีข้อมูลที่ตรงหรือใกล้เคียงกับตัวหลักที่สุด เพื่อให้ตัวสำรองพร้อมมาทำงานแทนที่ตัวเองนั่นเอง

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LshaYERTCcCsIHO-0yN%2Fimage.png?generation=1583529176688210\&alt=media)

## 💡 Monitoring

อีกหนึ่งในความยากเวลาที่เราทำงานกับ **Cluster** ก็คือการบริหารจัดการ service ต่างๆที่อยู่ข้างใน เช่นมันล่มหรือเปล่า จะอัพเกรด-ดาวเกรดเวอร์ชั่นดีไหม หรืออะไรก็ตามแต่ ใน Service Fabric เขาก็เตรียมของพวกนี้ให้เราใช้งานเรียบร้อยแล้วโดยที่เราไม่ต้องไปยุ่งอะไรมันเลย ด้วยสิ่งที่เรียกว่า **Service Fabric Explorer** นั่นเอง เช่นตัวเกมปิงปองในวีดีโอ มันก็จะมี service อยู่ข้างในทั้งหมด 4 ตัว และมีการคุยกันตามรูป

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LnIM4VmHs7Pd-L3xzOf%2Fimage.png?generation=1583529119263679\&alt=media)

ซึ่งเจ้าตัว Service Fabric Explorer ก็จะทำหน้าที่คอยให้เราดูแลควบคุม services ต่างๆนั้นอีกทีตามที่ผมโชว์ในวีดีโอนั่นเอง

![](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LrnSquhynMfDjFSC9rP%2Fimage.png?generation=1583529104984842\&alt=media)

## 💡 Any OS, Any Cloud

ทั้งหมดที่ว่ามาเราสามารถเล่น Service Fabric บนเครื่องตัวเอง หรือบนคลาว์เจ้าไหนก็ได้ แถมจะใช้ OS อะไรก็ได้ตามความต้องการเลย

![https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-overview](https://479516123-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lm0_idNbY6k1lwp6hm4%2F-M1lfqlFTvI3gmheTI_q%2F-LnFRr4zDF_ljWWdjJzF%2Fimage.png?generation=1583529164010101\&alt=media)

## 🧭 เนื้อหาทั้งหมดของคอร์สนี้

{% hint style="info" %}
คอร์สนี้กำลังค่อยๆเขียนอยู่ ซึ่งจะค่อยๆทยอยอัพเดทลงตรงนี้เรื่อยๆ ส่วนใครที่ไม่อยากพลาดอัพเดทคอร์สนี้หรืออยากรับบทความใหม่ๆ สามารถเข้าไปกด Like เพื่อรับข่าวสารใหม่ๆจาก [**Facebook Blog: Mr.Saladpuk**](https://www.facebook.com/mr.saladpuk) ได้นะครับ 😍
{% endhint %}

{% content-ref url="azure-service-fabric/create" %}
[create](https://www.saladpuk.com/cloud/azure-service-fabric/create)
{% endcontent-ref %}

* ลองเขียนเว็บ Stateful ตัวแรกของเรากัน
* ลองสร้าง Reliable Microservices หน่อยซิ
* มารู้จักกับการใช้งาน State ของมันหน่อย
* มารู้จักกับ Actor กันดูบ้าง
* คิดไรออกเดี๋ยวเอามาใส่ในช่องนนี้ละกันนะ
