การผสานรวม Magento กับ Cloud Spanner

การผสานรวม Magento กับ Cloud Spanner

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ม.ค. 5, 2022
account_circleเขียนโดย Derek Downey

1 บทนำ

424db48d9db91638.png

การผสานรวม Magento กับแบ็กเอนด์ Cloud Spanner

Magento เป็นแพลตฟอร์มอีคอมเมิร์ซแบบโอเพนซอร์สที่ใช้ PHP ซึ่งได้รับความนิยมอย่างแพร่หลายและจัดเก็บข้อมูลไว้ใน MySQL

โค้ดแล็บนี้เป็น Proof of Concept เพื่อใช้ประโยชน์จาก Cloud Spanner แทน MySQL สําหรับโมดูลแคตตาล็อก ซึ่งจะเป็นประโยชน์สำหรับทุกคนที่สนใจในการผสานรวม ทดสอบ และการทำให้ Magento หรือแอปพลิเคชัน PHP อื่นๆ ใช้งานได้ด้วย Spanner

Spanner คือฐานข้อมูลที่สอดคล้องกันแบบกระจายและจัดการอย่างเต็มรูปแบบสำหรับองค์กรของ Google Cloud ซึ่งรวมข้อดีของโมเดลฐานข้อมูลเชิงสัมพันธ์เข้ากับการปรับขนาดในแนวนอนแบบไม่ใช่เชิงสัมพันธ์ แพลตฟอร์มนี้ออกแบบมาเพื่อรองรับการใช้งานการประมวลผลธุรกรรมออนไลน์ทั่วโลก ความหมายของ SQL การขยายขนาดแนวนอนที่พร้อมใช้งานสูง และความสอดคล้องของธุรกรรม Spanner สามารถจัดการข้อมูลปริมาณมากได้ การใช้งานไม่ได้จำกัดไว้เพียงแอปพลิเคชันขนาดใหญ่เท่านั้น แต่ยังช่วยให้ใช้เครื่องมือฐานข้อมูลที่มาตรฐานสำหรับเวิร์กโหลดทั้งหมดที่ต้องใช้ RDBMS ได้ Spanner ทำให้ระบบไม่มีช่วงพักสำหรับการบำรุงรักษาที่วางแผนไว้หรือความล้มเหลวในภูมิภาค โดยมี SLA ความพร้อมใช้งาน 99.999% รองรับแอปพลิเคชันสมัยใหม่เนื่องจากมีความพร้อมใช้งานและความสามารถในการปรับขนาดสูง

สิ่งที่คุณจะได้เรียนรู้

  • วิธีติดตั้ง Magento ใน GCE
  • วิธีตั้งค่าโปรแกรมจำลอง Spanner
  • วิธีย้ายสคีมา MySQL ที่มีอยู่ไปยัง Spanner โดยใช้ HarbourBridge
  • สิ่งที่คุณต้องเปลี่ยนแปลงเพื่อผสานรวมแอปพลิเคชัน PHP เช่น Magento ที่ใช้ MySQL สำหรับแบ็กเอนด์ฐานข้อมูลเพื่อทำงานร่วมกับ Spanner

สิ่งที่คุณจะสร้าง

Codelab นี้มุ่งเน้นไปที่การผสานรวม Magento กับ Spanner เรามีบล็อกโค้ดและวิธีการตั้งค่าให้คุณคัดลอกและวาง แต่ไม่ได้อธิบายอย่างละเอียด

ใน Codelab นี้ คุณจะเริ่มการผสานรวม Magento กับ Spanner สิ่งที่จะเกิดขึ้นกับคุณมีดังนี้

  • ตั้งค่าอินสแตนซ์ GCE ที่มีการติดตั้ง Magento
  • ติดตั้ง Spanner Emulator
  • ติดตั้ง HarbourBridge Tool สำหรับการย้ายข้อมูลจาก MySQL ไปยัง Spanner
  • แก้ไขคอลเล็กชัน Magento เพื่อโหลดแคตตาล็อกผลิตภัณฑ์จาก Spanner

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud ที่เชื่อมต่อกับบัญชีสำหรับการเรียกเก็บเงิน
  • ความรู้เรื่อง PHP, Linux และการกำหนดค่า Apache จะสามารถทำได้
  • ประสบการณ์ Magento จะมีประโยชน์ แต่ก็ไม่จำเป็น

2 การเตรียมอินสแตนซ์ GCE

สร้างอินสแตนซ์ GCE

สร้างอินสแตนซ์ Compute Engine ใน Google Cloud Platform โดยทำตามขั้นตอนที่ระบุไว้ที่นี่

เมื่อสร้างอินสแตนซ์ GCE ให้เปลี่ยนประเภทอินสแตนซ์เป็น e2-standard-2 และขนาดดิสก์เปิดเครื่องเป็น 20 GB คุณใช้ทุกอย่างเป็นค่าเริ่มต้นได้ แต่อย่าลืมเลือก "อนุญาตการเข้าชม HTTP" และ "อนุญาตการรับส่งข้อมูล HTTP" เนื่องจากเราจะใช้ประโยชน์จากอินเทอร์เฟซเว็บของ Magento

การดำเนินการนี้จะส่งผลให้ประเภทเครื่องเป็น e2-standard-2 ซึ่งไม่ใช่อินสแตนซ์แกนประมวลผลที่ใช้ร่วมกัน และมี vCPU 2 ตัว, RAM 8 GB และพื้นที่ดิสก์ 20 GB

ระบบปฏิบัติการคือ Debian 10 การสร้างอินสแตนซ์อาจใช้เวลา 1-2 นาที

เมื่อสร้างแล้ว ให้เข้าสู่ระบบโดยคลิก "SSH" ใน Cloud Console

4bf915ef8d37c942.png

ซึ่งจะเปิดหน้าต่างเบราว์เซอร์ใหม่และนำคุณไปยังเทอร์มินัล

ติดตั้งซอฟต์แวร์ที่จำเป็น

Magento จะต้องติดตั้งซอฟต์แวร์ที่จำเป็นเบื้องต้นบางอย่าง เราจึงจะเรียกใช้ Magento ได้ กล่าวคือ คุณจะต้องติดตั้ง PHP, Elastic, MySQL และ Apache ตามที่อธิบายไว้ด้านล่าง

  1. ติดตั้งแพ็กเกจที่จำเป็น
sudo apt update

sudo apt -y install lsb-release apt-transport-https ca-certificates wget git screen composer google-cloud-sdk-spanner-emulator gcc
  1. ติดตั้งโมดูล PHP ที่จำเป็นสำหรับ Magento
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update

sudo apt -y install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip php7.4-bcmath php7.4-soap php7.4-grpc
  1. ติดตั้ง Elasticsearch และเริ่มต้นบริการ
wget -qO - 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 /etc/apt/sources.list.d/elastic-7.x.list

sudo apt update && sudo apt -y install elasticsearch

echo "-Xms1g
-Xmx1g" | sudo tee /etc/elasticsearch/jvm.options.d/jvm.options

sudo systemctl start elasticsearch.service
  1. ติดตั้ง MySQL

คุณกำลังติดตั้ง MySQL เพื่อติดตั้งสคีมา Magento เริ่มต้น หลังจากนั้นคุณจะย้ายสคีมาไปยัง Spanner โดยใช้ HarbourBridge

wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb

sudo dpkg -i mysql-apt-config*

คำสั่ง dpkg ด้านบนจะแสดงพรอมต์แบบอินเทอร์แอกทีฟให้ติดตั้งเซิร์ฟเวอร์ MySQL 5.7 เลือกตัวเลือกต่อไปนี้

  • เซิร์ฟเวอร์และคลัสเตอร์ MySQL
  • mysql-5.7
  • ตกลง

a018bfc2ee00bdf5.png 1a126e452ca7312e.png ae39c6f4bbe3be74.png

sudo apt update && sudo apt -y install mysql-server
# You will be prompted to enter a root password
  1. ติดตั้ง Apache2
sudo apt -y install apache2

sudo a2enmod proxy_fcgi rewrite

ติดตั้งและกำหนดค่า Magento2

โปรเจ็กต์ Magento Commerce Cloud มีสคีมาฐานข้อมูลและบริการเพื่อเข้าถึงเว็บไซต์และร้านค้า Magento โดยสมบูรณ์

วิธีที่ง่ายที่สุดในการติดตั้งและใช้งานคือทำตามวิธีการของ Magento ในการติดตั้งโดยใช้ Composer

  1. ติดตั้ง Magento เวอร์ชัน 2.4.2 โดยใช้คอมโพสเซอร์ Magento 2 ต้องใช้คอมโพสเซอร์เวอร์ชัน 1.x คุณอาจเห็นคำเตือนบางอย่างเกี่ยวกับการเลิกใช้งานการสนับสนุนสำหรับเวอร์ชันนี้
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.2 magento2
  1. ตั้งค่าสิทธิ์ของโฟลเดอร์
cd magento2

find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +

find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
  1. กำหนดค่าโฮสต์เสมือน Magento โดยสร้าง /etc/apache2/sites-available/magento.conf ที่มีเนื้อหาด้านล่าง
sudo nano /etc/apache2/sites-available/magento.conf

<VirtualHost *:80>
        ServerAdmin admin@local-magento.com
        DocumentRoot /var/www/html/magento/

        <Directory /var/www/html/magento/>
                Options Indexes FollowSymlinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <FilesMatch \.php$>
               SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. สร้างลิงก์สัญลักษณ์และรีสตาร์ท apache2
cd ~/magento2
sudo ln -s $(pwd) /var/www/html/magento 
sudo ln -s /etc/apache2/sites-available/magento.conf  /etc/apache2/sites-enabled/magento.conf
sudo rm /etc/apache2/sites-enabled/000-default.conf

sudo systemctl restart apache2
  1. สร้างฐานข้อมูลและผู้ใช้สำหรับ Magento ใน MySQL
export ROOT_PASSWORD="<root password from installation>"
export GCE_INSTANCE_IP="<GCE instance IP>"
mysql -uroot -p$ROOT_PASSWORD -e "create database magento"

bin/magento sampledata:deploy

bin/magento setup:install --base-url=http://$GCE_INSTANCE_IP/ --db-host=localhost \
--db-name=magento --db-user=root --db-password=$ROOT_PASSWORD --admin-firstname=admin \
--admin-lastname=demo --admin-email=good@example.com --admin-user=admin \
--admin-password=magento123 --language=en_US --currency=USD --timezone=America/Chicago \
--use-rewrites=1

sudo chown -R :www-data ~/magento2/. 
  1. ยืนยันเวิร์กスペースในเครื่อง หากต้องการยืนยันว่าสภาพแวดล้อมในเครื่องโฮสต์เซิร์ฟเวอร์ ให้เข้าถึง Store โดยใช้ URL พื้นฐานที่คุณส่งในคำสั่งติดตั้ง ในตัวอย่างนี้ คุณสามารถเข้าถึงร้านค้า Magento ในพื้นที่ได้โดยใช้รูปแบบ URL ต่อไปนี้
  • http://&lt;GCEexternalIP&gt;/
  • http://&lt;GCEexternalIP&gt;/&lt;adminuri&gt;

คุณดู GCEexternalIP ได้ในคอนโซล Cloud

3947f1164e1d5409.png

หากต้องการเปลี่ยน URI สําหรับแผงผู้ดูแลระบบ ให้ใช้คําสั่งนี้เพื่อค้นหา

php bin/magento info:adminuri
  1. ปิดใช้แคชทั้งหน้า หากต้องการพัฒนา คุณปิดใช้แคชทั้งหน้าของ Magento2 ได้ ซึ่งจะช่วยให้คุณแก้ไขข้อมูลใน Spanner และแสดงข้อมูลในเว็บไซต์ได้โดยไม่ได้รับผลกระทบจากค่าที่แคชไว้
php bin/magento cache:disable full_page

ตั้งค่า Spanner

ติดตั้งโปรแกรมจำลอง Spanner

Cloud SDK มีโปรแกรมจำลองแบบในหน่วยความจำภายในเครื่อง ซึ่งคุณสามารถใช้เพื่อพัฒนาและทดสอบแอปพลิเคชันของคุณได้ฟรีโดยไม่ต้องสร้างโปรเจ็กต์ GCP หรือบัญชีสำหรับการเรียกเก็บเงิน เนื่องจากโปรแกรมจำลองจัดเก็บข้อมูลไว้ในหน่วยความจำเท่านั้น สถานะทั้งหมด รวมถึงข้อมูล สคีมา และการกำหนดค่าจะหายไปเมื่อรีสตาร์ท โปรแกรมจำลองมี API เดียวกับบริการการผลิต Spanner และมีไว้เพื่อการพัฒนาและทดสอบในเครื่อง ไม่ใช่สำหรับการใช้งานจริง

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

การใช้โปรแกรมจำลอง Spanner

# Set up a new configuration to use the emulator
gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project magento
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/

# Start emulator in a screen session
screen -S magento
gcloud emulators spanner start &
gcloud spanner instances create magento-instance --config=emulator-config --description='Magento Instance' --nodes=1

# Detach from screen 
ctrl+a+d

export SPANNER_EMULATOR_HOST=localhost:9010

ย้ายข้อมูล Magento MySQL ไปยัง Spanner

ก่อนที่จะเจาะลึกในการผสานรวม Spanner เราจะใช้เครื่องมือชื่อ HarbourBridge เพื่อแปลงฐานข้อมูล MySQL ที่สร้างขึ้นเป็นส่วนหนึ่งของการติดตั้ง Magento ของเราด้านบนไปยัง Spanner

หัวใจหลักของ HarbourBridge คือเวิร์กโฟลว์อัตโนมัติสำหรับการโหลดเนื้อหาของฐานข้อมูล MySQL หรือ PostgreSQL ที่มีอยู่ไปยัง Spanner โดยไม่จำเป็นต้องกำหนดค่าใดๆ เลย โดยไม่ต้องเขียนไฟล์ Manifest หรือ Data Map แต่จะนำเข้าฐานข้อมูลต้นทาง สร้างสคีมา Spanner แทน สร้างฐานข้อมูล Spanner ใหม่ที่มีข้อมูลจากฐานข้อมูลต้นทาง และสร้างรายงานการประเมินโดยละเอียด HarbourBridge มีไว้เพื่อการโหลดฐานข้อมูลขนาดไม่เกิน 20-10 GB เพื่อวัตถุประสงค์ในการประเมิน ไม่ใช่การย้ายข้อมูลแบบเต็มขนาด

HarbourBridge เปิดใช้งานการย้ายข้อมูลในระยะเริ่มต้นไปยัง Spanner โดยใช้ฐานข้อมูลต้นทางของ MySQL หรือ PostgreSQL ที่มีอยู่เพื่อให้คุณเริ่มต้นใช้งาน Spanner ได้อย่างรวดเร็ว ซึ่งจะสร้างรายงานการประเมินที่มีคะแนนความแข็งแรงของการย้ายข้อมูลโดยรวมสำหรับ Spanner ซึ่งเป็นการวิเคราะห์การจับคู่ประเภทตารางต่อตารางและรายการฟีเจอร์ที่ใช้ในฐานข้อมูลต้นทางที่ Spanner ไม่รองรับ

HarbourBbridge สามารถใช้กับโปรแกรมจำลอง SPANer หรือใช้กับอินสแตนซ์ Spanner โดยตรง

README ของ HarbourBridge มีคู่มือการเริ่มต้นใช้งานฉบับย่อแบบทีละขั้นตอนสำหรับการใช้เครื่องมือกับอินสแตนซ์ Spanner

ติดตั้ง HarbourBridge

ดาวน์โหลดเครื่องมือลงในเครื่องแล้วติดตั้ง คุณต้องติดตั้ง golang เพื่อให้การดำเนินการนี้ทำงานได้ การติดตั้งโมดูลที่จำเป็นทั้งหมดในอินสแตนซ์ใหม่อาจใช้เวลาสักครู่โดยไม่ต้องตั้งค่าไว้ก่อนหน้านี้

# Install golang
cd ~
wget https://golang.org/dl/go1.17.2.linux-amd64.tar.gz
sudo tar -zxvf go1.17.2.linux-amd64.tar.gz -C /usr/local
rm go1.17.2.linux-amd64.tar.gz

echo 'export GOROOT=/usr/local/go' | sudo tee -a /etc/profile
echo 'export PATH=/usr/local/go/bin:$HOME/go/bin:$PATH' | sudo tee -a /etc/profile
source /etc/profile

# Install harbourbridge
git clone https://github.com/cloudspannerecosystem/harbourbridge
cd harbourbridge
go run github.com/cloudspannerecosystem/harbourbridge help

ย้ายข้อมูล

ใช้คำสั่งต่อไปนี้เพื่อย้ายข้อมูลฐานข้อมูล Magento ไปยัง Spanner

mysqldump --user='root' --password=$ROOT_PASSWORD magento | go run github.com/cloudspannerecosystem/harbourbridge -driver=mysqldump -dbname=magento

ตั้งค่าเครื่องมือ spanner-cli

go install github.com/cloudspannerecosystem/spanner-cli@latest

3 แปลง Magento ให้ทำงานร่วมกับ Spanner

ตอนนี้ Magento ทำงานอยู่ และอินสแตนซ์ Spanner ที่สร้างขึ้นด้วยฐานข้อมูล Magento ย้ายข้อมูลแล้ว เราจะแก้ไข Magento ให้ทำงานกับข้อมูลที่จัดเก็บไว้ใน Spanner

ระบบจะดำเนินการตามขั้นตอนต่อไปนี้เพื่อแปลงการติดตั้ง Magento

  • โคลนโปรเจ็กต์ magento-spanner-port
  • เปลี่ยนการเชื่อมต่อกับ Spanner
  • ตรวจสอบว่ารายละเอียดแคตตาล็อกมาจาก Spanner

โคลนส้อมของโปรเจ็กต์ Magento

โคลนโค้ดแอปพลิเคชัน PHP สำหรับ Magento ซึ่งมีการปรับแต่งสำหรับโมดูลแคตตาล็อก รายการที่อยากได้ และรถเข็นจาก URL Git ที่ระบุไว้ด้านล่าง

cd ~
git clone https://github.com/searceinc/magento-spanner-port

ไดเรกทอรีหน้าแรกควรมีลักษณะดังนี้

$ ls
go  harbourbridge  magento-spanner-port  magento2

โดยที่ magento2 คือฐานของโค้ดที่เราจะแก้ไขโดยใช้โค้ดจาก magento-spanner-port

เปลี่ยนการเชื่อมต่อเป็น Spanner

หากต้องการตรวจสอบว่าการแก้ไขโค้ดแสดงใน UI หรือไม่ ให้ทำตามขั้นตอนด้านล่าง

ดูตัวอย่างการใช้งานได้ที่ลิงก์ GitHub https://github.com/searceinc/magento-spanner-port

  • ต้องมีไลบรารีไคลเอ็นต์ PHP ของ google/cloud-spanner
  • เพิ่มอะแดปเตอร์ Spanner เพื่อสร้างการเชื่อมต่อกับ Spanner
  • กำหนดค่าอินสแตนซ์ Spanner และข้อมูลเซิร์ฟเวอร์
  • เพิ่ม SpannerInterface และ Spanner ในอะแดปเตอร์เพื่อใช้การเชื่อมต่อกับ Spanner

ก่อนอื่น เราต้องติดตั้งไลบรารี PHP ของ Cloud Spanner โดยใช้ Composer ในไดเรกทอรี magento2 ให้เรียกใช้คำสั่งนี้

cd ~/magento2
composer require google/cloud-spanner

จากนั้นเพิ่มไฟล์อะแดปเตอร์ Spanner จาก magento-spanner-port ลงในโค้ดฐาน magento2 ดังนี้

~/magento2$ cp -r ../magento-spanner-port/lib/internal/Magento/Framework/DB/Adapter/Spanner vendor/magento/framework/DB/Adapter/.
~/magento2$ ls -l vendor/magento/framework/DB/Adapter/Spanner
total 16
-rw-r--r-- 1 derekdowney derekdowney 10378 Nov  9 21:03 Spanner.php
-rw-r--r-- 1 derekdowney derekdowney  2948 Nov  9 21:03 SpannerInterface.php

ตอนนี้ให้แก้ไขไฟล์ DB/Adapter/Spanner/Spanner.php เพื่อป้อนข้อมูลการเชื่อมต่อ Spanner สำหรับ $project_id, $instance และ $database

$ nano vendor/magento/framework/DB/Adapter/Spanner/Spanner.php

class Spanner implements SpannerInterface
{
    /**
     * Google cloud project id
     * @var string
     */
    private $project_id = 'magento';

    /**
     * Google cloud instance name
     * @var string
     */
    private $instance  = 'magento-instance';

    /**
     * Cloud Spanner database name
     * @var string
     */
    private $database  = 'magento';

    /**
     * Is Cloud Spanner emulator
     * @var bool
     */
    private $is_emulator = true;
...
   /**
    * Set database connection adapter
    *
    * @param \Magento\Framework\DB\Adapter\AdapterInterface $conn
    * @return $this
    * @throws \Magento\Framework\Exception\LocalizedException
    */
   public function setConnection(\Magento\Framework\DB\Adapter\AdapterInterface $conn)
   {
       $this->_conn = $conn;
       $this->_select = $this->_conn->select();
       $this->_isOrdersRendered = false;
       return $this;
   }


   /**
     * Set Cloud Spanner database connection adapter
     *
     * @return void
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    private function setSpannerConnection()
    {
        $this->_spanner_conn = new Spanner();
    }

แก้ไขคลาส AbstractDB ภายใน Magento ให้เชื่อมต่อกับ Spanner โดยใช้ฟังก์ชันการเชื่อมต่อที่สร้างขึ้นใหม่ภายในอะแดปเตอร์ Spanner เพิ่มเส้นสีเขียวต่อจากเส้นสีขาวในไฟล์ โปรดดูที่ vendor/magento/framework/Data/Collection/AbstractDb.php

$ nano vendor/magento/framework/Data/Collection/AbstractDb.php
...
use Psr\Log\LoggerInterface as Logger;
use Magento\Framework\DB\Adapter\Spanner\Spanner;
...
    protected $_conn;

    /**
     * Cloud Spanner connection
     *
     * @var \Magento\Framework\DB\Adapter\Spanner\SpannerAdapterInterface
     */
    protected $_spanner_conn;
...
       if ($connection !== null) {
            $this->setConnection($connection);
        }
        $this->setSpannerConnection();
        $this->_logger = $logger;
...
   /**
     * Retrieve connection object
     *
     * @return AdapterInterface
     */
    public function getConnection()
    {
        return $this->_conn;
    }

   /**
     * Retrieve connection object
     *
     * @return SpannerAdapterInterface
     */
    public function getSpannerConnection()
    {
        return $this->_spanner_conn;
    }
...

เมื่อเชื่อมต่อแล้ว เราต้องแก้ไขวิธีการดึงข้อมูลจากอะแดปเตอร์ MySQL เป็นอะแดปเตอร์ Spanner แก้ไขเมธอด _loadAttributes ใน AbstractCollection เพื่อเชื่อมต่อกับ Spanner และดึงข้อมูลจาก Spanner แทนที่เส้นสีแดงด้วยเส้นสีเขียว

โปรดดู /app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php

$ nano ./vendor/magento/module-eav/Model/Entity/Collection/AbstractCollection.php

use Magento\Framework\Exception\LocalizedException;
use Google\Cloud\Spanner\SpannerClient;

...
               try {
                    if (is_array($selects)) {
                        $select = implode(' UNION ALL ', $selects);
                    } else {
                        $select = $selects;
                    }
                   $values = $this->getConnection()->fetchAll($select);
                   $con = $this->getSpannerConnection();

                    /**
                     * Cloud Spanner follows strict type so cast the columns in common type
                     */
                    $select = $con->addCast($select, "`t_d`.`value`", 'string');
                    $select = $con->addCast($select, "`t_s`.`value`", 'string');
                    $select = $con->addCast($select, "IF(t_s.value_id IS NULL, t_d.value, t_s.value)", 'string');
                    
                    $values = $con->fetchAll($select);

...

ตรวจสอบว่าระบบป้อนข้อมูลรายละเอียดแคตตาล็อกจาก Spanner

เท่านี้ก็เรียบร้อย ตอนนี้คุณสามารถไปที่การติดตั้ง Magento ในเบราว์เซอร์และตรวจสอบว่าข้อมูลกำลังโหลดอยู่

ตัวอย่างเช่น รายการต่อไปนี้คือรายการในแคตตาล็อกสำหรับนาฬิกา

13b54ba4482408fc.png

แก้ไขข้อมูล Spanner ผ่านเทอร์มินัลสำหรับผลิตภัณฑ์รายการใดรายการหนึ่ง และค้นหาข้อมูลผ่านเทอร์มินัลเพื่อยืนยันการแก้ไขใน Spanner

$ spanner-cli -pmagento -i magento-instance -d magento
spanner> SELECT * FROM catalog_product_entity_varchar WHERE value LIKE "Aim Analog%";
+----------+--------------+----------+-----------+--------------------+
| value_id | attribute_id | store_id | entity_id | value              |
+----------+--------------+----------+-----------+--------------------+
| 390      | 73           | 0        | 36        | Aim Analog Watch |
+----------+--------------+----------+-----------+--------------------+
1 rows in set (80.711542ms)

spanner> UPDATE catalog_product_entity_varchar SET value = "Aim Analog Spanner" WHERE value_id=390;
Query OK, 1 rows affected (0.19 sec)

spanner> SELECT * FROM catalog_product_entity_varchar WHERE value_id=390;
+----------+--------------+----------+-----------+--------------------+
| value_id | attribute_id | store_id | entity_id | value              |
+----------+--------------+----------+-----------+--------------------+
| 390      | 73           | 0        | 36        | Aim Analog Spanner |
+----------+--------------+----------+-----------+--------------------+
1 rows in set (80.711542ms)

ตอนนี้ ให้โหลดหน้าจออีกครั้งเพื่อยืนยันว่าชื่อนาฬิกาเปลี่ยนเป็น "Aim Analog Spanner" ตามที่ได้อัปเดตผ่านเทอร์มินัล Spanner แล้ว

63a9c7b065c7051f.png

4 ขอแสดงความยินดี

ยินดีด้วย คุณได้เชื่อมต่อโมดูลแคตตาล็อกของ Magento ให้ทำงานร่วมกับ Spanner เรียบร้อยแล้ว ซึ่งไม่ใช่การผสานรวมอย่างสมบูรณ์ แต่ตอนนี้คุณได้ทราบองค์ประกอบสำหรับรับแอปพลิเคชัน PHP เช่น Magento ที่เชื่อมต่อกับอินสแตนซ์ Spanner แล้ว

กำลังล้างข้อมูล

เมื่อการตั้งค่าและการตรวจสอบ POC เสร็จสมบูรณ์แล้ว คุณอาจต้องการลบทรัพยากร GCP ที่สร้างขึ้นในระหว่างกระบวนการ ซึ่งรวมถึงเครื่องเสมือน Compute Engine และอินสแตนซ์ Cloud Spanner ด้วยหากคุณตัดสินใจที่จะใช้เครื่องเสมือนแทนโปรแกรมจำลอง

ขั้นตอนถัดไปคือ

นี่เป็นเพียงโมเดลต้นแบบสำหรับ POC ของ Spanner

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับ Spanner และเทคโนโลยีที่เราใช้ประโยชน์ในโค้ดแล็บนี้ โปรดดูแหล่งข้อมูลเพิ่มเติมต่อไปนี้