Quantcast
Channel: cc :: somkiat
Viewing all 2000 articles
Browse latest View live

Spring Boot 2.5 ตัว final มาแล้ว

$
0
0

ตอนนี้ Spring Boot 2.5 GA ออกมาแล้ว มีความสามารถหลัก ๆ คือ

  • สนับสนุน Java 16
  • Gradle 17
  • Jetty 10
  • ปรับปรุงการ build Docker Image (Buildpack และ Layered WAR)
  • ปรับปรุงการ initial Datasource
  • กำหนด prefix ของ environment variable ที่ใช้ในแต่ละ application ได้
  • มี OpenMetric สำหรับ Prometheus ให้เลย (/actuator/prometheus)

code อะไรที่ถูก deprecated ใน Spring Boot 2.3
จะถูกลบออกไปแล้ว
จะเหลือแต่ deprecated เพียง Spring Boot 2.4 เท่านั้น
มา update กันครับ


สวัสดี OpenSearch Beta 1

$
0
0

จากการประกาศของ AWS ในเรื่องของ OpenSearch project ก่อนหน้านี้
ตอนนี้ OpenSearch Beta 1 ปล่อยออกมาให้ลองใช้งานแล้ว
โดยจะเป็น open source ที่อยู่บนพื้นฐานของ

  • Elasticsearch 7.10.2 จะเรียกว่า OpenSearch
  • Kibana 7.10.2 จะเรียกว่า OpenSearch Dashboard

ลอง start ด้วย Docker compose ตามนี้

[gist id="7008cd63f27a53405f1100b16e41a0cc" file="docker-compose.yml"]

ลองเข้าใช้งานที่ OpenSearch Dashboard

ไม่ต่างจาก Kibana เท่าไร

ลองใช้ DevTool นิดหน่อย

อ่านเอกสารเพิ่มเติมได้ที่นี่

มาใช้งาน @storybook/testing-react กัน

$
0
0

เมื่อกลางเดือนพฤภาคมที่ทีม StoryBook ได้ปล่อย testing-react library ออกมา
เพื่อใช้สำหรับการทดสอบ react component
ด้วย stories ที่เขียนใน StoryBook ได้เลย
ไม่ต้องไปเสียเวลาเขียน test case แยกออกจากกัน
ด้วย Jest + React testing library หรือ Enzyme อีกต่อไป
ซึ่งเป็น pain point หลักของคนใช้งาน แน่นอนว่า มันไม่สนุกเลย

ปล. ยังไม่สามารถใช้ได้กับ React 17 นะ !!

เครื่องมือที่น่าสนใจสำหรับการ scan code

$
0
0

ว่าง ๆ มาดูกันหน่อยว่า มีเครื่องมืออะไรที่น่าสนใจ
สำหรับการ scan code ทางด้าน security ที่นักพัฒนาสามารถนำมาใช้ได้ง่าย ๆ
เพื่อช่วยเพิ่มความมั่นใจในการพัฒนาระบบมากยิ่งขึ้น
รวมทั้งการใช้งานไม่ยาก
สามารถนำมาใช้กับ developer workflow ได้ง่าย
และได้รับ feedback ที่รวดเร็ว
เพื่อช่วยให้ปรับปรุงได้อย่างรวดเร็วขึ้น (Learning process)

กลุ่มของการ Scan dependency/library

ประกอบไปด้วย

กลุ่มของ Code Analyzer

VS Code :: ดึงข้อมูล IP ของเครื่องมาใช้งาน

$
0
0

มีเหตุให้ต้องใช้งาน IP ของเครื่อง
อาจจะต้องใช้คำสั่งใน command line ทั้ง ipconfig หรือ ifconfig
หรือไปใช้ผ่าน UI tool และส่วนต่าง ๆ จาก OS ก็ว่าไป
ก็เลยไปดูว่าใน VS Code มี extension อะไรให้ใช้หรือไม่
ก็ไปเจอ Extension ชื่อว่า IP Address

โดยจะดึงค่าทั้ง IPv4, IPV6 และ public IP ให้เลย

สรุป Stack ในการพัฒนาระบบด้วย Flutter + Dart + Cloud run และ Firebase Realtime Database

$
0
0

จาก Google I/O มี session ที่น่าสนใจเกี่ยวกับ การพัฒนาระบบด้วย

  • Flutter คือ frontend สนับสนุนทั้ง mobile, web และ desktop application
  • Dart และ Cloud Run คือ backend หรืออาจจะใช้ Serverless ก็ได้
  • Firebase Realtime Database คือ database ที่ใช้เก็บข้อมูล หรืออาจจะใช้งาน Firestore ก็ได้

เป็น stack ที่น่าสนใจมาก ๆ

โดยโครงสร้างเป็นดังภาพ

โดยในฝั่ง Dart นั้นก็ได้ออก Docker Image Official มาให้ใช้อีกด้วย

อีกทางเลือกของฝั่ง backend เป็น serverless คือ Cloud Function

ที่สนับสนุนภาษาหลัก ๆ ทั้งนั้นเลย

เป็นอีก stack ที่สามารถลองศึกษาและใช้งานกันดูครับ

รวมระบบลงทะเบียนจองวัคซีนของจังหวัดต่าง ๆ ทั่วไทย

$
0
0

แนวคิด C.U.P.I.D น่าสนใจ

$
0
0

เพิ่งดู VDO และอ่านบทความเกี่ยวกับ CUPID the back story
เป็นอีกหนึ่งแนวคิดที่บอกว่า S.O.L.I.D มันล้าสมัยไปแล้ว
โดยเป็นการปรับปรุงแนวคิดให้ทันสมัยมากขึ้น
แต่ยังคงกลิ่นอายเดิม ๆ ที่เป็นพื้นฐานเหมือนกัน

ซึ่ง C.U.P.I.D ประกอบไปด้วย

มีแนวคิดที่บอกว่า for joyful coding

  • Composable คือ code มีขนาดเล็ก มีขอบเขตเป้าหมายชัดเจน และมี depedenncy ไม่เยอะ ทำให้ง่ายต่อการใช้งานซ้ำ ๆ จากส่วนอื่น ๆ
  • Unix philosophy คือเรื่องของหน้าที่รับผิดชอบอย่างใดอย่างหนึ่งไปเลย เน้นที่ว่าทำงานอะไรได้บ้าง
  • Predictable คือ พฤติกรรมการทำงานสามารถคาดเดาได้ ไม่ใช่ทำงานได้บ้างไม่ได้บ้าง และสามารถเฝ้าดูหรือ observable นั่นเอง
  • Idiomatic คือการใช้ภาษาอะไร เครื่องมืออะไร framework อะไร ก็ต้องเข้าใจแนวทางของสิ่งเหล่านั้น จะไม่เรียนรู้จะเขียนไม่ได้แน่ ๆ
  • Domain-based คือการเขียน code ตาม domain นั้น ๆ ทั้งการใช้คำและตั้งชื่อต่าง ๆ เช่นอยู่ใน domain payment, ordering ไม่ใช่ไปสนใจ model, view และ controller รวมไปถึงเรื่องของเขตของ domain นั้น ๆ ด้วย

ว่าง ๆ อ่านข้อมูลผู้ติดเชื้อ COVID-19 ของไทยจากภาพกันหน่อย

$
0
0

เนื่องจากปกติจะคอยดูและบันทึกข้อมูล
ของผู้ติดเชื้อ COVID 19 ของประเทศไทยรายวันไว้
ด้วยที่ข้อมูลเป็นรูปภาพเช่นจากไทยรู้สู้โควิด
จึงต้องเก็บข้อมูลไว้แบบ manual
ทำไปทำมารู้สึกเบื่อและเหนื่อย
จึงลองเขียน program อ่านค่าข้อมูลจากรูปภาพด้วย Tesseract OCR กันหน่อย
มือใหม่หัดลองเขียนแบบมั่ว ๆ

สิ่งที่ใช้ในการพัฒนาแบบง่าย ๆ

  • Python 3
  • Tesseract
  • pytesseract เป็น library สำหรับภาษา python ซึ่งเป็น wrapper นั่นเอง

เพิ่มเติมคือ Tesseract เริ่มต้นไม่รู็จักภาษาไทย
จึงต้องทำการเพิ่มภาษาไทยเข้าไป โดย download ได้จากที่นี่
จากนั้นนำไปไว้ใน folder ที่เราต้องการ
ตัวอย่างผมทำการเก็บไว้ใน /testdata
จะมีทั้งภาษาไทยและภาษาอื่น ๆ ที่เราต้องการดึงออกมา

ทดสอบการเพิ่มภาษาเข้าไปใน Tesseract

ด้วยคำสั่งดังนี้

[gist id="c290593c4d6ee019afdffeea728d719d" file="1.txt"]

จากนั้นเขียน code ง่าย ๆ เพื่ออ่านข้อมูล ด้วยภาษา Python

[gist id="c290593c4d6ee019afdffeea728d719d" file="demo01.py"]

โดยข้อมูลรูปภาพที่ใช้คือ

ผลจากการ run program ได้ผลดังนี้

[gist id="c290593c4d6ee019afdffeea728d719d" file="2.txt"]

สังเกตได้ว่า ผลที่ได้ยังมีข้อผิดพลาดจาก font
ที่ไม่สามารถอ่านได้ แต่ก็ถือว่าลดงาน manual ไปได้พอสมควร
ไว้ต้องไปปรับปรุงเพิ่มเติม
แต่ก็ช่วยลดเวลาลงไปได้เยอะ
ลองดูครับ มือใหม่หัดเขียนไปเรื่อย ๆ

การใช้งาน method ต่าง ๆ ของ Array ใน JavaScript

$
0
0

เห็นมีคน share ภาพสรุป method ต่าง ๆ ของ Array ในภาษา JavaScript
เลยลองไปดูหน่อยว่า แต่ละ method ทำงานและใช้อย่างไรบ้าง
ซึ่งเป็นความรู้พื้นฐานของการพัฒนาระบบด้วยภาษา JavaScript
มาเริ่มกันเลย

แต่ดูเหมือนว่าจากภาพ การใช้งาน fill() จะไม่ถูก

เพราะว่า fill() จะรับได้ 3 ค่า คือ

  • ค่าใหม่ที่ต้องการให้แทนที่
  • ตำแหน่งเริ่มต้น (default = 0)
  • ตำแหน่งสิ้นสุด (default = ขนาดของ array)

ดังนั้นต้องเปลี่ยนเป็น fill ( O , 1) ถึงจะถูกต้อง

ตัวอย่างของ code

[gist id="0f5095315cd883bd8b0f0bdcb5e4ca60" file="1.js"]

ยังมี method อื่น ๆ อีกมากมายทั้ง

  • concat()
  • flat()
  • flatMap()
  • forEach()
  • includes()
  • reverse()
  • reduce()
  • sort()

Postman สนับสนุนการ Socket request แล้ว

$
0
0

ใน Postman version 8.5.0 นั้น ได้เพิ่มความสามารถ
สำหรับการทำงานกับ Socket request ได้แล้ว
ซึ่งเป็น beta version จะมีความสามารถดังนี้

  • สร้าง Socket connection ไปยัว server ที่ต้องการ
  • สามารถส่ง message ไปได้ทั้ง text, JSON, XML และ Array buffer
  • ทำการค้นหา message exchange

เป็นอีกความสามารถที่น่าจะมีประโยชน์

[Slack API] ทำการดึง API token สำหรับ client scope

$
0
0

ปัญหาสำหรับการ integrate กับ Slack API
โดยทำการสร้าง app ใน workspace
จากนั้นกำหนด permission scope เป็น admin
จะได้ token สำหรับการเข้าถึง
แต่เมื่อนำ token นี้ไปใช้งานกลับเจอปัญหานี้

[gist id="852e609bc58d89134aa3ff2a2d95a89b" file="1.txt"]

ไปดูในการ config app ก็ไม่เจอ
สำหรับการเพิ่ม scope ของ client

ก็เลยลองไปดูหน่อยว่า Token มันทำงานอย่างไร ?

เป็น Legacy feature !!

ดังนั้นต้องทำการส่ง request ไปเพื่อ Authorization สำหรับ scope=client
และ client_id ของ app ดังนี้

[gist id="852e609bc58d89134aa3ff2a2d95a89b" file="2.txt"]

จากนั้นทำการขอ Token จากผลการ Authorization

[gist id="852e609bc58d89134aa3ff2a2d95a89b" file="3.txt"]

สุดท้ายก็ได้ Token ที่เอาไปใช้งานได้แล้ว
ง่ายไหมเนี่ย !!

แนะนำ Open Source Insights Project

$
0
0

ทีม security ของ Google ได้ปล่อย project ชื่อว่า Open Source Insights ออกมา
เพื่อแสดง dependecy ของ library ในภาษาต่าง ๆ ออกมาเป็นภาพ
ช่วยทำให้เข้าใจการทำงานและความสัมพันธ์มากยิ่งขึ้น
รวมทั้งให้ง่ายต่อการแก้ไขเรื่อง security อีกด้วย

โดย project นี้สนับสนุน dependency จาก

  • NPM
  • Go
  • Maven
  • Cargo

ยกตัวอย่าง Echo จากภาษา Go

ดูในรูปแบบสวย ๆ

Reference Websites

คำถามที่น่าสนใจ สำหรับการเลือกที่จัดเก็บข้อมูล

$
0
0

ก่อนที่จะเลือกใช้ที่จัดเก็บข้อมูลชนิดใดควรต้องตอบคำถามเหล่านี้ให้ได้ก่อน

ชนิดของข้อมูลที่จะจัดเก็บเป็นอะไร ?

  • log
  • user account
  • order transaction
  • JSON Document

ถ้าเรารู้และเข้าใจ
ก็จะทำให้เราเลือกที่จัดเก็บข้อมูลให้เหมาะสมต่อไป

ความซับซ้อนของข้อมูลเป็นอย่างไร ?

สามารถทำการ preprocessing เช่น clean data ได้ไหม
สามารถทำการ normalize data ได้ไหม
เช่นถ้า normalize ไม่ได้แล้ว
NoSQL อาจจะเป็นทางเลือกที่ดีกว่า SQL ก็เป็นได้

ระบบงานนั้นต้องการอ่านหรือเขียนข้อมูลมากกว่ากัน ?

เป็นอีกเรื่องที่สำคัญ ว่าระบบงานนั้นใช้งานข้อมูลอย่างไร
เช่นทำการอ่านเยอะ ๆ การ join กันหลาย ๆ  table ก็ไม่น่าเหมาะสมหรือไม่
ควรต้องทำการ preprocessing ข้อมูลให้ง่ายต่อการอ่านหรือไม่
จากนั้นดูว่าสิ่งใดที่เหมาะสมต่อไป
ทั้งเครื่องมือ และ architecture ในการจัดเก็บต่อไป

สิ่งที่ต้องคิดคือ จะใช้ Open source หรือ commercial

ตรงนี้เป็นการตัดสินใจทาง business ล้วน ๆ
แต่ต้องได้รับคำแนะนำจาก technical ด้วยเสมอ

อีกเรื่องที่สำคัญคือ operation ของที่จัดเก็บข้อมูลนั้น

ทั้งเรื่องของการ config
ทั้งเรื่องของการ tuning performance
ทั้งเรื่องของการ scaling
ทั้งเรื่องของการ backup and restore
ต้องตอบให้ได้

แต่คงไม่ได้เลือกเพราะว่า เราใช้อยู่แล้ว นะ !!

ว่าง ๆ ลองศึกษา Svelte กันหน่อย

$
0
0

ว่าง ๆ มาลองพัฒนาระบบฝั่ง frontemd ด้วย Svelte กันหน่อย
ไม่ต้องสนใจว่าคืออะไร
เขียน code มาดูผลไปเลยดีกว่า
มาเริ่มกันเลย

การติดตั้งและสร้าง project ตาม official webไปเลย

[gist id="4583b86fb038b7b491fae91c6fbcbdec" file="1.txt"]

ทำการเขียน code แบบง่าย ๆ คือ counter นั่นเอง

แต่เพิ่มเติมคือ การส่งค่า number ผ่าน props เข้าไปยัง component App ดังนี้

[gist id="4583b86fb038b7b491fae91c6fbcbdec" file="App.svelte"]

คำอธิบาย

ไฟล์ App.svelte คือ component นั่นเอง
ประกอบไปด้วย 3 ส่วนคือ

  • script สำหรับ code ภาษา JavaScript สังเกตว่า props จะต้องถูก export ด้วยนะ
  • style สำหรับ style sheet นั่นเอง
  • ส่วนที่ 3 คือ code HTML หรือ template สำหรับ svelte

โดยจะทำการแปลงและจัดการด้วย Rollup หรือ webpack ต่อไป
แต่จากตั้วอย่างนี้จะใช้งาน Rollup

การเรียกใช้งาน component ผ่านไฟล์ main.js

โดยทำการส่งค่า number = 100 ผ่าน props เข้าไป

[gist id="4583b86fb038b7b491fae91c6fbcbdec" file="main.js"]

จากการทำงาน พบว่ามีการจัดการ state ให้แบบง่าย ๆ เลย
นั่นคือค่าเปลี่ยนแล้ว การแสดงผลก็เปลี่ยนให้ด้วย

เรื่องของ Store และ Reducer ใน Svelte

การเปลี่ยนค่า state ตรง ๆ แบบ two-way อาจจะไม่ค่อยถูกใจ
มาลองดูพวก store และ reducer กันบ้าง
ซึ่งก็มี store ให้ทั้ง writeable และ readable ไปจนถึง derived ให้ใช้งาน
และสามารถ subscribe ตัวแปรเพื่อดูค่าได้อีกด้วย

[gist id="4583b86fb038b7b491fae91c6fbcbdec" file="App2.svelte"]

ผลที่ได้ก็พอไหวอยู่นะ ใช้เวลาศึกษาและเขียนตามไม่นาน
พบว่าถ้าเคยเขียนพวก react, angular มาบ้างแล้ว
สามารถนำแนวคิดมาเทียบเคียงกันได้เลย
แต่ code ที่เขียนออกมา จะแตกต่างกันออกไป
เป็นอีกหนึ่งทางเลือกที่น่าสนใจ
ศึกษาไว้กันดีกว่าครับ


Go 1.17 Beta 1 ออกมาให้ทดลองแล้ว

$
0
0

วันนี้ Go 1.17 beta 1 ถูกปล่อยออกมาให้ลองทดลองแล้ว
ซึ่งถ้ามี issue เกิดขึ้นมาสามารถแจ้งได้ที่ Open Issue
เพื่อจะได้ปรับปรุงให้ดียิ่งขึ้น ก่อนที่จะปล่อย version อื่น ๆ ออกมา

ทำการติดตั้ง

[gist id="b77f1f1d7946dc738379f361d4cffc70" file="1.txt"]

ลองไปอ่านเอกสารพบว่า ในส่วนของ Go command

มีเรื่องที่น่าสนใจคือ

  • ปรับปรุงการทำงานของ go mod เยอะเลย เช่น Lazy module loading
  • go get -insecure ถูกเอาออกไปแล้ว
  • ปรับปรุงการสร้าง coverage report ที่เร็วขึ้น

สรุปจากบทความเกี่ยวกับ Plan-Do-Check-Act สำหรับ DevOps

$
0
0

อ่านบทความเกี่ยวกับการนำแนวคิด PDCA (Plan-Do-Check-Act)
มาใช้กับการจัดการ วางแผนระบบงานในส่วนของ infrastructure หรือ DevOps

Using the Plan-Do-Check-Act Framework to Produce Performant and Highly Available Systems

เนื่องจากระบบงานนั้น ไม่ใช่สนใจแต่การออก feature ใหม่ ๆ ให้ลูกค้าเท่านั้น
แต่ระบบงานต้องน่าเชื่อถือ รวมทั้งมี performance ที่ดีด้วย
สรุปได้ดังนี้

Plan

เรื่องที่สำคัญมาก ๆ ของการวางแผนคือ NFR (Non-Functional Requirements)
ซึ่งส่งผลต่อความน่าเชื่อถือและ performance ของระบบอย่างมาก
เพื่อกำหนดเป้าหมายของระบบว่า ต้องเป็นอย่างไร

ยกตัวอย่างเช่น
จำนวนผู้ใช้งานพร้อม ๆ กันในกรอบของเวลาที่กำหนด
หรือเรื่องของ response time และ error rate เป็นต้น
เมื่อได้ค่าต่าง ๆ เหล่านี้แล้ว
จะช่วยให้เราสามารถเลือกและออกแบบให้เหมาะสม

  • Architecture
  • Infrastructure
  • Monitoring
  • Testing
  • CI/CD ของการส่งมอบระบบ

Do

เมื่อวางแผนแล้ว สิ่งที่สำคัญมาก ๆ คือ ลงมือทำ
เพื่อ validate ว่าสิ่งที่วางแผนและสร้างขึ้นมา มันเป็นไปดังที่หวังหรือไม่
ดังนั้นอย่าวางแผนนานจนเกินไป ให้ลงมือทำให้บ่อยและเร็ว
ยกตัวอย่างเช่น
การทำ performance testing จากการทำสิ่งต่าง ๆ เหล่านี้

  • การ upgrade พวก software หรือ hardware
  • การ migrate environment
  • การ migrate database
  • การ refactor ระบบ
  • การเปลี่ยนแปลงหรือปรับปรุง feature

เพื่อดูว่าระบบทำงานได้ตามที่คาดหวังหรือไม่
รวมทั้งหาขีดจำกัดการทำงานของระบบรวมทั้งได้ตัวเลขที่วางแผนเอาไว้ด้วย

Check

นำผลจากการลงมือทำ
มาวัดผลและตรวจสอบจากข้อมูลก่อนลงมือทำว่าผลเป็นอย่างไร
เพื่อหาจุดที่สามารถปรับปรุงหรือแก้ไขต่อไปได้
เช่น

  • Slow query
  • Database index
  • Network ช้า
  • ไม่คืน resource หรือไม่
  • มี alert ของพวก error/exception หรือไม่
  • ระบบ monitoring เป็นอย่างไร
  • ในมุมมองของผู้ใช้งานเป็นอย่างไร

Act

จากนั้นนำผลต่าง ๆ ที่ได้มาทำการวิเคราะห์เพื่อหาจุดแก้ไข ปรับปรุง
ว่าในรายละเอียดต้องทำอย่างไร
เพื่อให้ไปถึงเป้าหมายที่ตั้งไว้ได้
ยกตัวอย่างเช่น

  • ต้องทำ caching
  • จัดการเรื่องการใช้งานและคืน resource
  • การปรับปรุง SQL query
  • จำนวนของข้อมูลในการแสดงผลหรือขนาดข้อมูล
  • ต้องใช้ CDN
  • ปรับปรุง load balance
  • เรื่องของ network ทั้ง bandwidth และ routing
  • การ replicate database
  • การติดตั้ง environement ในหลาย ๆ ที่

ซึ่งมันคือ Continuous Learning และ Continuous Improvement นั่นเอง
เพื่อเรียนรู้และปรับปรุงอยู่ตลอดเวลา
สิ่งที่สำคัญคือ ต้องจับวัดเป็นตัวเลขได้เสมอ

ปัญหาที่เกิดจากการนำแนวคิด Microservices มาใช้ในทางที่ผิด

$
0
0

จากการสอนและแบ่งปันเรื่องการออกแบบระบบ
ตามแนวคิด Microservices ที่ Skooldio มา
มีหนึ่งสิ่งที่อยากแนะนำคือ
เมื่อเราเข้าใจและปัญหาที่ Microservices เข้ามาช่วยแก้ไขปัญหา
แต่ถ้าเรานำมาใช้แล้วดันเกิดปัญหามากกว่าเดิม
มันบ่งบอกว่า คุณไม่เข้าใจ หรือ เข้าใจผิด หรือ แก้ปัญหาด้วยวิธีการที่ผิดหรือไม่ ?
มาดูกันว่ามีอะไรบ้าง

ปัญหาใหญ่ แยกกันแล้วแต่ยังผูกมัดกันไปมา

เมื่อมีการแก้ไข ต้องแก้ไขหลาย service
เมื่อต้องการ deploy หรือ scale ก็กระทบไปกันหมด
ยังไม่พอ เมื่อเกิดปัญหา หาและแก้ไขยากกว่าเดิมอีก

หรืออาจจะมาในรูปแบบ layer หรือ service มาตรฐานของแต่ละงาน

จะมี service layer ที่เกี่ยวข้องกัน เช่น

  • Data service
  • Orchestration service
  • Backend-for-Frontend
  • Messaging

แต่ข้อดีของวิธีการนี้คือ

  • ทุกคนในทีมและบริษัทจะพูดในทางเดียวกัน
  • ทำให้ไม่ต้องสร้างขึ้นมาใหม่ทุกครั้ง
  • ง่ายต่อการจัดการ
  • ง่ายต่อการบอกว่า จะต้องสร้าง service อะไรบ้าง และแต่ละ service ทำอะไร

แน่นอนว่า มีทั้งข้อดีและข้อเสีย

ปัญหาต่อมาคือ มักจะแยก service level มากกว่า database layer

ซึ่งทำให้ระบบ scale ได้ยากมาก ๆ
เรามักจะทำอะไรที่มันง่ายกว่าเสมอหรือไม่ ?

เรานำแนวคิด Microservices มาใช้เพราะว่าอะไร

มีปัญหาหรือไม่
หรือต้องทำเพราะว่า โดนสั่ง
หรือต้องทำเพราะว่า มันคือ trend

แนะนำคือ ต้องเริ่มที่ปัญหาและยอมรับปัญหาก่อน
จากนั้นจึงหาวิธีการแก้ไขปัญหานั้น ๆ
ซึ่งอาจจะแก้ไขได้หรือไม่ ด้วยแนวคิด Microservices ก็ได้

เราทำ Microservices แต่เรามีทีมดูแล Core service นะ

Core service คือ service หลักที่ service อื่น ๆ เรียกใช้งาน
เรามักจะบอกว่า มันคือ reuse service นั่นเอง
แน่นอนว่า จำเป็นต้องมีทีมดูแลมากเป็นพิเศษ
เพราะว่ามีคนใช้งานเยอะ

ถ้าคนใช้งานหนึ่ง ขอเปลี่ยนแปลงบางอย่าง จะทำได้ไหมนะ ?
ถ้าทำได้หนึ่งคน แสดงว่าจะมี logic ของคนนั้นมาอยู่ใน core service
คำถามคือ core service มันคือ core service จริงไหม ?


ความรู้เกี่ยวกับ Core domain จะกระจุกอยู่กับ core team เท่านั้นใช่ไหม
ซึ่งมันขัดแย้งกับแนวคิดของ cross-functional team หรือไม่
เพราะว่าเป็นการทำงานแบบ component teamปัญหายังคงอยู่ไหมนะ ?

ยังไม่พอ ทีมสร้างพัฒนา กับทีมดูแล เป็นคนละทีมกัน ?

คาดว่ามีความสนุกแน่นอน

การติดต่อสื่อสารระหว่าง service ก็ไม่ใช่เลือกตามอารมณ์​

ต้องรู้และเข้าใจก่อนว่าในแต่ละ use case การติดต่อสื่อสาร
ควรเป็นอะไรsync หรือ async หรือ event-based เป็นต้น

แบ่งเป็น service เล็ก ๆ ให้ทำงานเป็นอิสระต่อกันแล้ว แต่เมื่อมีปัญหากลับรู้จากผู้ใช้งาน

แต่ทีมหรือบริษัทกลับไม่รู้ หรือ รู้ช้า
นั่นคือปัญหาเรื่องของ observability เช่น logging, tracing และ metric
ที่ยังไม่เพียงพอ หรือ พร้อม หรือไม่

ง่าย ๆ คือ ถ้าทำลงไปแล้ว กลับแย่มากกว่าส่งผลดี
แสดงว่า เรากำลังเดินไปในเส้นทางที่ผิด
ให้ลองหยุดและกลับมามองว่า
ข้อผิดพลาดคืออะไรกันแน่เพื่อปรับปรุง ปรับเปลี่ยนให้มันถูกต้อง

Pinball Architecture คืออะไร ?

$
0
0

อ่านเอกสารแล้วไปเจอคำว่า Pinball Architecture
ก็ได้แต่สงสัยว่าคืออะไร
พอมีเวลาว่างก็ลองมาหาข้อมูลหน่อยว่า
คืออะไร
หมายถึงอะไรบ้าง

ไปเจอบทความน่าสนใจเรื่อง Is Your Microservices Architecture More Pinball or More McDonald’s? ซึ่งอธิบายไว้ดังนี้

เป็นรูปแบบหนึ่งของการออกแบบระบบ
โดยจะทำงานแบบ top-down คือ
ผู้ใช้งานจะใช้งานผ่าน product
จากนั้นก็จะส่ง request ไปยังส่วนงานต่าง ๆ
ที่แยกออกจากกันตามแนวคิด Small service (Single Responsibility)
ทำให้มี service มากมายในการทำงานจาก request หนึ่ง ๆ
ส่งผลให้เกิดภาพที่ซับซ้อนดังรูป (Request/Response model)

สิ่งที่ตามมาคือ การดูการทำงานของ service ทั้งหมด
ทั้ง metric, tracing และ logging ว่าจะต้องจัดการอย่างไร
เพื่อระบุจุดเกิดเหตุของปัญหาได้อย่างทันท่วงที
เป็นรูปแบบที่ดูดีนะ
แต่เมื่อทำการเพิ่ม feature เข้าไป
จะพบว่ามักจะมีความซับซ้อนและงานที่เยอะมาก ๆ
นั่นหมายความว่า มันอาจจะดี แต่น่าจะไม่ดีสำหรับเราหรือไม่นะ ?

ผลกระทบจากความสัมพันธ์ ของแต่ละ service เป็นอย่างไร
ถ้ามีบาง server พังละ จะเกิดอะไรขึ้น
เช่นส่วนอื่น ๆ ก็พังไปด้วยหรือไม่ ?

หรือถ้าจะปรับปรุงเรื่อง performance ละ
จะทำการปรับอย่างไรบ้าง
เพราะว่าสัมพันธ์กันไปหมดเลย ?

นั่นหมายความว่า เรากำลังสร้างปัญหาหรือแก้ไขปัญหา ?

สวัสดี GitHub CodeSpace

$
0
0

หลังจากที่ส่ง request การใช้งาน GitHub CodeSpace ไปนานมากจนลืม
ตอนนี้ได้รับ invite ในการเข้าใช้งานแล้ว
โดยความสามารถที่น่าสนใจคือ

  • Cloud development ผ่าน VS Code แบบง่าย ๆ
  • ใช้งานร่วมกับ GitHub ได้เลย
  • สามารถ config และ เพิ่ม extension ต่าง ๆ ได้

การใช้งานเริ่มจากเลือก GitHub Repository และ Branch

จากนั้นก็สามารถใช้งานได้แล้ว นี่มัน VS Code

ตัวอย่างที่ใช้งานเป็น Java Project ก็ได้ JDK ให้ด้วย

หรือถ้าจะใช้งานผ่าน VS Code บนเครื่อง
ก็ลง extension และ config ตาม link ได้เลย

สามารถอ่านเอกสารเพิ่มเติมได้ที่ Documentation

Viewing all 2000 articles
Browse latest View live