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

Post on 22-May-2020

7 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Monolithic to MicroservicesInternet Innovation Lab

http://bit.ly/WUNCA37 ridnarong.promya@nectec.or.th

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

top related