POC: معماری سه لایه در AWS با RDS، Flask Microservice و PHP Frontend

در چشم انداز دیجیتال پر سرعت امروزی، ساخت معماری های مقیاس پذیر و کارآمد برای توسعه موفقیت آمیز برنامه بسیار مهم است. یکی از این رویکردها، معماری سه لایه است که یک برنامه کاربردی را به سه لایه مجزا تقسیم می کند: لایه ارائه، لایه برنامه و لایه ذخیره داده. هر لایه وظایف خاص خود را دارد که باعث ارتقای ماژولار بودن، انعطاف پذیری و سهولت نگهداری می شود. در این پست وبلاگ، ما به ایجاد یک اثبات مفهوم (POC) برای پیاده سازی معماری سه لایه در خدمات وب آمازون (AWS) با استفاده از خدمات کلیدی مانند Amazon RDS، Flask Microservice و PHP frontend خواهیم پرداخت.
سفر با راه اندازی پایگاه داده AWS RDS آغاز می شود، جایی که ما یک پایگاه داده MySQL برای ذخیره اطلاعات کارمندان ایجاد خواهیم کرد. سپس از یک نمونه EC2 به این پایگاه داده متصل می شویم تا با داده ها تعامل داشته باشیم و کوئری های SQL را اجرا کنیم. در مرحله بعد، ما یک برنامه پایتون برای خواندن داده ها از پایگاه داده RDS ایجاد می کنیم و از اتصال یکپارچه بین باطن خود و پایگاه داده اطمینان حاصل می کنیم.
قلب معماری ما در Flask Microservice نهفته است که به عنوان لایه کاربردی عمل خواهد کرد. ما یک API RESTful را با Flask توسعه خواهیم داد، که ارتباط بین frontend و backend را امکان پذیر می کند. Flask Microservice داده های کارکنان را از پایگاه داده RDS بازیابی کرده و در قالب JSON ساختاریافته ارائه می کند.
در سمت جلو، ما یک سرور PHP را در یک نمونه EC2 دیگر برای ایجاد یک صفحه وب ساده راه اندازی می کنیم. با استفاده از PHP، ما با Flask Microservice برای بازیابی اطلاعات کارمندان و نمایش آن ها در صفحه وب ارتباط برقرار می کنیم. این نشاندهنده تعامل یکپارچه بین قسمت جلویی و باطن است و قدرت معماری سه لایه را برجسته میکند.
مرحله 1: راه اندازی پایگاه داده در AWS RDS
وارد کنسول AWS خود شوید و به RDS بروید.
یک پایگاه داده جدید ایجاد کنید و “ایزی ایجاد” را انتخاب کنید.
موتور MySQL را برای سادگی انتخاب کنید.
تنظیمات پایگاه داده را پیکربندی کنید:
شناسه نمونه DB: [masked]نام کاربری اصلی: [masked]گذرواژه اصلی: [masked]
توجه: به خاطر داشته باشید که برخی از نمونه های RDS ممکن است آدرس IP عمومی نداشته باشند و فقط منابع داخل VPC می توانند به آنها دسترسی داشته باشند.
مرحله 2: از یک نمونه EC2 به پایگاه داده RDS متصل شوید
برای تعامل با پایگاه داده RDS از یک نمونه EC2، کلاینت MySQL را نصب کرده و اتصال را برقرار کنید:
sudo yum install -y mysql-community-client --nogpgcheck
mysql --version
mysql -h [masked] -u [masked] -p [masked]
مرحله 3: پایگاه داده و جدول POC را ایجاد کنید
اکنون، بیایید پایگاه داده و جدولی را برای ذخیره اطلاعات کارکنان ایجاد کنیم:
CREATE DATABASE pocdb;
USE pocdb;
CREATE TABLE employee (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
INSERT INTO employee (name) VALUES ('John Doe'), ('Jane Smith');
مرحله 4: ساخت یک برنامه پایتون برای خواندن داده ها از RDS
یک برنامه پایتون در نمونه EC2 برای خواندن داده ها از پایگاه داده RDS ایجاد کنید:
import mysql.connector
def read_employee_data():
# RDS database connection details (masked)
host = "[masked]"
user = "[masked]"
password = "[masked]"
database = "pocdb"
try:
# Establish a connection to the MySQL database
connection = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
if connection.is_connected():
print("Connected to the database.")
cursor = connection.cursor()
# Define the SQL query to retrieve all data from the employee table
sql_query = "SELECT * FROM employee"
# Execute the query
cursor.execute(sql_query)
# Fetch all rows from the result set
rows = cursor.fetchall()
# Process the result set and print the data
for row in rows:
employee_id = row[0]
name = row[1]
print(f"Employee ID: {employee_id}, Name: {name}")
# Close the cursor and connection
cursor.close()
connection.close()
else:
print("Database connection failed.")
except mysql.connector.Error as e:
print(f"Error connecting to the database: {e}")
if __name__ == "__main__":
read_employee_data()
لطفاً برنامه را آزمایش کنید تا مطمئن شوید که بازیابی داده ها از پایگاه داده در حالت مستقل به درستی کار می کند.
مرحله 5: ایجاد Flask Microservice در نمونه EC2
Flask را روی نمونه EC2 نصب کنید و یک میکروسرویس Flask را برای بازیابی اطلاعات کارمندان از پایگاه داده RDS راه اندازی کنید:
pip install Flask
from flask import Flask, jsonify
import mysql.connector
app = Flask(__name__)
@app.route('/employees', methods=['GET'])
def get_employees():
# RDS database connection details (masked)
host = "[masked]"
user = "[masked]"
password = "[masked]"
database = "pocdb"
try:
# Establish a connection to the MySQL database
connection = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
if connection.is_connected():
cursor = connection.cursor()
# Define the SQL query to retrieve all data from the employee table
sql_query = "SELECT * FROM employee"
# Execute the query
cursor.execute(sql_query)
# Fetch all rows from the result set
rows = cursor.fetchall()
# Close the cursor and connection
cursor.close()
connection.close()
# Process the result set and build a list of employees
employees = []
for row in rows:
employee_id = row[0]
name = row[1]
employee_data = {"employee_id": employee_id, "name": name}
employees.append(employee_data)
# Return the list of employees as JSON response
return jsonify(employees)
else:
return "Database connection failed.", 500
except mysql.connector.Error as e:
return f"Error connecting to the database: {e}", 500
if __name__ == "__main__":
app.run(host="172.31.95.155", port=5000)
مرحله 6: تست Microservice فلاسک
میکروسرویس Flask را روی نمونه EC2 راه اندازی کنید و عملکرد آن را آزمایش کنید:
python3 Microservice.py
curl http://[Masked]:5000/employees
مرحله 7: راه اندازی Frontend PHP Server
در یک نمونه EC2 دیگر، PHP را نصب کنید و یک اسکریپت ساده PHP را پیکربندی کنید:
sudo yum update
sudo yum install php
sudo service httpd start
sudo mv hello.php /var/www/html/
sudo chown apache:apache /var/www/html/hello.php
hello.php:
<?php echo 'Hello, World!'; ?>
*مرحله 8: تست PHP Frontend
*
با دسترسی به فایل PHP، فرانت PHP را تست کنید:
http://[masked]/hello.php
مرحله 9: استفاده از PHP برای بازیابی داده ها از Flask Microservice
اسکریپت PHP را برای بازیابی اطلاعات کارکنان از میکروسرویس Flask تغییر دهید:
<?php
// Replace the API endpoint with the correct URL of your microservice
$apiUrl="http://[Masked]:5000/employees";
// Make an HTTP GET request to the API endpoint
$response = file_get_contents($apiUrl);
// Check if the response is valid
if ($response === false) {
echo "Error fetching data from the microservice.";
} else {
// Decode the JSON response into an associative array
$data = json_decode($response, true);
// Check if the JSON decoding was successful
if ($data === null) {
echo "Error decoding JSON data from the microservice.";
} else {
// Loop through the data and display the employee information
echo "<h1>Employee List</h1>";
echo "<ul>";
foreach ($data as $employee) {
echo "<li>Employee ID: " . $employee['employee_id'] . ", Name: " . $employee['name'] . "</li>";
}
echo "</ul>";
}
}
?>
مرحله 10: تست نهایی و نتیجه گیری
دوباره به اسکریپت PHP دسترسی پیدا کنید تا داده های بازیابی شده کارکنان را از میکروسرویس Flask ببینید.
این پست وبلاگ اجرای یک معماری سه لایه در AWS را به نمایش گذاشت که ترکیبی از Amazon RDS، Flask Microservice و PHP frontend است. با جدا کردن برنامه به لایه های مجزا، معماری ماژولار بودن، مقیاس پذیری و قابلیت نگهداری را ارائه می دهد. پایگاه داده RDS اطلاعات کارمندان را ذخیره می کرد، Flask Microservice به عنوان لایه برنامه عمل می کرد و PHP برای نمایش داده ها در یک صفحه وب با backend تعامل داشت. ادغام یکپارچه بین این لایه ها پتانسیل معماری سه لایه را در ساخت برنامه های کاربردی قوی و مقیاس پذیر نشان می دهد.