ক্লাউড স্প্যানারের সাথে Magento একীভূত করা

১. ভূমিকা

424db48d9db91638.png

ক্লাউড স্প্যানার ব্যাকএন্ডের সাথে ম্যাজেন্টোকে একীভূত করা

ম্যাজেন্টো একটি বহুল জনপ্রিয় পিএইচপি ভিত্তিক ওপেন সোর্স ই-কমার্স প্ল্যাটফর্ম যা MySQL-এ ডেটা সংরক্ষণ করে।

এই কোডল্যাবটি ক্যাটালগ মডিউলের জন্য MySQL-এর পরিবর্তে ক্লাউড স্প্যানার ব্যবহারের একটি প্রুফ অফ কনসেপ্ট। যারা স্প্যানারের সাথে ম্যাজেন্টো বা অন্যান্য পিএইচপি অ্যাপ্লিকেশন ইন্টিগ্রেট, টেস্ট এবং ডিপ্লয় করতে আগ্রহী, তাদের জন্য এটি উপযোগী।

স্প্যানার হলো গুগল ক্লাউডের একটি সম্পূর্ণভাবে পরিচালিত, এন্টারপ্রাইজ-গ্রেড, ডিস্ট্রিবিউটেড এবং কনসিস্টেন্ট ডেটাবেস, যা রিলেশনাল ডেটাবেস মডেলের সুবিধার সাথে নন-রিলেশনাল হরাইজন্টাল স্কেলেবিলিটিকে একত্রিত করে। এটি গ্লোবাল অনলাইন ট্রানজ্যাকশন প্রসেসিং ডেপ্লয়মেন্ট, SQL সিম্যান্টিকস, হাইলি অ্যাভেইলেবল হরাইজন্টাল স্কেলিং এবং ট্রানজ্যাকশনাল কনসিস্টেন্সি সমর্থন করার জন্য ডিজাইন করা হয়েছে। স্প্যানার বিপুল পরিমাণ ডেটা পরিচালনা করতে সক্ষম। এর ব্যবহার শুধুমাত্র বড় আকারের অ্যাপ্লিকেশনের মধ্যেই সীমাবদ্ধ নয়, বরং এটি RDBMS প্রয়োজন এমন সমস্ত ওয়ার্কলোডের জন্য একটি একক ডেটাবেস ইঞ্জিনের মানকীকরণে সহায়তা করে। পরিকল্পিত রক্ষণাবেক্ষণ বা রিজিয়ন ফেইলারের ক্ষেত্রে স্প্যানার জিরো-ডাউনটাইম প্রদান করে এবং এর অ্যাভেইলেবিলিটি SLA হলো ৯৯.৯৯৯% । এটি হাই অ্যাভেইলেবিলিটি এবং স্কেলেবিলিটি প্রদানের মাধ্যমে আধুনিক অ্যাপ্লিকেশনগুলোকে সমর্থন করে।

আপনি যা শিখবেন

  • GCE-তে Magento কীভাবে ইনস্টল করবেন
  • স্প্যানার এমুলেটর কীভাবে সেট আপ করবেন
  • HarbourBridge ব্যবহার করে কীভাবে একটি বিদ্যমান MySQL স্কিমা Spanner-এ স্থানান্তর করবেন
  • স্প্যানারের সাথে কাজ করার জন্য, ম্যাজেন্টোর মতো পিএইচপি অ্যাপ্লিকেশন, যেগুলো ডাটাবেস ব্যাকএন্ড হিসেবে MySQL ব্যবহার করে, সেগুলোকে ইন্টিগ্রেট করতে কী পরিবর্তন করতে হবে।

আপনি যা তৈরি করবেন

এই কোডল্যাবটি ম্যাজেন্টোর সাথে স্প্যানার ইন্টিগ্রেট করার উপর কেন্দ্র করে তৈরি। এখানে কপি-পেস্ট করার জন্য কোড ব্লক এবং সেটআপ নির্দেশাবলী দেওয়া হয়েছে, কিন্তু সেগুলি বিস্তারিতভাবে আলোচনা করা হয়নি।

এই কোডল্যাবে, আপনি স্প্যানারের সাথে ম্যাজেন্টো ইন্টিগ্রেট করা শুরু করবেন। আপনি যা করবেন:

  • Magento ইনস্টল করা একটি GCE ইনস্ট্যান্স সেট আপ করুন
  • স্প্যানার এমুলেটর ইনস্টল করুন
  • MySQL থেকে Spanner-এ ডেটা মাইগ্রেশনের জন্য HarbourBridge টুল ইনস্টল করুন
  • স্প্যানার থেকে প্রোডাক্ট ক্যাটালগ লোড করার জন্য ম্যাজেন্টো কালেকশনগুলো পরিবর্তন করুন।

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড প্রজেক্ট যা একটি বিলিং অ্যাকাউন্টের সাথে সংযুক্ত।
  • পিএইচপি, লিনাক্স এবং অ্যাপাচি কনফিগারেশন সম্পর্কে জ্ঞান থাকলে তা অতিরিক্ত যোগ্যতা হিসেবে বিবেচিত হবে।
  • Magento-এর অভিজ্ঞতা থাকলে সহায়ক হবে, তবে তা আবশ্যক নয়।

২. GCE ইনস্ট্যান্স প্রস্তুত করা

GCE ইনস্ট্যান্স তৈরি করুন

এখানে উল্লিখিত ধাপগুলো অনুসরণ করে গুগল ক্লাউড প্ল্যাটফর্মে একটি কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করুন।

GCE ইনস্ট্যান্স তৈরি করার সময়, ইনস্ট্যান্স টাইপ পরিবর্তন করে e2-standard-2 এবং বুট ডিস্কের আকার 20GB করুন। আপনি সবকিছু ডিফল্ট রাখতে পারেন, কিন্তু "Allow HTTP traffic" এবং "Allow HTTPs traffic" নির্বাচন করতে ভুলবেন না, কারণ আমরা Magento-এর ওয়েব ইন্টারফেস ব্যবহার করব।

এর ফলে e2-standard-2 ধরনের একটি মেশিন তৈরি হয়, যা কোনো শেয়ার্ড কোর ইনস্ট্যান্স নয় এবং এতে 2vCPU, 8GB RAM ও 20GB ডিস্ক স্পেস রয়েছে।

অপারেটিং সিস্টেমটি হলো ডেবিয়ান ১০। ইনস্ট্যান্স তৈরি হতে এক বা দুই মিনিট সময় লাগতে পারে।

এটি তৈরি হয়ে গেলে, ক্লাউড কনসোলে 'SSH'-এ ক্লিক করে লগ ইন করুন।

4bf915ef8d37c942.png

এটি একটি নতুন ব্রাউজার উইন্ডো খুলবে এবং আপনাকে একটি টার্মিনালে নিয়ে যাবে।

পূর্বশর্ত সফটওয়্যার ইনস্টল করুন।

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. ম্যাজেন্টোর জন্য প্রয়োজনীয় পিএইচপি মডিউলগুলো ইনস্টল করুন।
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 ইনস্টল করছেন। পরবর্তীতে, আপনি হারবারব্রিজ ব্যবহার করে স্কিমাটি স্প্যানারে মাইগ্রেট করবেন।

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.png1a126e452ca7312e.pngae39c6f4bbe3be74.png

sudo apt update && sudo apt -y install mysql-server
# You will be prompted to enter a root password
  1. অ্যাপাচি২ ইনস্টল করুন
sudo apt -y install apache2

sudo a2enmod proxy_fcgi rewrite

Magento2 ইনস্টল এবং কনফিগার করুন

ম্যাজেন্টো কমার্স ক্লাউড প্রজেক্টটিতে ম্যাজেন্টো সাইট ও স্টোরকে সম্পূর্ণভাবে অ্যাক্সেস করার জন্য একটি ডাটাবেস স্কিমা এবং সার্ভিস অন্তর্ভুক্ত রয়েছে।

এটি ইনস্টল ও চালু করার সবচেয়ে সহজ উপায় হলো কম্পোজার ব্যবহার করে ইনস্টল করার জন্য ম্যাজেন্টোর নির্দেশাবলী অনুসরণ করা:

  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. নিচের বিষয়বস্তু দিয়ে /etc/apache2/sites-available/magento.conf ফাইলটি তৈরি করে Magento ভার্চুয়াল হোস্ট কনফিগার করুন।
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. সিমলিঙ্কগুলো তৈরি করুন এবং অ্যাপাচি২ পুনরায় চালু করুন।
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. MySQL-এ Magento-এর জন্য ডাটাবেস এবং ইউজার তৈরি করুন।
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. আপনার স্থানীয় ওয়ার্কস্পেস যাচাই করুন। স্থানীয় পরিবেশেই সার্ভারটি হোস্ট করা হচ্ছে কিনা তা যাচাই করতে, ইনস্টল কমান্ডে দেওয়া বেস URL ব্যবহার করে স্টোরটি অ্যাক্সেস করুন। এই উদাহরণের জন্য, আপনি নিম্নলিখিত URL ফরম্যাটগুলি ব্যবহার করে স্থানীয় Magento স্টোরটি অ্যাক্সেস করতে পারেন:
  • http://<GCEexternalIP>/
  • http://<GCEexternalIP>/<adminuri>

GCEexternalIP ক্লাউড কনসোলে পাওয়া যাবে:

3947f1164e1d5409.png

অ্যাডমিন প্যানেলের URI পরিবর্তন করতে, এটি সনাক্ত করার জন্য এই কমান্ডটি ব্যবহার করুন:

php bin/magento info:adminuri
  1. সম্পূর্ণ পেজ ক্যাশে নিষ্ক্রিয় করুন। ডেভেলপমেন্টের উদ্দেশ্যে, আপনি Magento2-এর সম্পূর্ণ পেজ ক্যাশে নিষ্ক্রিয় করতে পারেন। এর ফলে আপনি স্প্যানারে ডেটা পরিবর্তন করতে পারবেন এবং ক্যাশ করা মান দ্বারা প্রভাবিত না হয়েই তা ওয়েবসাইটে প্রতিফলিত হবে।
php bin/magento cache:disable full_page

সেটআপ স্প্যানার

স্প্যানার এমুলেটর ইনস্টল করুন

ক্লাউড এসডিকে একটি লোকাল, ইন-মেমরি এমুলেটর প্রদান করে, যা আপনি কোনো জিসিপি প্রজেক্ট বা বিলিং অ্যাকাউন্ট তৈরি না করেই বিনামূল্যে আপনার অ্যাপ্লিকেশন ডেভেলপ ও টেস্ট করার জন্য ব্যবহার করতে পারেন। যেহেতু এমুলেটরটি শুধুমাত্র মেমরিতে ডেটা সংরক্ষণ করে, তাই রিস্টার্ট করলে ডেটা, স্কিমা এবং কনফিগ সহ সমস্ত স্টেট হারিয়ে যায়। এমুলেটরটি স্প্যানার প্রোডাকশন সার্ভিসের মতোই এপিআই প্রদান করে এবং এটি লোকাল ডেভেলপমেন্ট ও টেস্টিংয়ের জন্য তৈরি, প্রোডাকশন ডেপ্লয়মেন্টের জন্য নয়।

এমুলেটরটির ইনস্টলেশন, ব্যবহার এবং স্থাপন সম্পর্কে আরও তথ্যের জন্য অনুগ্রহ করে নিচের লিঙ্কটি ব্যবহার করুন:

স্প্যানার এমুলেটর ব্যবহার করে

# 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 স্প্যানারে মাইগ্রেট করুন

স্প্যানার ইন্টিগ্রেট করার কাজে হাত দেওয়ার আগে, আমরা হারবারব্রিজ (HarbourBridge) নামক একটি টুল ব্যবহার করে উপরে আমাদের ম্যাজেন্টো ইনস্টলেশনের অংশ হিসেবে তৈরি করা MySQL ডাটাবেসটিকে স্প্যানারে রূপান্তর করব।

মূলত, হারবারব্রিজ একটি বিদ্যমান MySQL বা PostgreSQL ডেটাবেসের বিষয়বস্তু স্প্যানারে লোড করার জন্য একটি স্বয়ংক্রিয় কর্মপ্রবাহ প্রদান করে। এর জন্য কোনো কনফিগারেশনের প্রয়োজন হয় না—কোনো ম্যানিফেস্ট বা ডেটা ম্যাপ লেখার দরকার পড়ে না। এর পরিবর্তে, এটি সোর্স ডেটাবেসটি ইম্পোর্ট করে, একটি স্প্যানার স্কিমা তৈরি করে, সোর্স ডেটাবেসের ডেটা দিয়ে একটি নতুন স্প্যানার ডেটাবেস তৈরি করে এবং একটি বিস্তারিত মূল্যায়ন প্রতিবেদন তৈরি করে। হারবারব্রিজ মূলত মূল্যায়নের উদ্দেশ্যে কয়েক দশ জিবি পর্যন্ত ডেটাবেস লোড করার জন্য তৈরি, পূর্ণাঙ্গ মাইগ্রেশনের জন্য নয়।

হারবারব্রিজ একটি বিদ্যমান MySQL বা PostgreSQL সোর্স ডেটাবেস ব্যবহার করে স্প্যানারে মাইগ্রেশনের প্রাথমিক পর্যায়ে সহায়তা করে, যাতে আপনি দ্রুত স্প্যানার ব্যবহার শুরু করতে পারেন। এটি একটি মূল্যায়ন প্রতিবেদন তৈরি করে, যেখানে স্প্যানারের জন্য একটি সামগ্রিক মাইগ্রেশন-উপযুক্ততা স্কোর, টাইপ ম্যাপিংয়ের টেবিল-ভিত্তিক বিশ্লেষণ এবং সোর্স ডেটাবেসে ব্যবহৃত কিন্তু স্প্যানার দ্বারা সমর্থিত নয় এমন ফিচারগুলোর একটি তালিকা থাকে।

হারবারব্রিজ স্প্যানার এমুলেটরের সাথে, অথবা সরাসরি একটি স্প্যানার ইনস্ট্যান্সের সাথে ব্যবহার করা যেতে পারে।

HarbourBridge README-তে একটি Spanner ইনস্ট্যান্সের সাথে টুলটি ব্যবহার করার জন্য একটি ধাপে ধাপে কুইক-স্টার্ট গাইড রয়েছে।

হারবারব্রিজ ইনস্টল করুন

টুলটি আপনার মেশিনে ডাউনলোড করে ইনস্টল করুন। এটি কাজ করার জন্য গোল্যাং (golang) ইনস্টল করা আবশ্যক। আগে থেকে গো (Go) সেট আপ করা না থাকলে, একটি নতুন ইনস্ট্যান্সে সমস্ত প্রয়োজনীয় মডিউল ইনস্টল করতে কিছুটা সময় লাগতে পারে।

# 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

স্প্যানার-সিএলআই টুলটি সেট আপ করুন

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

৩. স্প্যানারের সাথে কাজ করার জন্য ম্যাজেন্টোকে রূপান্তর করুন

এখন যেহেতু আমাদের Magento চালু আছে এবং Magento ডাটাবেস মাইগ্রেট করে Spanner ইনস্ট্যান্সটি তৈরি করা হয়েছে, আমরা Spanner-এ সংরক্ষিত ডেটার সাথে কাজ করার জন্য Magento-কে পরিবর্তন করার কাজ করব।

Magento ইনস্টলেশনটি রূপান্তর করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করা হবে:

  • magento-spanner-port প্রজেক্টটি ক্লোন করুন
  • স্প্যানারের সাথে সংযোগ পরিবর্তন করুন
  • স্প্যানার থেকে ক্যাটালগের বিবরণ পূরণ করা হয়েছে কিনা তা যাচাই করুন।

Magento প্রজেক্টের ফর্কটি ক্লোন করুন

নীচে উল্লেখিত গিট ইউআরএল থেকে ম্যাজেন্টোর জন্য পিএইচপি অ্যাপ্লিকেশন কোডটি ক্লোন করুন, যেটিতে ক্যাটালগ, উইশলিস্ট এবং কার্ট মডিউলগুলির পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে।

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

আপনার হোম ডিরেক্টরি দেখতে অনেকটা এইরকম হওয়া উচিত:

$ ls
go  harbourbridge  magento-spanner-port  magento2

যেখানে আমরা magento-spanner-port থেকে কোড ব্যবহার করে magento2 কোডবেসটি পরিবর্তন করব।

স্প্যানারের সাথে সংযোগ পরিবর্তন করুন

কোডের পরিবর্তনগুলো UI-তে প্রতিফলিত হয়েছে কিনা তা পরীক্ষা করতে, আমরা নিচের ধাপগুলো অনুসরণ করতে পারি -

নমুনা বাস্তবায়নের জন্য এই গিটহাব লিঙ্কটি দেখুন: https://github.com/searceinc/magento-spanner-port

  • google/cloud-spanner পিএইচপি ক্লায়েন্ট লাইব্রেরিটি প্রয়োজন।
  • স্প্যানারের সাথে সংযোগ স্থাপনের জন্য স্প্যানার অ্যাডাপ্টার যোগ করুন।
  • স্প্যানার ইনস্ট্যান্স এবং সার্ভারের তথ্য কনফিগার করুন।
  • স্প্যানারের সাথে সংযোগ স্থাপন করতে অ্যাডাপ্টারে SpannerInterface এবং Spanner যোগ করুন।

প্রথমে, আমাদের কম্পোজার ব্যবহার করে ক্লাউড-স্প্যানার পিএইচপি লাইব্রেরিটি ইনস্টল করতে হবে। magento2 ডিরেক্টরিতে, এই কমান্ডটি চালান:

cd ~/magento2
composer require google/cloud-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

এখন, $project_id, $instance, এবং $database এর জন্য স্প্যানার সংযোগের তথ্য ইনপুট করতে DB/Adapter/Spanner/Spanner.php ফাইলটি পরিবর্তন করুন:

$ 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 ক্লাসটি পরিবর্তন করে এখন স্প্যানার অ্যাডাপ্টারের মধ্যে নতুন তৈরি করা Connection ফাংশনটি ব্যবহার করে স্প্যানারের সাথে সংযোগ স্থাপন করুন। ফাইলটিতে সাদা লাইনগুলোর পরে সবুজ লাইনগুলো যোগ করুন। 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 অ্যাডাপ্টার থেকে স্প্যানার অ্যাডাপ্টারে ডেটা ফেচ করার পদ্ধতিটি পরিবর্তন করতে হবে। স্প্যানারের সাথে সংযোগ স্থাপন করতে এবং স্প্যানার থেকে ডেটা ফেচ করার জন্য AbstractCollection-এর _loadAttributes পদ্ধতিটি পরিবর্তন করুন। লাল লাইনটি সবুজ লাইনগুলো দিয়ে প্রতিস্থাপন করুন।

/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);

...

স্প্যানার থেকে ক্যাটালগের বিবরণ পূরণ করা হয়েছে কিনা তা যাচাই করুন।

ব্যাস! এখন, আপনি ব্রাউজারে আপনার Magento ইনস্টলেশনে গিয়ে ডেটা লোড হচ্ছে কিনা তা পরীক্ষা করতে পারেন।

উদাহরণস্বরূপ, ঘড়ির জন্য ক্যাটালগের এন্ট্রিগুলো হলো:

13b54ba4482408fc.png

টার্মিনালের মাধ্যমে পণ্যগুলোর মধ্যে যেকোনো একটির জন্য স্প্যানার ডেটা পরিবর্তন করুন এবং স্প্যানারে সেই পরিবর্তন নিশ্চিত করতে টার্মিনালের মাধ্যমে ডেটাটি কোয়েরি করুন।

$ 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" হয়েছে।

63a9c7b065c7051f.png

৪. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে ম্যাজেন্টোর ক্যাটালগ মডিউলটিকে স্প্যানারের সাথে সংযুক্ত করেছেন! এটি একটি সম্পূর্ণ ইন্টিগ্রেশন নয়, তবে ম্যাজেন্টোর মতো একটি পিএইচপি অ্যাপ্লিকেশনকে স্প্যানার ইনস্ট্যান্সের সাথে সংযুক্ত করার মূল উপাদানগুলো সম্পর্কে আপনি এখন জানেন।

পরিষ্কার করা

যখন POC সেটআপ এবং যাচাইকরণ সম্পন্ন হবে, তখন আপনি এই প্রক্রিয়ার সময় তৈরি হওয়া GCP রিসোর্সগুলো মুছে ফেলতে চাইতে পারেন। এর মধ্যে Compute Engine Virtual Machine অন্তর্ভুক্ত থাকবে, এবং আপনি যদি Emulator-এর পরিবর্তে Cloud Spanner ব্যবহার করার সিদ্ধান্ত নিয়ে থাকেন, তবে সেই ইনস্ট্যান্সটিও এর অন্তর্ভুক্ত হবে।

এরপর কী?

এটি স্প্যানার পিওসি-এর জন্য তৈরি একটি প্রোটোটাইপ মডেল মাত্র।

আপনি যদি স্প্যানার নিয়ে কাজ করা এবং এই কোডল্যাবে আমরা যে প্রযুক্তিগুলো ব্যবহার করেছি সে সম্পর্কে আরও জানতে চান, তাহলে এখানে কিছু অতিরিক্ত রিসোর্স দেওয়া হলো: