How to Install Magento 2.4.6 on Ubuntu 22.04

Magento
Install Diagram

สวัสดีครับ วันนี้ จะมาพูดถึงการ Install Magento 2 (Adobe Commerce) นะครับ
เป็น eCommerce Software ตัวนึง ที่น่าใช้มากๆ มาพร้อมกับ feature ที่ครบครัน ..

รายละเอียดเพิ่มเติม https://business.adobe.com/products/magento/magento-commerce.html

รายละเอียดของ System ประมาณนี้ครับ

- OS: Ubuntu 22.04
- Magento: 2.4.6-p2 (Open Source)
- Apache: 2.4.x
- PHP: 8.1.2
- Composer: 2.2.6
- MySQL: 8.0.34
- Elasticsearch: 7.17.13

มาเริ่มกันเลย ..

Step 1: Update Operating System

# apt update && apt upgrade -y

Step 2: Install Apache Web Server

# apt install apache2

Step 3: Install PHP and PHP extensions

# apt install php php-common libapache2-mod-php php-cli php-fpm php-mysql php-json php-opcache php-gmp php-curl php-intl php-mbstring php-xmlrpc php-gd php-xml php-zip php-soap php-bcmath php-apcu

Modify php.ini file (/etc/php/8.1/cli/php.ini)

memory_limit = 1GB
upload_max_filesize = 256M
zlib.output_compression = On
max_execution_time = 600
max_input_time = 900
date.timezone = Asia/Bangkok

Step 4: Install the MySQL server

# apt install mysql-server
# mysql_secure_installation

Step 5: Create a Magento Database

# mysql -u root -p
mysql> CREATE DATABASE magento;
mysql> CREATE USER 'magento'@'localhost' IDENTIFIED BY 'Str0ngPa$$w0rd';
mysql> GRANT ALL PRIVILEGES ON magento.* TO 'magento'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

Step 6. Install Elasticsearch

# curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

# apt update && apt install elasticsearch

# systemctl start elasticsearch
# systemctl enable elasticsearch

Verify Elasticsearch

curl -X GET "localhost:9200"

{
"name" : "magento-01",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "-Or5raP6T5uEG3bUG1JYHw",
"version" : {
"number" : "7.17.13",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "2b211dbb8bfdecaf7f5b44d356bdfe54b1050c13",
"build_date" : "2023-08-31T17:33:19.958690787Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

Step 7: Install Composer

# apt install composer

Step 8: Install Magento

Goto Magento Marketplace https://marketplace.magento.com/

Get Access Keys
My profile > Marketplace > My products > Access Keys

# composer global config http-basic.repo.magento.com Your-Public-Key Your-Private-Key

# composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.6-p2 /var/www/magento
# cd /var/www/magento

# bin/magento setup:install \
--base-url=http://your-domain.com \
--db-host=localhost \
--db-name=magento \
--db-user=magento \
--db-password=Str0ngPa$$w0rd \
--admin-firstname=Admin \
--admin-lastname=User \
--admin-email=admin@your-domain.com \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=Asia/Bangkok \
--use-rewrites=1

# chown -R www-data: /var/www/magento

Step 9: Setup Cron jobs

# sudo -u www-data bin/magento cron:install

Step 10: Configure Apache for Magento

Create /etc/apache2/sites-available/magento.conf

<VirtualHost *:80>
ServerAdmin admin@your_domain.com
DocumentRoot /var/www/magento/pub
ServerName your_domain.com
ServerAlias www.your_domain.com

<Directory /var/www/magento>
AllowOverride All
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# a2ensite magento.conf
# a2enmod rewrite

# systemctl restart apache2

Step 11: Access your Magento installation

Store Front: http://your_domain.com
Admin Dashboard: http://your_domain.com/admin_xxxxxx

Step 12: Diasable 2FA

# bin/magento mod:dis Magento_AdminAdobeImsTwoFactorAuth Magento_TwoFactorAuth
# bin/magento setup:di:compile

Options: Tuning Magento

https://experienceleague.adobe.com/docs/commerce-operations/performance-best-practices/software.html

หางานครับ ใครมีมาจ้างได้นะ ราคากันเองครับ

ตอนนี้ ผมรับงานนอกนะครับ ระดมทุน สร้างโรงงาน ใครมีงานมาจ้างได้
งานที่รับ มีดังต่อไปนี้ครับ

– ดูระบบ, setup server, วาง infra
– Setup OpenStack, AWS, Google Cloud, Alibaba Cloud
– Tuning, Load Test, Penetration Test (Security Test)
– ทำ ChatBot, Machine Learning, ทำเว็บ e-Commerce
– IG Print งานแต่ง งาน events ต่างๆ
– Photo Booth
– IoT Development
– Bulk SMS
– SEO

ใครมีงานรายละเอียดประมาณนี้ มาจ้างได้ครับ
Line ID: pornpasok

highscalability

ผมอยากพูดถึงเรื่องการออกแบบ Web Infrastructure ซึ่งเป็นเรื่องที่ผมคิดว่าเป็น skills
ที่ผมถนัดที่สุด ไว้ให้เพื่อนๆ ได้ลองเอาไปวิเคราะห์ พิจารณา เผื่อจะเป็นประโยชน์บ้างครับ
เรื่องพวกนี้ ผมเคยเขียนไว้ ในหลายๆ ตอน ของ blog ผม ซึ่งบางทีลงรายละเอียด
ไว้มากไป ใน post นี้ ผมจะขอพูดถึง concept หลักๆ ที่สำคัญมากๆ ละกันครับ ..

1.Value คือต้องคุ้มค่า สมราคา อะไรที่แพงๆ ผมจะไม่ใช้ เน้นใช้ของให้คุ้ม อย่าไปเน้นของแพง
2.Performance คือประสิทธิภาพต้องสูง เข้าถึงได้เร็ว ช้านิดเดียวไม่ได้ ต้องคำนึงถึง user ที่ใช้งาน
3.Security คือต้องปลอดภัย เราให้บริการคนอื่นแบบ public จะพลาดนิดเดียวก็ไม่ได้
4.Simple คือต้องง่าย ไม่ซับซ้อน สามารถ track ปัญหาได้ง่าย
5.Scalability คือต้องขยายระบบได้ตลอดเวลา และขยายได้ง่าย

หลักๆ เน้นคำนึง ถึงเรื่องพวกนี้ให้มากๆ ครับ เท่าที่ผมเห็นในไทย ส่วนใหญ่
ยังไม่เคยเจอของหนักๆ จริงๆ กัน มักจะเน้นอุปกรณ์ เน้นว่าต้องมี Firewall
เน้นต้องมี หลายๆ tier (hop) ทำให้เวลา track ปัญหา กลับทำให้ยากขึ้น ..

ใครสนใจ เกี่ยวกับเรื่องพวกนี้ แนะนำเข้าเว็บนี้บ่อยๆ ครับ 🙂
URL: http://highscalability.com

High Performance Web Infrastructure

วันนี้ผมมีเวลาว่าง เลยอยากจะเขียนเล่าเรื่องการออกแบบ
Web Infrastructure ให้รองรับ load สูงๆ ได้ ว่าทำแบบไหนดี
โจทย์ของผมคือเป็น web สำหรับ booking ที่จะมีคนเข้าใช้งานจำนวนมาก
ในตอนเปิดให้ใช้งาน เป้าหมายที่ตั้งไว้คือ 1000 tps/s ++
และต้องไม่ down โดยผมมี physical server อยู่ 3 node

ในการออกแบบ Infrastructure นั้น ไม่มีแบบไหนถูกแบบไหนผิด
อยู่ที่ลักษณะของงานของเรา ว่าต้องการแบบไหน อยู่ที่จินตนาการของเรา
ว่าทำแบบไหนดี การออกแบบระบบ ก็เป็นศิลปะ อย่างหนึ่ง ..

Simply The Best เป็นคำตอบ ที่ผมใช้ออกแบบระบบที่ผมจะใช้งานนี้
เท่าที่ดูลักษณะ web แล้ว จะมีการ Read/Write DB หนักพอๆ กัน ถ้าเราแยก DB
ออกไป ก็จะทำให้เกิด connections จำนวนมากเกิดขึ้นในระบบ
ต้องแยก Read/Write ที่ตัว web app อีกเกิดความยุ่งยาก มากขึ้น
ผมเลยเอา web กับ DB ไว้ในตัวเดียวกันไปเลย แล้วใช้ HAProxy
เป็น Load Balancer round robin แบบ keep-alive
มี vip เป็น Public IP ที่ eth0 และใช้ eth1 เป็น Private IP
ยิงเข้าหา แต่ละ node ที่ต้องแยก interface เพื่อเป็นการกระจาย traffic
DB ที่ใช้ผมเลือกเป็น MariaDB ที่ทำงานได้ performance ดีกว่า MySQL
และใช้ Galera Cluster เป็นตัว sync data ของ DB แต่ละ node เข้าหากัน
ทำให้ ทุก node มี data ที่เหมือนกัน node ใด node นึง down ไป
ทุก node ก็จะยังทำงานได้สมบูรณ์ ถ้าเราต้องการเพิ่ม node เข้ามา
ก็สามารถทำได้ง่าย แค่ on ขึ้นมา Galera Cluster ก็จะทำการ sync data ให้

ในส่วนของ Web Server ผมใช้ Apache 2.2.22 ที่มากับตัว Debain Wheezy
มีการ tuning ค่าต่างๆ พอสมควรให้เหมาะกับการใช้งาน ตรงนี้เดี๋ยวผมมาเล่าอีกที
ที่เลือกใช้ apache เพราะ มีความยืดหยุ่นสูง ทำงานได้ดีกับ code ทุกรูปแบบ
ส่วน code เป็น PHP กระจายไปทุก node เก็บไว้ที่ local disk ของแต่ละ node
และใช้ APC เป็น opcode cache อีกระดับนึง

ปัญหาที่เจอ มีดังนี้
– auto increment จะไม่เรียงกัน เท่าไร มีกระโดดบ้าง แต่ก็รับได้
– HAProxy 1.5.4 default จะเก็บ log ทำให้ ถ้า log ใหญ่ๆ จะหนักได้
– เวลาแก้ code ต้อง up ทุก node

ผลที่ออกมา หลังจากใช้งานจริง พบว่า รองรับการใช้งานได้ดีมาก
รับ load จำนวนมหาศาล และ users ได้จำนวนมากพร้อมๆ กัน
ส่วนรายละเอียดการ tuning ผมจะขอแยกอธิบาย ในตอนต่อไป
เพราะว่า เยอะพอสมควร ..

High Scale Web Infrastructure 2012

porsche cayenne งามจริงๆ 🙂

สวัสดีครับ ช่วงนี้ ผมมักจะพูดถึงแต่เรื่อง Web Security ไม่ค่อยได้พูดถึงเรื่อง
การวาง Web Infrastructure มากนัก เพราะว่า ถ้าวางแผน วางครั้งแรก ดีๆ
มีการ monitor และ มีระบบ alert เมื่อ service มีปัญหา ก็จะทำให้ ปัญหาจุกจิกไม่มี

วันนี้ ผมจะมาพูดถึง technology ของเว็บในปี 2012 ว่า เราสามารถใช้ Open Source
ตัวไหนมาช่วยได้บ้าง ในที่นี้ผมจะพูดถึงเว็บทั่วๆ ไป และอ้างอิง technology ที่ใช้กัน
กับเว็บใหญ่ๆ ระดับโลกเช่น Facebook, Youtube และอื่นๆ ..
Varnish ตัวนี้ เป็น caching อย่างดี สำหรับเว็บในยุคนี้ คือจะสามารถ cache
ได้หลายระดับมาก และยังเขียน VCL (Varnish Configuration Language) ได้ละเอียด
ผมชอบตัวนี้มากๆ มันทำได้ดีและง่ายกว่าพวก hardware หรือ load balancer ราคาแพงๆ
เสียอีก เหมาะอย่างยิ่งกับเว็บที่เป็น static page ล้วนๆ แทบจะไม่ต้องไปเรียก web server
กันเลยทีเดียว หรือ dynamic page ก็สามารถ caching ได้ แต่เวลาที่มีการ update page
ใหม่ ต้องมีการ purge/ban URL หรือ page หรือ file ที่ไม่ต้องการให้ cache ออกไป
nginx (Engine X) ตัวนี้เป็น web server ที่ผมชอบมากๆ ส่วนตัวแล้ว ผมเอามาทำ
เป็น web server สำหรับ static file เพราะถ้าเทียบกับ web server รุ่นเก๋าอย่าง Apache22
แล้ว nginx เองทำงานเบากว่ามากๆ เรียกได้ว่า แทบไม่เปลือง memory ของเครื่องเลย
หรือถ้าเป็นไปได้ เอามาใช้กับเว็บที่ใช้ PHP แทน Apache22 ได้ ก็จะทำให้ web server
ทำงานบำลง แต่ได้ประสิทธิภาพเพิ่มขึ้นมาก ..
memcached เป็นอีกตัวนึงที่ใช้ร่วมกันเวลาเขียนโปรแกรม แล้วไม่ต้องเก็บ data เล็กๆ
บางอย่างลง file หรือเวลา query data มาจาก database ก็สามารถ เก็บลงบน memcached
ที่เป็น memory ก่อน ก็จะทำให้ ทำงานได้เร็วขึ้นมาก ..
FlashCache อันนี้ผมพูดถึงระดับ Kernel ของเครื่องที่ใช้ทำ File Server ตัวนี้ จะช่วยได้มาก
เวลาที่มีการเรียก file ต่างๆ ซ้ำๆ กัน จะไม่ต้องไปเรียก จาก file จริงๆ แต่จะมีการเรียกที่ระดับ
cache ของ Kernel แทน ตรงนี้ เป็นข้อดีของ Linux ที่ออกแบบโครงสร้างของ OS มาได้ดีมาก
PHP ผมจะไม่พูดถึงก็เป็นไปไม่ได้ เพราะว่าเว็บประมาณกว่า 90% ของโลก ใช้ PHP เขียน
สำหรับ PHP เอง ก็มีวิธีการที่ให้ทำงานได้เร็ว และมีประสิทธิภาพมากขึ้น โดยไม่ต้องทำอะไรมาก
เราสามารถใช้พวก Alternative PHP Cache (APC) มาลดการใช้งาน CPU ในการ compile code
ของ PHP ลงได้ ตัวนี้ ต้องลองใช้กันดูครับ สำหรับเว็บที่มีการใช้งาน PHP หนักๆ ..

สำหรับในเรื่องของส่วนอื่นๆ ที่ไม่ใช่ส่วนของ web server กันบ้าง แต่ก็มีความเกี่ยวข้องกัน
MySQL ผมว่าเป็น Database ที่ดีมากๆ ตัวนึง อยู่ที่ว่าเราออกแบบโครงสร้างและ optimize
ได้ดีเพียงใดเท่านั้น การทำ index ก็เป็นเรื่องที่สำคัญ บางครั้ง ผมเจอ load จำนวนมหาศาล
และทำงานได้ช้ามาก พอเข้ามาดูพบว่า ไม่มีการทำ index ที่ดี พอทำไป load หายไปหมด
และทำให้ทำงานได้เร็วขึ้นมากๆ ด้วย ตรงนี้ เป็นส่วนที่สำคัญมากครับ ..
noSQL มีอยู่หลายตัวที่นิยมนำมาใช้กัน แต่ผมจะไม่ได้พูดถึงในที่นี้ เพราะต้องยอมรับว่า
ที่ผ่านมา งานผมแค่ MySQL+Memcached ก็เอาอยู่แล้ว เลยยังไม่จำเป็นต้องใช้พวก
noSQL ต่างๆ พวกนี้ มาช่วยลดภาระของ Database หลัก ..
Wowza ตัวนี้ ไม่ถือว่าเป็น Open Source แต่ราคาก็ถือว่าไม่แพงมาก ถ้าเทียบกับ
Software ที่ใช้ทำ Streaming Server ตัวอื่น และประสิทธิภาพ เท่าที่ผมได้ทดลองใช้
ถือว่ายอดเยี่ยมเลยทีเดียว รองรับจำนวนผู้ใช้งานจำนวนมากได้พร้อมๆ กัน และยัง
มี format ในการ stream ได้รองรับทุก OS ทุก browser ไม่ว่าจะเป็น iOS, Android

ที่พูดมานี้ ก็เป็น technology ของยุคนี้ ที่เกี่ยวกับ web service, web application ต่างๆ
จริงๆ แล้วยังมี software อีกหลายๆ ตัวที่น่าสนใจ แต่ยังไม่ได้ใช้เป็นส่วนหลักๆ
วันหลังผมจะมาเขียนถึงแนวคิดต่างๆ ที่ควรคำนึงถึงในการวางระบบใหญ่ๆ ว่า มีอะไรบ้าง
ที่จะทำให้ระบบของเรามีประสิทธิภาพ รองรับกับการใช้งานของคนจำนวนมากได้ และสามารถ
ตรวจสอบปัญหา และแก้ไข ได้เร็ว ทันที ตลอดเวลา ..

Why Varnish Cache

User <-------> Varnish <-------> Web Server <--------> DB

วันนี้ ผมมีโอกาสมาพูดถึง เจ้า Varnish อีกครั้ง ว่าทำไม มันถึงน่าสนใจ มันมีอะไรดี
แล้วมันช่วยอะไรกับระบบเว็บขนาดใหญ่ ที่มีคนเข้าจำนวนมากได้ ..
โดยเฉพาะถ้าเว็บคุณเป็น content พวก static ยิ่งดีเลย เพราะว่า varnish สามารถ
caching ตรงส่วนนี้ได้หมด บน memory ทำให้ เครื่อง web server และ DB เอง
แทบไม่ต้องทำงานอะไรเลย แต่ถ้าเป็นพวก dynamic ตัว varnish เอง ก็ช่วยได้เหมือนกัน
มาดูรายละเอียดกันครับ ว่าทำไมต้อง varnish ??

– เพราะเป็น Open Source ที่มีคุณภาพ ทำไมต้องไปใช้ BlueCoat ที่มีราคาแพงด้วย
ทั้งๆ ที่ Varnish ดีกว่ามากๆๆๆๆๆๆๆๆๆ ถ้าคุณใช้มันเป็น 🙂

– Varnish Configuration Language (VCL) ซึ่งเป็นการเขียน config แบบเข้าใจได้ง่าย
เป็นโครงสร้างที่คล้ายๆ ภาษา C ทำให้เราสามารถ เขียน VCL ให้ทำงานต่างๆ ได้ละเอียด
ตามที่เราต้องการ และใช้การ compile เพียงครั้งเดียว ทำให้ การทำงานทำได้อย่างดี เร็ว
และมีประสิทธิภาพมากๆ

– Varnish เก็บ cache ต่างๆ บน memory ด้วยโครงสร้างที่ดี ทำให้ lookup ได้เร็วมาก
เวลาต้องการเรียกใช้งาน cache ที่ต้องการ โดยแทบจะไม่ทำให้ เครื่อง เกิด i/o load เลย

– Varnish สามารถทำเป็น Load Balance ได้

– Purge URL ที่ต้องการไม่ให้ cache ได้ โดยใช้คำสั่งเข้าใจง่ายๆ สามารถใช้ PHP
เขียนติดต่อ ที่ T port เพื่อทำการ purge URL ทำให้เว็บ มีประสิทธิภาพมาก เพราะว่า
ในกรณีนี้ เราจะสามารถ เขียน VCL ให้ cache URL ทั้งหมด ของระบบได้ ทำให้
Web Server และ DB Server แทบไม่ต้องทำงานเลย แต่ถ้าเวลามีการ update ต่างๆ
เราก็สามารถส่ง URL ที่ต้องการ มา purge ได้ 🙂

ที่เล่ามาก็เป็นส่วนหนึ่งที่ทำไมผมคิดว่า Varnish เหมาะที่จะมาช่วยทำให้ระบบเว็บขนาดใหญ่
สามารถทำงานได้ดีขึ้น มีประสิทธิภาพสูงขึ้น และประหยัดค่าใช้จ่ายในการซื้อ Software
และ Hardware ที่ไม่จำเป็น เป็นการช่วยลดโลกร้อน ที่เป็นปัญหาให้เกิดน้ำท่วมได้ 🙂

PHP Purge Script for Varnish 3.xx

สวัสดีครับ วันนี้ พอดีผม modify ตัว Purge URL ที่เป็น PHP Script สำหรับ
Varnish 3.xx มาใช้งาน ก็เลยเอามาแบ่งปันกันครับ สำหรับการใช้งานก็คือ
ส่ง Parameter มาแบบนี้ครับ ..
vpurge.php?url=/xxx.html&host=test.com

vpurge.php


# get param
$url = $_GET["url"];
$host = $_GET["host"];

  # Varnish 3.xx IP
  $ip = "127.0.0.1";
  # T port
  $port = "6082";

  $timeout = 1;
  $verbose = 1;

  # inits
  $sock = fsockopen ($ip,$port,$errno, $errstr,$timeout);
  if (!$sock) { echo "connections failed $errno $errstr"; exit; }

  if ( !($url || $host) ) { echo "No params"; exit; }

  stream_set_timeout($sock,$timeout);

  #$pcommand = "purge";
  # Send command
  #$pcommand .= ".hash $url#$host#";

  ### PHP Purge for Varnish 3.xx      ###
  ### Modify by: Ton 2011-09-05       ###
  ### http://ton.packetlove.com/blog/ ###
  $pcommand = "ban";
  $pcommand .= " req.http.host == $host && req.url ~ ^$url.*$";

  put ($pcommand);
  put ("quit");

  fclose ($sock);

  function readit() {
    global $sock,$verbose;
    if (!$verbose) { return; }
    while ($sockstr = fgets($sock,1024)) {
      $str .= "rcv: " . $sockstr . "
"; } if ($verbose) { echo "$str\n"; } } function put($str) { global $sock,$verbose; fwrite ($sock, $str . "\r\n"); if ($verbose) { echo "send: $str
\n"; } readit(); }

ง่ายๆ เพียงเท่านี้ แค่เราส่ง parameter มาก็ทำการ purge URL ที่ต้องการได้แล้วครับ 🙂

Web Infrastructure

Web Infrastructure

วันนี้ มีเวลานิดหน่อย ก็เลยมาเล่าถึงเรื่อง Web Infrastructure กัน ว่าแต่ละระบบ
เรียงจากขนาดเล็ก มาจนถึงขนาดใหญ่ มีวิิธีการวาง Infrastructure และแนวคิด
ในการวางระบบต่างกันอย่างไรบ้าง เพื่อที่จะให้รองรับกับจำนวนผู้ใช้งานได้ตาม
ที่ต้องการ ในที่นี้ ผมแบ่งออกเป็นย่อยๆ ประมาณ 6 ระดับครับ มาดูกันเลย  ..

1. จะมี service ทุกอย่างรวมกันอยู่ในเครื่องเดียว ทั้ง web server, DB และอื่นๆ
ใน 1 เครื่อง อาจจะมีจำนวนหลายเว็บ แบบนี้ก็ประเภท web hosting ต่างๆ

2. เมื่อมีคนเข้าเยอะขึ้น เครื่องเดียวทำงานไม่ไหว ก็ต้องมีการแยก web server กับ DB
ออกจากกัน เพื่อให้ทำงานได้มีประสิทธิภาพ รองรับจำนวนผู้ใช้งานได้มากขึ้น การแยก
web server ออกจาก DB นั้น ไม่ได้เกี่ยวกับเรื่อง security หลายๆ คนเข้าใจผิด คิดว่า
การแยกออกจากกันเพื่อเรื่องนี้ แต่จริงๆ แล้วเพื่อ performance อย่างเดียวจริงๆ

3. เมื่อระบบแบบที่ 2 รองรับไม่ไหว เราก็ต้องเพิ่มเครื่อง caching มาช่วยจัดการกับ
static file เช่นพวก jpg, gif, png, html เพื่อทำให้ web server ทำงานได้เบาลง
พวก caching ที่นิยมใช้งานก็เป็นพวก varnish, squid, nginx และพวก lighthttpd
อื่นๆ ที่เก่งในเรื่องการทำงานกับ static file แทน apache2 ที่ทำงานหนักกว่า ..

4. เมื่อเรามี caching มาช่วย web server แล้ว ปัญหาที่ตามมาอีกก็คือ ทางฝั่ง DB บ้าง
ก็จะเริ่มหนัก เราก็เลยต้องมีวิธีการแบ่ง Read/Write ออกจากกัน โดยที่ data ต้องเหมือนกัน
ในกรณีที่ใช้ MySQL เราก็จะทำ MySQL Replication แยก Read/Write ออกจากกัน
เพราะว่าส่วนใหญ่แล้ว จะเป็น Read ประมาณ 90%  Write ประมาณ  10% เท่านั้น ในกรณีนี้
ถ้าเครื่องเดียว ยังไม่เพียงพอกับการ Read เราก็สามารถเพิ่ม MySQL Slave เข้าไปได้
ให้เพียงพอกับจำนวน Read ที่เราต้องการ

5. ในเมื่อโครงสร้างเดิมๆ 1-4 ไม่สามารถรองรับกับจำนวนคนใช้งานได้แล้ว เราก็จำเป็นต้อง
มี LB (Load Balancer)  เข้ามาช่วยเป็นตัวจัดการกระจาย load ให้ระบบของเราให้เท่าๆ กัน
LB มีให้เลือกใช้งานมากมาย ทั้งที่เป็น S/W และ H/W ถ้ามีทุนมากหน่อย ก็เลือกแบบ H/W
ก็จะทำให้การจัดการทำได้ง่ายขึ้น แต่ถ้าต้องการประหยัด S/W LB หลายๆ ตัวก็ทำได้ดี
ในโครงสร้างรูปที่ 5 เราจะใช้ LB มาแบ่ง load ระหว่าง caching 2 ตัว ที่อยู่หน้า web server
เมื่อตัวใดตัวนึงมีปัญหา ระบบก็จะยังใช้งานได้ปกติ ในส่วนของ web server เองก็เช่นกัน เรามี
LB มาเป็นตัวช่วยกระจาย load โดยที่ web server ทุกตัวจะ mount file จาก NFS กลาง
ทำให้ทุกเครื่องมี data ที่เหมือนกัน เมื่อเครื่องใดเครื่องนึง มีปัญหาระบบก็ยังจะทำงานต่อไปได้
ส่วน DB ก็ใช้วิธีการแยก Read/Write เหมือนกับระบบที่ 4

6. เมื่อโครงสร้างแบบที่ 5 เริ่มรองรับไม่ไหว เราก็ต้องมีวิธีวางแผนกันใหม่ สิ่งที่ดีที่สุด ก็คือ
การแยก static กับ dynamic ออกจากกัน แล้วก็เอาเรื่องของ memory เข้ามาช่วย นอกนั้น
ส่วนอื่นๆ ก็คล้ายๆ กับโครงสร้างแบบที่ 5

เอาไว้เท่านี้ก่อนละกันครับ เดี๋ยววันหลังมาเขียนเพิ่มเติมครับ งานเข้าละ  🙂

System Engineer Jobs

รับสมัคร System Engineer รายละเอียดดังนี้ครับ
สนใจส่ง Resume มาที่ ton350d [at] gmail.com
สอบถามเพิ่มเติม +66868885195 (Ton)

Responsibilities
– Participate in the design, implementation and ongoing management of systems architectures that form the foundation for Weloveshopping.com production infrastructure
– Participate in the design of architectures and automation that deliver against strict requirements for functionality, scalability, performance and reliability
– Become proficient in understanding how each software component, system design, and configuration is linked together to form an end-to-end solution
– Serve in a low-volume on-call rotation as an escalation contact during incidents.

Requirements
– BS or MS degree in Computer Science, Engineering, related technical discipline, or equivalent experience
– Minimum of 3 years administering Linux systems in a production environment
– Proven ability to quickly learn and implement unfamiliar technologies
– Extensive expertise with configuration management systems
cfengine experience a plus
– Configuration and maintenance of common applications such as Apache, Nginx, Varnish, Memcached, noSQL, MySQL, NFS, DHCP, NTP, SSH, DNS, and SNMP
– Strong knowledge of Linux kernel configuration, performance monitoring, and tuning
– Advanced experience coding in one of the following languages: Shell, Python or Perl
– Prefer experience coding and/or debugging one or more of the following: PHP, C++ or Ruby
– Experience working with load balancing technologies and large-scale web server farms
– A strong background in internet service deployment, provisioning, IP networking, service infrastructure, or software deployments
– Excellent organization skills, project tracking abilities, communications skills
– Detail oriented with excellent written and verbal communication skills.