วงจรชีวิตของ service¶
service หนึ่งตัวจะทำงานกับข้อมูลของแอปใดได้ ต้องผ่าน 2 ระดับ: เข้าระบบ (ระดับระบบ) แล้ว เข้าแอป (ระดับแอป) หน้านี้อธิบายลำดับตั้งแต่ตั้งระบบจากศูนย์ การเสียบ service เข้า-ออก และกลไก "ตามทัน" ข้อมูล
- ตั้งระบบจากศูนย์ (init-system)
- ระดับระบบ: register / resign
- ระดับแอป: เพิ่ม / ถอด service ในแอป
- refresh-data: ตามข้อมูลให้ทัน
- กุญแจ 3 ชั้น (ภาพรวม)
- ลำดับการเสียบ service ใหม่
ตั้งระบบจากศูนย์ (init-system)¶
ทำครั้งเดียวตอนติดตั้งระบบ (ผ่าน Gumon CLI หรือชุด docker ของ core set) — เกี่ยวเฉพาะ core set
- core สร้างแอป
SYSTEMและผู้ใช้ผู้ดูแลระบบคนแรก - core ลงทะเบียน service ใน core set ทุกตัว พร้อมออก SystemCertificate ให้ทีละตัว
- core ผูก core set ทุกตัวเข้าแอป
SYSTEM(AppCertificate · AppCredential · ค่าตั้ง service) - core ส่ง
init-system⇒ core set แต่ละตัวสร้างข้อมูลตั้งต้นของตัวเอง - ได้กุญแจของแต่ละ service ไว้ติดตั้งคู่กับ service นั้น จากนั้นรันทุกตัวตามปกติ
หลังจากนี้ ทุกแอปใหม่ที่สร้าง (sync-application) core จะผูก core set ทุกตัวเข้าแอปนั้นให้อัตโนมัติ และ unit สร้าง role admin ของแอปให้ (add-admin-app-role)
ระดับระบบ: registerService / resignService¶
ทำที่ system-admin › Service (GraphQL ของ core)
| ผล | |
|---|---|
| register | service ถูกบันทึกในทะเบียนของระบบ · core ออก SystemCertificate ใหม่ให้ service นั้น (ได้รับครั้งเดียวตอนลงทะเบียน เก็บไว้กับ service ห้าม commit) · ระบุ isCoreSet (service ธุรกิจ = false) และ URL หน้า admin ย่อยถ้ามี |
| resign | ลบข้อมูล service นั้นออกจากระบบ · ระบบไม่ส่งข้อมูลใดถึง service นั้นอีก · ถ้าจะกลับมาต้อง register ใหม่และได้กุญแจชุดใหม่ |
service ต้องถอดออกจากทุกแอปก่อน resign และ service ใน core set ถอดออกไม่ได้
service ลงทะเบียน/ประกาศตัวผ่าน Kafka ได้ด้วย topic register-service (ดู Kafka topic มาตรฐาน)
ระดับแอป: addServiceToApp / removeServiceFromApp¶
ทำที่ system-admin › app › app-service
- add — core สร้าง AppCertificate ของ service ในแอปนั้นแล้วส่งผ่าน
sync-app-certificate· คัดลอกค่าตั้งของ service มาเป็นค่าตั้งของแอป · ถ้าเลือก refresh data core จะส่งrefresh-dataให้ทุก service ในแอป ⇒ service ที่เพิ่งเข้ามาได้ข้อมูลเดิมของแอปครบ - remove — ลบ AppCertificate ของ service ในแอปนั้น ⇒ service รับข้อมูลของแอปนั้นไม่ได้อีก
AppCertificate เป็นตัวตัดสินว่า service เห็นแอปไหนได้ — service ตรวจทุกข้อความว่ามี AppCertificate ของตัวเองในแอปนั้นก่อนทำงาน ไม่มี = ไม่รับ ดังนั้น service ที่ไม่ได้ถูกเพิ่มเข้าแอปใด ใช้ข้อมูลของแอปนั้นไม่ได้ และใช้ข้ามแอปไม่ได้
refresh-data: ตามข้อมูลให้ทัน¶
เพราะแต่ละ service เก็บสำเนาข้อมูลที่ตัวเองต้องใช้ไว้เอง service ที่เพิ่งเข้ามาจึงต้องได้ข้อมูลเดิมก่อนจะทำงานได้
- core ส่ง
refresh-data(headerserviceKey= service ปลายทาง) - service ปลายทางกันการทำซ้ำด้วย id ของคำสั่ง แล้ว ส่งข้อมูลที่ตัวเองเป็นเจ้าของขึ้นไปใหม่ เช่น application ส่ง
sync-application· unit ส่ง organization/role · service ธุรกิจส่งข้อมูล domain ของตัวเอง - ทุก service ส่ง
sync-permissionของตัวเองให้ access-control - service ล้าง cache Redis ของตัวเอง
สั่งเองได้ที่ system-admin › app › refresh-data (เลือกทุก service หรือบางตัว) เช่นหลังแก้เมนูของหน้า admin ย่อย หรือเมื่อต้องการให้สำเนาข้อมูลตรงกันใหม่
กุญแจ 3 ชั้น (ภาพรวม)¶
| ชั้น | ผูกกับ | เกิดเมื่อ | ใช้ทำอะไร |
|---|---|---|---|
| SystemCertificate | service หนึ่งตัว | register service (core set: ตอน init-system) | ยืนยันตัวตนของ service ต่อ core · ให้ core ส่งข้อมูลที่มีแต่ service นั้นถอดได้ (เช่น privateKey ของ AppCertificate) |
| AppCertificate | service หนึ่งตัวในแอปหนึ่งแอป | เพิ่ม service เข้าแอป | publicKey/privateKey สำหรับเข้ารหัสข้อมูลถึง service นั้นในแอปนั้นเท่านั้น · เป็นตารางเดียวที่บอกว่า service ไหนมีสิทธิ์ในแอปไหน |
| AppCredential | แอป (ต่อ clientId) |
สร้าง credential ของแอปใน authentication | ตรวจ token ของผู้ใช้ในแอป (key ตรวจ JWT + กฎของ token) · credential type SYSTEM ให้ระบบภายนอกเรียก API ด้วย clientId + clientSecret |
ทั้ง AppCertificate และ AppCredential ถูก sync มาไว้ที่ทุก service ล่วงหน้า ⇒ service ตรวจ token และสิทธิ์ของ request ได้เองโดยไม่ต้องถามใคร
ลำดับการเสียบ service ใหม่¶
- สร้าง service จาก template แล้วตั้ง
serviceKeyของตัวเอง (ดู สร้าง Service ใหม่ · สิ่งที่ Service ต้องมี) - register service ใน system-admin (
isCoreSet: false) แล้วเก็บกุญแจที่ได้ไว้กับ service - เพิ่ม service เข้าแอปที่ต้องใช้ ⇒ service ได้ AppCertificate · AppCredential · ข้อมูลแอป · UserPolicy ⇒ ตรวจ request จากหน้าบ้านได้ทันที
- สั่ง
refresh-data⇒ service ส่งsync-permissionให้ access-control แล้วผู้ดูแลผูก permission เข้ากับ role - ต่องาน domain: เพิ่ม topic ที่ต้องรับ/ส่ง · เก็บสำเนาข้อมูลของ service อื่นไว้ใช้เอง
- ใช้บริการกลางผ่าน topic (ตั้งเวลา · แจ้งเตือน · ไฟล์) — ไม่ทำ cron เอง ให้ใช้ schedule
- ถ้ามีหน้า admin ย่อย: ทำตาม หน้าบ้าน (Admin UI)
อัปเดตจากคำผู้พัฒนาและโค้ด gumon-tech · 2026-10-05