monolithic to microservices internet innovation lab · 12 factor app hand on: create new django...
TRANSCRIPT
Monolithic to MicroservicesInternet Innovation Lab
http://bit.ly/WUNCA37 [email protected]
Agenda● Monolithic VS Microservices● Transition Path● DevOps● 12 Factor App● Hand on: Create new Django application● Hand on: Docker build
Ant Colony
กิจกรรมใหออกแบบ Architecture หรือ บล็อกไดอะแกรม เพื่อทําระบบ Shopping Online (5 นาที)
Lazada Shopping Online
กิจกรรมใหออกแบบ Architecture หรือ บล็อกไดอะแกรม เพื่อทําระบบ Shopping Online (5 นาที)
Lazada Shopping Online
ที่มา https://belitsoft.com/laravel-development-services/microservices-architecture-development
Microservice Architecture - Shopping online
http://blog.christianposta.com/microservices/low-risk-monolith-to-microservice-evolution/
How to transfer Monolith to Microservice
ประเมิน IT Performance
A) ฝาย IT ของคุณ มีการแกไข/ปรับปรุง code ของงานบริการ IT บอยแคไหน
1. ทุกวัน2. ทุกอาทิตย หรือ ทุกเดือน
B) Code ที่ปรับปรุงนี้ หลังผานการทดสอบแลว นําไป run เปน Production ตองใชเวลานานแคไหน
1. นอยกวา 1 ชม2. 1 สัปดาห ถึง 1 เดือน
C) โดยทั่วไปแลวเมื่อบริการทางดาน IT ใชบริการไมได จะใชเวลาแกไขนานเทาไร
1. นอยกวา 1 ชม.2. นอยกวา 1 วัน3. 1 - 7 วัน
D) เมื่อมีการปรับปรุงบริการทางดาน IT จะสงผลกระทบตอบริการ IT อื่น กี่เปอรเซนต
1. 0-15%2. 31-45%
<5 คะแนน 5-7 คะแนน 8-9 คะแนน
SELF-SERVICE ON-DEMAND INFRA : การขอใชบริการทางดาน Infrastructure มีขั้นตอนอยางไรบางเชน ตองการเครื่อง server มาทดสอบ ยังตองเดินไปคุย หรือ อีเมลลเพื่อใหเจาหนาที่ ที่รับผิดชอบจัดการใหหรือไม
AUTOMATION การใชบริการคลาวดของตางประเทศ สามารสราง Server ผาน Cloud ไดเลย ดวยการ Click ผานหนาเว็บ บริการคลาวดจาก ตางประเทศ เชน Google, Amazon, Microsoft
CONTINUOUS DELIVERY เกี่ยวของกับงาน update การ deploy มีความตอเนื่อง user ไมรูสึกสะดุดระหวางใชบริการ แมจะมีการอัพเดท back end ของระบบ
ADVANCED DEPLOYMENT TECHNIQUES : การเปดใหบริการกับบางพื้นที่ เพื่อทดสอบระบบกอน กระจายไปสูคนหมูมาก เชน การพัฒนาปุม Like ไปเปน ปุม Love ของ Facebook ทีคนใช app บนมือถือ จะกดไดกอน แลวคอยมาเปนกด Love ไดบนเว็บเพจ
Re-Orgs
● แบงคนตามหนาที่ หนวยของงานหนึ่งๆ กระจายไปยังคนในแตละกลุมหนาที่
● แบงคนตาม หนวยของงาน โดยกลุมทําในแตละหนวย รับผิดชอบทั้งหมดของงานนั้นๆ
https://developers.redhat.com/blog/2017/02/21/an-incremental-path-to-microservices/
DevOpsทฤษฎีขอจํากัด (Theory of Constraint) เครื่องจักรหรือหนวยงานที่ชาที่สุดจะเปนตัวกําหนดอัตราเร็วของทั้งกระบวน
https://medium.com/@pariwat_s/learn-devops-ตอนที่-1-จุดเริ่มตนของการเปลี่ยนแปลง-e95640a39a10
DevOps
ระบบการผลิตแบบลีน (Lean Manufacturing) การปรับปรุงกระบวนการทํางานอยางตอเนื่อง ดวยการกําจัดความสูญเปลาที่ไมไดเพิ่มคุณคา ซึ่งถือวาความสูญเปลานั้น เปนตัวทําใหเวลาที่ใชในการผลิตยาวนานขึ้น
DevOps
DevOps คือรูปแบบวิธีการปฏิบัติ วัฒนธรรม และกระบวนการตางๆ เพื่อแกไขปญหา
ที่เกิดจากความขัดแยงระหวาง Development และ Operations
หลักการสําคัญของ DevOps
หลักการสําคัญของ DevOps
หลักการของ Systems Thinking
การปรับปรุง flow การทํางานหรือการสงตองานระหวางหนวยงานจากซายไปขวาตั้งแต Business เริ่มคิด requirement ไป Development ไป Operations จนถึงลูกคาใหไหลไปอยางราบรื่น และรวดเร็วที่สุด
ที่มา https://medium.com/@pariwat_s/learn-devops-ตอนที่-2-devops-คืออะไร-18ac48d73625
หลักการสําคัญของ DevOps
หลักการของ Amplify Feedback Loops
กลาวถึง feedback ในแงของปญหาระหวางหนวยงานจากขวามาซายของทุก ๆ จุดในกระบวนการทํางาน เชน จาก Operations ไป Development ตองคนหาและแกไขใหไดอยางรวดเร็ว รวมถึงการปองกันปญหาไมใหเกิดขึ้นซํ้าอีก
หลักการสําคัญของ DevOps
หลักการของ Continual Experimentation and Learning
การทดลองสิ่งใหม เพื่อปรับปรุงกระบวนการทํางาน เพื่อใหเกิดการเรียนรูจากทั้งความสําเร็จและความลมเหลว ซึ่งการปฏิบัติอยางตอเนื่อง จะทําใหเกิดความเชี่ยวชาญและความสําเร็จในการทดลองนําสิ่งใหม ๆ มา
DevOps
https://www.atlassian.com/devops
ทบทวนเรื่อง Container
วิธีลงโปรแกรมบนคอมพิวเตอร ที่เราคุนเคย
Setup.exe , Setup.dmg
ทบทวนเรื่อง Container
วิธีลงโปรแกรมบน container
docker run “name image”
ทบทวนเรื่อง Container
Container ตอบโจทย DevOps อยางไร● ทําให Application ถูกบรรจุอยูใน Container งายตอการเคลื่อนยาย● หนวยสําหรับการ Deployment ที่เบากวา VM● ใชแลวทิ้ง สราง ลบ ยอนกลับ ไดงาย● เอื้อกับ Automate
The Twelve-Factor App: 12 ประเด็นพื้นฐานสูการพัฒนา SaaS Cloud ที่ยั่งยืน
https://12factor.net/
1. Codebaseหนึ่ง Codebase จัดเก็บเพียง หนึ่ง application จัดเก็บ code ดวย Version Control เชน Git หรือ SVN
แต หนึ่ง Codebase สามารถ deploys ไดหลายที่
2. Dependencies
เปาหมายคือ การแยก Dependency ตางๆ ออกจากระบบงาน ระบุ package และ เลขเวอรชั่นที่ใชงานใน application อยางชัดเจนใน Codebase
ผลที่ได ทําใหสามารถ deploy ระบบงานไดบอยและงายขึ้น
3. Config
เก็บ config ตาง ๆ ใน Environment Variablesทําใหสามารถยาย code ไปทํางานตาง platform ได โดยแก Environment ตาม platform เหลานั้น
แลว configuration มีอะไรบาง
- ขอมูลการใชงาน database และ service ตาง ๆ- สิ่งที่ตองกําหนดสําหรับการ deploy ในแตละ environmet- อื่น ๆ ที่ตองเปลี่ยนแปลงตาม environment เชน dev , test , staging ,
production
4. Backing service
Backing service คือ บริการที่ application ของเราไปเรียกใช เชน Database ซึ่ง Service เหลานี้ ตองสามารถเขาถึงไดงาย เชน ผาน url และเปลี่ยนแปลงไดงายทําใหสามารถถูกแทนที่ตลอดเวลา โดยการแทนที่พวกนี้ ตองไมกระทบกับ code ของเรา
5. Build, Release, Run
แบงการ deploy ออกเปน Build, Release และ Run Stages อยางชัดเจน
เพื่อผลักภาระงานที่ซับซอนใหกับ Build Stage เนื่องจากยังไมไดนําไปใชงานจริง หากเกิดขอผิดพลาดก็นํามาแกไขไดงาย สวน การ run ก็จะตองออกแบบใหใชเวลานอยที่สุด
6. Processes
อยาจัดเก็บขอมูลบนโปรเซส คือ หามจําสถานะบนตัวมัน
การทํางานแบบ Stateless จะทําใหสามารถ scale ไดงายขึ้น
7. Port binding
เพื่อให application สามารถโยกยายขามแพลตฟอรมไดงาย จึงไมควรผูกติดกับWebserver
ควรทํา service เพื่อใหบริการผาน PORT ของ HTTP
8. Concurrency
ขยายระบบดวยการใช process model คือ งานไหนที่ตองการใชมากขึ้นก็เพิ่มงานสวนนั้นเขาไป
ตัวอยางเชน มีงานเกี่ยวกับการประมวลผลมาก
ก็เพิ้ม worker เขาไป
9. Disposability
Application ควรจะมี startup time ที่ไว และตองมีการจัดการขอมูลใหเรียบรอยเมื่อมีการ shutdown
10. Dev/prod parity
ทําสภาพแวดลอมของ development Staging/Production ใหเหมือนกันมากที่สุด
Time gabทําทีละนอย deploy ทันที เพื่อให development กับ Staging/Production แตกตางกันนอยที่สุด
Personal gabคนเขียนโคด เปนคนเดียวกันกับคน deploy
Tools gap ใชงานซอฟทแวร ใหตรงกับที่ production ใช
11. Logs
สามารถตรวจดู Logs ตามเหตุการณที่เราสนใจไดภายหลังและสามารถนําขอมูลของ Logs ไปประมวลผลอีกที
12. Admin processes
มีคําสั่งสําหรับการทํางานดาน Admin/Management โดยคําสั่งนี้จะสรางโปรเซสการทํางานขึ้นมาใหม ไมเกี่ยวของกับ โปรเซสของ application โปรเซสการ management จะถูกทําลายหลังการใชงานเสร็จสิ้น
เตรียมเครื่องใหพรอม● Develop environment [Python]
○ Windows: https://docs.djangoproject.com/en/2.0/howto/windows/○ Linux: https://docs.djangoproject.com/en/2.0/topics/install/
● Operation environment [Docker]○ https://www.docker.com/community-edition
● Import VM Image● Windows
○ https://docs.google.com/document/d/1zLXt4hp9bMurDWZSZlnymVoi_DtNKYXlC7HDpyT1tNQ/edit?usp=sharing
● Ubuntu ○ https://docs.google.com/document/d/1bSehjPsyzhzdLkDdqbLtnLm0HCxRNTwPfrxzcWsa1mo
/edit?usp=sharing
Hand on: Create new Django application
https://docs.google.com/document/d/1Eev_AXgDbu71KwnfVDTpID6rOQMVxNlc8slpQGbEIL4/edit?usp=sharing
Hand on: Docker build
https://docs.google.com/document/d/1yZtUKNMOOk2-4kzpbZ4onXfCT7NDlvK-fPPkzSLpn8I/edit?usp=sharing
Dockerfile quick reference Keyword Description
FROM Base image สําหรับเริ่มตน
MAINTAINER ขอมูลผูเขียน Dockerfile
RUN รัน command ใน container แลวบันทึกลงใน image
CMD Command ที่จะทํางานเมื่อเริ่ม container
EXPOSE ขอมูลเกี่ยวกับการ bind port
ENV ตั้งคา environment variable
ADD Copy file, folder, URL ไปยัง image
COPY Copy file, folder ไปยัง image
Keyword Description
ENTRYPOINT Command ที่จะทํางานเมื่อเริ่ม container ทํางานกอน CMD
VOLUME ขอมูลเกี่ยวกับโฟลเดอรที่สามารถ จัดเก็บภายนอกได
USER เปลี่ยน user ที่ทํางาน
WORKDIR เปลี่ยน folder ที่ทํางาน
ARG ตัวแปรที่อนุญาตใหสงผาน --build-arg ขณะ build image