monolithic to microservices internet innovation lab · 12 factor app hand on: create new django...

45
Monolithic to Microservices Internet Innovation Lab http://bit.ly/WUNCA37 [email protected]

Upload: others

Post on 22-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Monolithic to MicroservicesInternet Innovation Lab

http://bit.ly/WUNCA37 [email protected]

Page 2: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Agenda● Monolithic VS Microservices● Transition Path● DevOps● 12 Factor App● Hand on: Create new Django application● Hand on: Docker build

Page 3: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony
Page 4: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Ant Colony

Page 5: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

กิจกรรมใหออกแบบ Architecture หรือ บล็อกไดอะแกรม เพื่อทําระบบ Shopping Online (5 นาที)

Lazada Shopping Online

Page 6: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

กิจกรรมใหออกแบบ Architecture หรือ บล็อกไดอะแกรม เพื่อทําระบบ Shopping Online (5 นาที)

Lazada Shopping Online

Page 7: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

ที่มา https://belitsoft.com/laravel-development-services/microservices-architecture-development

Microservice Architecture - Shopping online

Page 8: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

http://blog.christianposta.com/microservices/low-risk-monolith-to-microservice-evolution/

How to transfer Monolith to Microservice

Page 9: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

ประเมิน 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%

Page 10: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

<5 คะแนน 5-7 คะแนน 8-9 คะแนน

Page 11: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony
Page 12: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

SELF-SERVICE ON-DEMAND INFRA : การขอใชบริการทางดาน Infrastructure มีขั้นตอนอยางไรบางเชน ตองการเครื่อง server มาทดสอบ ยังตองเดินไปคุย หรือ อีเมลลเพื่อใหเจาหนาที่ ที่รับผิดชอบจัดการใหหรือไม

Page 13: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

AUTOMATION การใชบริการคลาวดของตางประเทศ สามารสราง Server ผาน Cloud ไดเลย ดวยการ Click ผานหนาเว็บ บริการคลาวดจาก ตางประเทศ เชน Google, Amazon, Microsoft

Page 14: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

CONTINUOUS DELIVERY เกี่ยวของกับงาน update การ deploy มีความตอเนื่อง user ไมรูสึกสะดุดระหวางใชบริการ แมจะมีการอัพเดท back end ของระบบ

Page 15: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

ADVANCED DEPLOYMENT TECHNIQUES : การเปดใหบริการกับบางพื้นที่ เพื่อทดสอบระบบกอน กระจายไปสูคนหมูมาก เชน การพัฒนาปุม Like ไปเปน ปุม Love ของ Facebook ทีคนใช app บนมือถือ จะกดไดกอน แลวคอยมาเปนกด Love ไดบนเว็บเพจ

Page 16: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Re-Orgs

● แบงคนตามหนาที่ หนวยของงานหนึ่งๆ กระจายไปยังคนในแตละกลุมหนาที่

● แบงคนตาม หนวยของงาน โดยกลุมทําในแตละหนวย รับผิดชอบทั้งหมดของงานนั้นๆ

https://developers.redhat.com/blog/2017/02/21/an-incremental-path-to-microservices/

Page 17: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

DevOpsทฤษฎีขอจํากัด (Theory of Constraint) เครื่องจักรหรือหนวยงานที่ชาที่สุดจะเปนตัวกําหนดอัตราเร็วของทั้งกระบวน

https://medium.com/@pariwat_s/learn-devops-ตอนที่-1-จุดเริ่มตนของการเปลี่ยนแปลง-e95640a39a10

Page 18: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

DevOps

ระบบการผลิตแบบลีน (Lean Manufacturing) การปรับปรุงกระบวนการทํางานอยางตอเนื่อง ดวยการกําจัดความสูญเปลาที่ไมไดเพิ่มคุณคา ซึ่งถือวาความสูญเปลานั้น เปนตัวทําใหเวลาที่ใชในการผลิตยาวนานขึ้น

Page 19: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

DevOps

DevOps คือรูปแบบวิธีการปฏิบัติ วัฒนธรรม และกระบวนการตางๆ เพื่อแกไขปญหา

ที่เกิดจากความขัดแยงระหวาง Development และ Operations

Page 20: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

หลักการสําคัญของ DevOps

Page 21: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

หลักการสําคัญของ DevOps

หลักการของ Systems Thinking

การปรับปรุง flow การทํางานหรือการสงตองานระหวางหนวยงานจากซายไปขวาตั้งแต Business เริ่มคิด requirement ไป Development ไป Operations จนถึงลูกคาใหไหลไปอยางราบรื่น และรวดเร็วที่สุด

ที่มา https://medium.com/@pariwat_s/learn-devops-ตอนที่-2-devops-คืออะไร-18ac48d73625

Page 22: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

หลักการสําคัญของ DevOps

หลักการของ Amplify Feedback Loops

กลาวถึง feedback ในแงของปญหาระหวางหนวยงานจากขวามาซายของทุก ๆ จุดในกระบวนการทํางาน เชน จาก Operations ไป Development ตองคนหาและแกไขใหไดอยางรวดเร็ว รวมถึงการปองกันปญหาไมใหเกิดขึ้นซํ้าอีก

Page 23: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

หลักการสําคัญของ DevOps

หลักการของ Continual Experimentation and Learning

การทดลองสิ่งใหม เพื่อปรับปรุงกระบวนการทํางาน เพื่อใหเกิดการเรียนรูจากทั้งความสําเร็จและความลมเหลว ซึ่งการปฏิบัติอยางตอเนื่อง จะทําใหเกิดความเชี่ยวชาญและความสําเร็จในการทดลองนําสิ่งใหม ๆ มา

Page 24: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

DevOps

https://www.atlassian.com/devops

Page 25: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

ทบทวนเรื่อง Container

วิธีลงโปรแกรมบนคอมพิวเตอร ที่เราคุนเคย

Setup.exe , Setup.dmg

Page 26: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

ทบทวนเรื่อง Container

วิธีลงโปรแกรมบน container

docker run “name image”

Page 27: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

ทบทวนเรื่อง Container

Page 28: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Container ตอบโจทย DevOps อยางไร● ทําให Application ถูกบรรจุอยูใน Container งายตอการเคลื่อนยาย● หนวยสําหรับการ Deployment ที่เบากวา VM● ใชแลวทิ้ง สราง ลบ ยอนกลับ ไดงาย● เอื้อกับ Automate

Page 29: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

The Twelve-Factor App: 12 ประเด็นพื้นฐานสูการพัฒนา SaaS Cloud ที่ยั่งยืน

https://12factor.net/

Page 30: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

1. Codebaseหนึ่ง Codebase จัดเก็บเพียง หนึ่ง application จัดเก็บ code ดวย Version Control เชน Git หรือ SVN

แต หนึ่ง Codebase สามารถ deploys ไดหลายที่

Page 31: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

2. Dependencies

เปาหมายคือ การแยก Dependency ตางๆ ออกจากระบบงาน ระบุ package และ เลขเวอรชั่นที่ใชงานใน application อยางชัดเจนใน Codebase

ผลที่ได ทําใหสามารถ deploy ระบบงานไดบอยและงายขึ้น

Page 32: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

3. Config

เก็บ config ตาง ๆ ใน Environment Variablesทําใหสามารถยาย code ไปทํางานตาง platform ได โดยแก Environment ตาม platform เหลานั้น

แลว configuration มีอะไรบาง

- ขอมูลการใชงาน database และ service ตาง ๆ- สิ่งที่ตองกําหนดสําหรับการ deploy ในแตละ environmet- อื่น ๆ ที่ตองเปลี่ยนแปลงตาม environment เชน dev , test , staging ,

production

Page 33: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

4. Backing service

Backing service คือ บริการที่ application ของเราไปเรียกใช เชน Database ซึ่ง Service เหลานี้ ตองสามารถเขาถึงไดงาย เชน ผาน url และเปลี่ยนแปลงไดงายทําใหสามารถถูกแทนที่ตลอดเวลา โดยการแทนที่พวกนี้ ตองไมกระทบกับ code ของเรา

Page 34: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

5. Build, Release, Run

แบงการ deploy ออกเปน Build, Release และ Run Stages อยางชัดเจน

เพื่อผลักภาระงานที่ซับซอนใหกับ Build Stage เนื่องจากยังไมไดนําไปใชงานจริง หากเกิดขอผิดพลาดก็นํามาแกไขไดงาย สวน การ run ก็จะตองออกแบบใหใชเวลานอยที่สุด

Page 35: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

6. Processes

อยาจัดเก็บขอมูลบนโปรเซส คือ หามจําสถานะบนตัวมัน

การทํางานแบบ Stateless จะทําใหสามารถ scale ไดงายขึ้น

Page 36: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

7. Port binding

เพื่อให application สามารถโยกยายขามแพลตฟอรมไดงาย จึงไมควรผูกติดกับWebserver

ควรทํา service เพื่อใหบริการผาน PORT ของ HTTP

Page 37: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

8. Concurrency

ขยายระบบดวยการใช process model คือ งานไหนที่ตองการใชมากขึ้นก็เพิ่มงานสวนนั้นเขาไป

ตัวอยางเชน มีงานเกี่ยวกับการประมวลผลมาก

ก็เพิ้ม worker เขาไป

Page 38: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

9. Disposability

Application ควรจะมี startup time ที่ไว และตองมีการจัดการขอมูลใหเรียบรอยเมื่อมีการ shutdown

Page 39: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

10. Dev/prod parity

ทําสภาพแวดลอมของ development Staging/Production ใหเหมือนกันมากที่สุด

Time gabทําทีละนอย deploy ทันที เพื่อให development กับ Staging/Production แตกตางกันนอยที่สุด

Personal gabคนเขียนโคด เปนคนเดียวกันกับคน deploy

Tools gap ใชงานซอฟทแวร ใหตรงกับที่ production ใช

Page 40: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

11. Logs

สามารถตรวจดู Logs ตามเหตุการณที่เราสนใจไดภายหลังและสามารถนําขอมูลของ Logs ไปประมวลผลอีกที

Page 41: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

12. Admin processes

มีคําสั่งสําหรับการทํางานดาน Admin/Management โดยคําสั่งนี้จะสรางโปรเซสการทํางานขึ้นมาใหม ไมเกี่ยวของกับ โปรเซสของ application โปรเซสการ management จะถูกทําลายหลังการใชงานเสร็จสิ้น

Page 42: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

เตรียมเครื่องใหพรอม● 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

Page 43: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Hand on: Create new Django application

https://docs.google.com/document/d/1Eev_AXgDbu71KwnfVDTpID6rOQMVxNlc8slpQGbEIL4/edit?usp=sharing

Page 44: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

Hand on: Docker build

https://docs.google.com/document/d/1yZtUKNMOOk2-4kzpbZ4onXfCT7NDlvK-fPPkzSLpn8I/edit?usp=sharing

Page 45: Monolithic to Microservices Internet Innovation Lab · 12 Factor App Hand on: Create new Django application Hand on: Docker build. Ant Colony

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