Saladpuk.com
🏆 เนื้อหาหลัก
🏆 เนื้อหาหลัก
  • 💖สลัดผัก
  • 📰มีอะไรใหม่บ้าง
    • 2020
      • 2020-11
      • 2020-10
      • 2020-09
      • 2020-08
      • 2020-03
      • 2020-02
      • 2020-01
    • 2019
      • 2019-12
      • 2019-11
      • 2019-10
      • 2019-09
      • 2019-08
  • 🤔อ่านเรื่องไรดี ?
  • มือใหม่หัดเขียนโค้ด
    • 👶เขียนโค้ดด้วยภาษา C#
      • เกิดมาไม่เคยเขียนโค้ดมาก่อนเบย
      • 👶พื้นฐาน
        • 1.โปรแกรมที่ต้องลง
        • 2.โครงสร้างของโค้ด
        • 3.ชนิดของข้อมูล
        • 4.การสร้างตัวแปร
        • 5.คำสั่งพื้นฐาน
        • 6.การแปลงข้อมูล
        • 7.การเปรียบเทียบค่า
        • 8.การตัดสินใจด้วย IF statements
        • 9.การตัดสินใจด้วย Switch statements
        • 10.การทำงานซ้ำๆด้วย While
        • 11.การทำงานซ้ำๆด้วย Do While
        • 12.การทำงานซ้ำๆด้วย For
        • 13.การแก้โจทย์จากรูป
        • 14.มารู้จักกับ Array กัน
      • 🧑ระดับกลาง
        • 15.Value type vs Reference type
        • 16.ลดงานซ้ำๆด้วย Method
        • 17.มารู้จักกับ Class & Field กัน
        • 18.มารู้จักกับ Constructor กันบ้าง
        • 19.มาเขียน Method ใน Class กัน
        • 20.มารู้จักกับ Property กัน
        • 21.ลองใช้คลาสแบบจริงจังบ้าง
        • 22.การสืบทอด Inheritance
        • 23.Polymorphism
        • 24.Abstract Class
        • 25.Interface
        • 26.Namespace
        • 27.Enum
        • 28.Exception handler
        • 29.ลงลึกกับ string
        • 30.StringBuilder เพื่อนคู่ string
      • 👨⏳ระดับสูง
        • Generic
        • Delegates
        • Action & Func
        • Lambda expression
        • LINQ
        • พระคัมภีร์การใช้คำสั่ง LINQ
      • 💡Tips
        • 💡C# version 8.0
        • 💡Boxing & Unboxing
    • 👶Algorithm
      • 👾Algorithm Big-O
      • 👽Algorithm P & NP
    • 👦OOP
      • 💖Abstraction
      • 💖Encapsulation
      • 🏆Abstraction & Encapsulation
      • 💖Inheritance
      • 💖Polymorphism
      • 🏆Inheritance & Polymorphism
      • 📝ลองเขียน OOP ดูดิ๊
      • 👑OOP + Power of Design
      • 🥰เทคนิคในการออกแบบ
    • 👶บทสรุปฐานข้อมูล
      • เก็บรูปในฐานข้อมูล
      • Database indexing
      • การลบข้อมูล
    • 👦Communication Patterns
    • 👦Design Patterns
      • 🤰Creational Patterns
        • 🏭Factory Method
        • 🏭Abstract Factory
        • ☝️ Singleton Pattern
        • 🏗️ Builder Pattern
        • 🎎Prototype Pattern
      • 🧱Structural Patterns
        • 🔌Adapter Pattern
        • 📪Proxy Pattern
  • Puzzle
    • 🧠Challenges
      • 🐴Google ม้า 25 ตัว
      • 🌉Amazon เสา 2 ต้น
      • 🥇ทองเก๊
      • 💊ยาต้านโควิด
      • 🎩CP หมวก 5 ใบ
      • 🧓Einstein's Riddle 01
  • พื้นฐานที่ควรต้องรู้
    • 🐳Docker
      • 📦Docker Containers
      • 🃏Docker Exercise 01
      • 🛠️ Docker Tools
      • 🗃️ Docker Registry
      • 🖼️ Container Image
      • 📢Docker Push
      • 🔄WSL
    • 👶Clean Code
      • 🧓Uncle Bob - Clean Code
      • 🧓Uncle Bob - Comments
      • 🧓Uncle Bob - Naming
      • 🧓Uncle Bob - Mindset
      • 🧓Uncle Bob - TDD
    • 👶Code Smells
    • 👶สิ่งที่คนเขียนโค้ดมักเข้าใจผิด
    • 👶AI พื้นฐาน
    • 👶Git พื้นฐาน
      • Git branching strategy
    • 👶Cloud พื้นฐาน
    • 👶UML พื้นฐาน
      • Activity Diagram
      • Class Diagram
      • Sequence Diagram
      • Use case Diagram
      • บทสรุปการใช้ UML
    • 👶Data Scientist
      • การเลือก Algorithms ให้ AI (1/5)
      • การเตรียมข้อมูลให้ AI (2/5)
      • หลักการตั้งคำถามให้ AI (3/5)
      • แฉความลับของ AI Model (4/5)
      • หัดเขียน AI จาก AI ของคนอื่น (5/5)
    • 👶DevOps พื้นฐาน
    • 👶Docker ขั้นพื้นฐาน
      • Image and Container
      • แชร์ Docker Image ที่สร้างไว้
    • 👶Microservices พื้นฐาน
      • Microservices ที่ดีมีลักษณะยังไง
      • Microservices Tips
      • จาก Monolith สู่ Microservices
    • 👶ความรู้พื้นฐานในการทำเว็บ
    • 👦Bottlenecks of Software
      • หัวใจที่สำคัญที่สุดของฐานข้อมูล
    • 👦Agile Methodology
      • Agile in a Nutshell
      • Software Development Life Cycle
      • Code Review
    • 👦Security พื้นฐาน
      • การเก็บรหัสผ่านที่ถูกต้อง
      • Security in actions
        • Hash function
      • Security Principles
      • 😎The Matrix 1
      • 😎The Matrix 2
      • HTTPS in a nutshell
    • 👦SOLID Design Principles
      • มารู้จักกับ SOLID กันดีกว่า
      • Single-Responsibility Principle
      • Open/Closed Principle
      • Liskov Substitution Principle
      • Interface Segregation Principle
      • Dependency-Inversion Principle
  • Cloud Computing
    • 👶Microsoft Azure 101
      • สมัคร Microsoft Azure
      • รู้จักกับ Resource Groups
      • สร้างเว็บตัวแรกกัน
      • สร้าง Virtual Machine กัน
      • ประเภทของคลาว์เซอร์วิส
      • มาสร้าง Logic App กัน
      • มาสร้าง Function App กัน
      • คลาว์คิดเงินยังไง ?
      • Cloud Native
      • Guideline for Cloud scaling
      • Auto Scaling
    • 👶Azure App Services
    • 👶App Service Plan
    • 👶Azure Storage
      • Blob storage
        • ลองสร้างที่เก็บไฟล์กันเลย
        • เข้าใจ Blob storage ให้มากขึ้น
        • ลองเขียนโค้ดอัพโหลดไฟล์กันบ้าง
        • สร้างเว็บจากที่ฝากไฟล์บนคลาว์
    • 👶Azure Bot Service
      • Bot เข้าใจเราได้ยังไงกันนะ
    • 👶Azure Cognitive Services
      • การสร้าง Cognitive Services
      • การ Login ด้วยใบหน้า
      • อ่านลายมือจากรูปเป็นตัวอักษร (OCR)
      • เขียน AI แยกของต่างๆทำยังไง?
      • เขียนแอพ ทายอายุ บอกเพศ ง่ายจิ๊ดเดียว
      • เขียนแอพให้ AI อธิบายรูปเป็นภาษาคน
    • 👶Machine Learning Studio
      • มาสร้าง AI ของแท้ตัวแรกของเรากัน
      • สร้าง AI ตัดสินใจอนุมัติบัตรเครดิต 💳
      • ลองเรียกใช้ AI ของเรากัน
    • 👶Azure Service Fabric
      • สร้าง Service Fabric กัน
    • 👶Blockchain
      • Blockchain ทำงานยังไง ?
      • Consensus Algorithm คืออะไร ?
      • สร้าง Blockchain ใช้เองกัน !
      • หัดเขียน Smart Contract กัน
    • 👶Power BI
    • 👶Azure Web App
      • เซิฟเวอร์บนคลาว์ ราคา? ต่าง?
    • 👶Azure DevOps
      • เล่น Azure DevOps กัน
      • เล่นกับ Repository
      • ลองทำ Continuous Integration (CI)
      • ลองทำ Continuous Delivery (CD)
      • เล่น Kanban Board
    • 🤠Cloud Playground
      • การป้องกันความลับหลุดตอนที่ 1
      • การป้องกันความลับหลุดตอนที่ 2
      • การป้องกันความลับหลุดตอนที่ 3
      • การป้องกันความลับหลุดตอนจบ
  • Software Testing
    • 👦Test-First Design
    • 👦Test-Driven Development
      • 1.มารู้จักกับ TDD กันดีกว่า
      • 2.Test cases เขาเขียนกันยังไงนะ
      • 3.เครื่องมือในการทดสอบ
      • 4.การใช้ Theory และ InlineData
      • 5.โค้ดที่ทดสอบได้
      • 6.Mantra of TDD
      • 7.Functional & None-Functional testing
      • 8.Manual vs Automation testing
      • 9.Automation Frameworks in .NET
      • 10.Mock Framework
      • 11.มาเรียนการใช้ Moq กันเถอะ
      • 12.สรุป
  • Web
    • 👦Web API
      • 1.Web API คืออะไร
      • 2.ติดตั้ง .NET Core SDK
      • 3.สร้าง Web API ตัวแรกกัน
      • 4.Verbs
      • 5.Swagger เพื่อคู่ API
      • 6.การใช้ Model
      • 7.เรียก Web API ผ่าน Postman
      • 8.มาจัดกลุ่ม API กัน (1/2)
      • 9.มาจัดกลุ่ม API กัน (2/2)
  • Software Design
    • 🤴Design Patterns
      • 🦈Creational patterns
        • Abstract Factory
        • Builder
        • Factory Method
        • Prototype
        • Singleton
      • 🦈Structural patterns
        • Adapter
        • Bridge
        • Decorator
        • Facade
        • Proxy
      • 🦈Behavioral patterns
        • Chain of Responsibility
        • Command
        • Iterator
        • Mediator
        • Memento
        • Observer
        • State
        • Strategy
        • Template Method
        • Visitor
Powered by GitBook
On this page
  • 🤔 State คือไย ?
  • 🔥 Stateful
  • 🔥 Stateless
  • 🧰 ติดตั้งโปรแกรม
  • ⚒️ สร้างโปรเจค Service Fabric กัน
  • 🔥 โครงสร้างโปรเจค (Service Fabric)
  • 🔥 โครงสร้างโปรเจค (Services)
  • 🃏 ลองเปิดเว็บดู
  • 🃏 Service Fabric Explorer
  • 🎯 บทสรุป

Was this helpful?

Export as PDF
  1. Cloud Computing
  2. Azure Service Fabric

สร้าง Service Fabric กัน

🤔 อยากได้แอพที่ อึด ถึก ทน ต้องเริ่มยังไงกันนะ ?

PreviousAzure Service FabricNextBlockchain

Last updated 5 years ago

Was this helpful?

ตามชื่อหัวข้อเลยคือเราจะมาสร้างแอพที่อยู่บน Service Fabric กัน ซึ่งก่อนที่เราจะสร้างเราต้องรู้จักกับของ 2 อย่างกันก่อนนั่นก็คือ สิ่งที่เรียกว่า Stateful และ Stateless นั่นเอง เพราะทั้ง 2 อย่างนี้มีความจำเป็นในการที่เราจะสร้างของใน Service Fabric นั่นเอง ดังนั้นเรามารู้จักมันก่อนนิสนุง

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

🤔 State คือไย ?

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

🔥 Stateful

เป็นการบันทึกข้อมูลไว้ในตัวเซิฟเวอร์เอง เช่น รายการสินค้าในตะกร้าก็จะเก็บไว้ในตัวเซิฟเวอร์ตัวนั้นเอง ซึ่งข้อดีของมันคือ มันเร็ว แต่ก็ต้องแลกมากับข้อเสียว่าข้อมูลมันจะติดอยู่กับเซิฟเวอร์ตัวนั้นเท่านั้น เช่นถ้าเรามีเซิฟเวอร์ 2 ตัว แล้วลูกค้าเข้ามาเพิ่มสินค้าลงตะกร้าที่เซิฟเวอร์ A เสร็จแล้วออกจากเว็บไป พอเขากลับมาใหม่ในรอบนี้เขาอาจจะเข้ามาที่เซิฟเวอร์ B ก็ได้ ซึ่งข้อมูลตะกร้าของเขาอยู่ในเซิฟเวอร์ A ดังนั้นเขาจะได้ตะกร้าสินค้าเปล่านั่นเอง ดังนั้นปัญหาหลักๆของการทำ Stateful คือ การขยายเซิฟเวอร์ เพราะข้อมูลไปติดอยู่กับเซิฟเวอร์ใดเซิฟเวอร์หนึ่งนั่นเอง

🔥 Stateless

เป็นการบันทึกข้อมูลไว้ที่อื่น หรือไม่บันทึกเลย ซึ่งข้อดีคือ ทุกเซิฟเวอร์เหมือนกันหมด ลูกค้าจะมาใช้งานที่เซิฟเวอร์ A หรือ B ก็ไม่มีความต่าง ทำให้เราสามารถขยายเซิฟเวอร์เพื่อรองรับโหลดหนักๆได้ แต่ข้อเสียคือ มันจะช้ากว่า Stateful เพราะมันต้องไปเอาข้อมูลมาจากตัวเก็บข้อมูลอีกที

Stateful & Stateless รูปแบบการทำงานทั้ง 2 แบบเป็นแค่แนวทางในการเลือกว่าเซิฟเวอร์ หรือ service ของเราตัวนั้นจะเป็นแบบไหน ไม่ได้บอกว่าใครดีกว่ากัน เพราะแต่ละแบบมีจุดดีจุดเด่นเหมาะกับงานคนละรูปแบบกัน ดังนั้นถ้าเราเลือกประเภทได้เหมาะกับงาน มันก็จะทำงานได้เร็วและไม่มีปัญหาครับ

  • เรื่อง Stateful & Stateless มันไม่ได้ใช้แค่ Microservices Architecture เท่านั้น แต่ในทุกๆอย่างที่เราเขียนมันก็มีเรื่องพกวนี้หมด ดังนั้นเวลาออกแบบอะไรต่างๆให้คำนึงถึงเรื่องพวกนี้ไว้ด้วยเสมอ

🧰 ติดตั้งโปรแกรม

หลักจากที่เข้าใจหลักการของ Server state แล้วถัดมาเราก็จะลองสร้าง Service Fabric กันดูบ้าง โดยเราจะต้องติดตั้งโปรแกรม 2 ตัวนี้ก่อน ตามลำดับด้วยนะ นั่นก็คือ

เจ้า Visual Studio 2019 Community เมื่อติดตั้งเสร็จให้ติ๊กเลือกตัว .NET Core ด้วยนะครับ แล้วกด OK ไป

⚒️ สร้างโปรเจค Service Fabric กัน

ให้เปิดตัว Visual Studio 2019 Community โดยต้องเปิดเป็น ADMIN mode ด้วยนะ โดยวิธีการเปิดคือคลิกขวาที่ตัว Icon ของ Visual Studio แล้วเลือเป็น Run as administrator ตามรูปด้านล่าง

เมื่อ Visual Studio ถูกเปิดขึ้นมาแล้ว ก็เลือก Create a new project ได้เลยครัช

ถัดมาให้เลือก Service Fabric Application (ถ้าหาไม่เจอให้พิมพ์ชื่อมันลงไปในช่อง search ด้านบนได้นะ)

ถัดไปก็ตั้งชื่อโปรเจคและเลือกว่าจะสร้างไว้ที่ไหนตามสะดวก แล้วก็กด Create ได้เลย ซึ่งผมจะตั้งชื่อและที่อยู่ตามรูปด้านล่างนี้นะ

สุดท้ายเขาจะให้เราเลือกว่าตัว service ตัวแรกของเราเป็นแบบไหน ซึ่งในตัวอย่างนี้ผมจะขอสร้างเว็บไซต์ที่เป็น Stateless ละกัน ดังนั้นผมก็จะเลือกเป็น Stateless ASP.NET Core ส่วนชื่อ service ผมปล่อยเป็น Web1 ไปก่อนละกัน

ถัดมาอันนี้แล้วแต่เลยว่าถนัดเขียนอะไร ซึ่งในตัวอย่างผมขอเลือกเป็น MVC ละกัน

🔥 โครงสร้างโปรเจค (Service Fabric)

เรียบร้อยแบ้ว เพียงแค่นี้เราก็ได้เว็บไซต์ที่พร้อมจะทำงานอยู่บน Service Fabric ละ ส่วนตัวโปรเจคที่เขาสร้างให้เราจะมี 2 ตัวนั่นก็คือตัว Service Fabric เอง และตัวเว็บของเราอีกตัวตามรูปด้านล่างนั่นเอง

ซึ่งตัวโปรเจคที่เป็น Service Fabric จะเป็นตัวเก็บข้อมูลทั้งหมดว่า เวลาที่เราจะทำการสร้าง Cluster นั้นมันจะประกอบไปด้วย Service ย่อยๆอะไรบ้าง และแต่ละตัวจะมีการตั้งตัวสำรอง (Replica node) หรือมีการแบ่งส่วน (Sharding) ยังไงบ้าง ซึ่งข้อมูลที่ว่ามาทั้งหมดจะถูกเก็บไว้ในโปรเจคนี้นั่นเอง

🔥 โครงสร้างโปรเจค (Services)

ถัดมาที่ตัวเว็บไซต์ของเรา หรือเราจะเรียกมันว่า Service ก็ได้นะในมุมของ Microservices Architecture ก็จะเป็น ASP.NET MVC ธรรมดานี่แหละ แต่มันจะเพิ่มเติมหน่อยนึงคือ มันจะมี folder ที่เอาไว้เก็บการตั้งค่าต่างๆให้เข้ากับการทำงานบน Service Fabric นั่นเอง ซึ่งไฟล์ที่สำคัญของมันคือไฟล์ ServiceManifest.xaml ลองเปิดเข้าไปดูตามรูปด้านล่างเลย

ซึ่งภายในไฟล์นั้นจะมีการตั้งค่าต่างๆเอาไว้อยู่ โดยสิ่งแรกที่เราต้องรู้จักคือเจ้าบรรทัดเกือบล่างสุดตัวนี้

<Resources>
  <Endpoints>
    <!-- This endpoint is used by the communication listener to obtain the port on which to 
          listen. Please note that if your service is partitioned, this port is shared with 
          replicas of different partitions that are placed in your code. -->
    <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8731" />
  </Endpoints>
</Resources>

ซึ่งเราจะเห็นตัว Port ที่ถูกตั้งไว้เพื่อให้โลกภายนอกสามารถติดต่อเข้ามายัง Service ตัวนี้ได้นั่นเอง ซึ่งในตัวอย่างของผมคือ port 8731 ถ้าเพื่อนๆไม่ถูกใจก็สามารถแก้ไขได้จากไฟล์นี้ได้เลย

🃏 ลองเปิดเว็บดู

ให้ลองกด Run ตามปรกติได้เลยโดยการกดปุ่ม CTRL + F5 ได้เลยครัช ส่วนถ้าใคร Run ไม่ได้ลองเช็คดูนะว่าตัว Platform ถูกเลือกเป็นตัวที่ถูกต้องหรือยังเพราะมันใช้ Any CPU ไม่ได้ และต้องอยู่ใน Admin mode ด้วยนะ

เรียบร้อยละ ได้เว็บไซต์ที่เป็น Stateless ขึ้นมาตัวนึงละ โดยสังเกตว่าเราเข้าผ่าน port ที่เรากำหนดไว้เท่านั้น

🃏 Service Fabric Explorer

คราวนี้ถ้าเราอยากดูว่าภายใน Cluster ของเรามี services อะไรอยู่บ้าง และแต่ละตัวทำงานปรกติดีหรือเปล่า ก็สามารถเข้าไปได้ผ่าน Port 19080 เลยครัช

🎯 บทสรุป

จากตัวอย่างนี้ก็น่าจะพาเห็นภาพกันแล้วนะว่าการสร้าง Service Fabric เพื่อให้เราได้ความสามารถต่างๆในการทำงานกับ Microservices Architecture และรวมถึงการจัดการ Node ต่างๆภายใน Cluster นั้นจริงๆไม่ได้ยากอะไรเลย ดังนั้นถัดไปเดี๋ยวเราจะลองไปลองสร้างเว็บไซต์ที่เป็น Stateful กันดูบ้างนะว่า เว็บไซต์ที่ไม่ต้องพึ่ง Database เลยแต่ก็ยังสามารถทำงานโดยรองรับการขยายเซิฟเวอรืได้เขาทำกันยังไงภายใน Service Fabric ครัช

👶
👶 Azure Service Fabric
Visual Studio 2019 Community
Microsoft Azure Service Fabric SDK