یا وظیفه شما کوچک است یا می توانید آن را به کارهای کوچکتر تقسیم کنید. و یک کار کوچک برای یک میکروسرویس مناسب است.
طراحی نرم افزار یک مرحله ضروری در توسعه نرم افزار است. رویکرد طراحی می تواند بر کل پروژه و نحوه رسیدگی به نیازهای مختلف تأثیر بگذارد.
توسعه دهندگان اغلب از یک معماری یکپارچه استفاده می کنند و تمام اجزای نرم افزار را در یک ماژول واحد جمع می کنند. با این حال، این رویکرد می تواند ناکارآمد باشد، به ویژه برای برنامه های کاربردی بزرگتر.
هدف میکروسرویس ها رفع این محدودیت هاست. میکروسرویس یک برنامه کاربردی کوچک و مدولار است که عملکردهای خاصی را انجام می دهد. برخلاف کاربردهای یکپارچه، میکروسرویس ها امکان استقرار و مقیاس بندی مستقل را فراهم می کنند. در نتیجه انعطاف پذیری بیشتری دارند و نگهداری آنها راحت تر است.
معماری میکروسرویس
معماری میکروسرویس یک رویکرد طراحی نرم افزاری است که یک برنامه کاربردی بزرگ را به سرویس های مستقل تقسیم می کند و هر سرویس برای رفع نیازهای تجاری خاص طراحی شده است.
این سرویس ها بر روی منابع اختصاصی، از جمله نمونه های پایگاه داده جداگانه و قدرت محاسباتی اجرا می شوند. بر خلاف سیستمهای یکپارچه، برنامههای میکروسرویس بهطور سست کوپل شدهاند که امکان انعطافپذیری بیشتر را فراهم میکند.
در یک سیستم توزیعشده، گرههای سرور، برنامههای میکروسرویس را بهعنوان فرآیندهای مجزا اجرا و اجرا میکنند – با استفاده از پروتکلهای ارتباطی مانند HTTP یا از طریق واسطههای پیام مانند RabbitMQ با یکدیگر ارتباط برقرار میکنند.
اساساً، این رویکرد معماری خدمات را قادر می سازد تا استقلال خود را از یکدیگر حفظ کنند و در عین حال به طور مؤثر در سیستم نرم افزاری کار کنند.
در این آموزش، ما شما را از طریق پیادهسازی یک میکروسرویس ساده که دادههای کاربر را با استفاده از Flask و PostgreSQL مدیریت میکند، راهنمایی میکنیم.
یک پایگاه داده PostgreSQL راه اندازی کنید
برای شروع، PostgreSQL را نصب کنید. اگر PostgreSQL را نصب نکرده اید، می توانید نحوه نصب PostgreSQL در ویندوز یا نحوه نصب PostgreSQL را در macOS بیابید.
از طرف دیگر، می توانید یک نمونه پایگاه داده PostgreSQL راه دور را پیکربندی کنید.
این راهنما از لایه رایگان Render برای راه اندازی پایگاه داده PostgreSQL استفاده می کند. برای چرخاندن یک نمونه پایگاه داده PostgreSQL در Render این موارد را دنبال کنید:
- به وب سایت Render بروید، برای یک حساب کاربری ثبت نام کنید و به صفحه داشبورد خود وارد شوید.
- در صفحه داشبورد خود، از لیست خدمات نمایش داده شده، سرویس PostgreSQL را انتخاب کنید.
- در صفحه تنظیمات دیتابیس، مشخصات مورد نیاز را پر کرده و مطمئن شوید که لایه رایگان را انتخاب کرده و در نهایت روی Create database کلیک کنید.
می توانید کد این پروژه را در این مخزن GitHub پیدا کنید.
یک فلاسک میکروسرویس ایجاد کنید
- در ترمینال خود، یک دایرکتوری جدید بسازید و به آن تغییر دهید: mkdir flask-microservicecd flask-microservice
- سپس virtualenv را نصب کنید تا یک محیط توسعه مجازی ایزوله ایجاد کنید. pip install virtualenv
- یک محیط مجازی در پروژه خود ایجاد کنید: virtualenv venv
- در نهایت محیط مجازی را فعال کنید. # Windows: .\venv\Scripts\activate# Unix یا MacOS: منبع venv/bin/activate
mkdir flask-microservice
cd flask-microservice
pip install virtualenv
virtualenv venv
# Windows:
.\venv\Scripts\activate
# Unix or MacOS:
source venv/bin/activate
بسته های مورد نیاز را نصب کنید
- یک فایل requirement.txt جدید در دایرکتوری ریشه ایجاد کنید و این بسته ها را اضافه کنید: flaskpsycopg2-binarysqlalchemy
- بعد، بسته ها را نصب کنید. pip install -r requires.txt
flask
psycopg2-binary
sqlalchemy
pip install -r requirements.txt
یک سرور Flask ایجاد کنید
در پوشه اصلی، یک فایل جدید ایجاد کنید: service.py و کد زیر:
- واردات زیر را انجام دهید: از flask import Flask, request, jsonifyfrom sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext. import declarative declarative_baseimport psycopg2
- نمونه Flask را ایجاد کنید و اتصال پایگاه داده را پیکربندی کنید. app = Flask(__name__) engine = create_engine (“postgresql+psycopg2://flask_service_fe0v_user:4785MhjfkdjfhjfjyUx67O2Nuzjchb2MQIP@dpg-chffjfjdkgmbagres8.com.com sk_service_fe0v”) URL پایگاه داده خارجی را در صفحه تنظیمات پایگاه داده Render کپی کنید. ما از روش SQLAlchemy create_engine و Psycopg2 برای پیکربندی اتصال پایگاه داده استفاده خواهیم کرد. اطمینان حاصل کنید که URL پایگاه داده در کد بالا را با URL نمونه PostgreSQL خود که با فرمت مشخص شده در بالا مطابقت دارد، به روز کرده و جایگزین کنید. اگر فرمت URL نادرست باشد، کد با خطا مواجه می شود.
- یک مدل SQLAlchemy برای پایگاه داده ایجاد کنید. Base = declarative_base()class User(Base): __tablename__ = ‘users’ id = Column(Integer,primary_key=True) name = Column(String(50))Base.metadata.create_all(engine)printers(“Table” با موفقیت ایجاد شد.”)Session = sessionmaker( engine) کد یک مدل داده برای جدول کاربران تعریف می کند. پس از تعریف مدل، جدول را با استفاده از متد SQLAlchemy create_all ایجاد می کند که شی موتور اتصال پایگاه داده را به عنوان پارامتر می گیرد. در نهایت، یک نمونه از Session maker با استفاده از همان شی موتور ایجاد می کند تا تعامل با پایگاه داده را فعال کند.
- در نهایت، مسیرهای API را برای میکروسرویس تعریف کنید. @app.route(“/api/user”, method=[“POST”])def create_user(): data = request.get_json() name = data[“name”] سعی کنید: sesion = Session() new_user = کاربر جدید (name=name) session.add(new_user) session.commit() بازگشت {“id”: new_user.id، “name”: new_user.name، “message”: f”User {name} ایجاد شد.”}، 201 به جز Exception به عنوان e: print(f”خطای ‘{e}’ رخ داد.”) return {“error”: “یک خطایی در حین ایجاد کاربر رخ داد.”}, 500@app.route(“/api/user” , method=[“GET”])def get_all_users(): try: session = Session() users = session.query(User).all() if users: if users: if users: result.append({ “id”: user.id، “name”: user.name}) return jsonify(نتیجه) other: f”خطای “{e}” رخ داد.”) return {“error”: “یک خطا در هنگام دریافت همه کاربران رخ داد.”}, 500if __name__ == “__main__”: app.run(debug=True, host=” 0.0.0.0″)
from flask import Flask, request, jsonify
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import psycopg2
app = Flask(__name__)
engine = create_engine("postgresql+psycopg2://flask_service_fe0v_user:4785MhjfkdjfhjfjyUx67O2Nuzjchb2MQIP@dpg-chffjfjdkgfk54d6mb7860-a.oregon-postgres.render.com/flask_service_fe0v")
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
Base.metadata.create_all(engine)
print("Table 'users' created successfully.")
Session = sessionmaker(engine)
@app.route("/api/user", methods=["POST"])
def create_user():
data = request.get_json()
name = data["name"]
try:
session = Session()
new_user = User(name=name)
session.add(new_user)
session.commit()
return {"id": new_user.id, "name": new_user.name, "message": f"User {name} created."}, 201
except Exception as e:
print(f"The error '{e}' occurred.")
return {"error": "An error occurred while creating the user."}, 500
@app.route("/api/user", methods=["GET"])
def get_all_users():
try:
session = Session()
users = session.query(User).all()
if users:
result = []
for user in users:
result.append({"id": user.id, "name": user.name})
return jsonify(result)
else:
return jsonify({"error": f"Users not found."}), 404
except Exception as e:
print(f"The error '{e}' occurred.")
return {"error": "An error occurred while getting all users."}, 500
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0")
Microservice را تست کنید
کد بالا یک میکروسرویس ساده داده کاربر را نشان می دهد که داده ها را از پایگاه داده PostgreSQL اضافه و واکشی می کند. در حالت ایدهآل، میکروسرویسها معماری REST API را منعکس میکنند، زیرا امکان یک رویکرد انعطافپذیر برای ساخت سرویسهای وب را فراهم میکند – این معماری به خوبی با الگوی طراحی میکروسرویسها مطابقت دارد.
با این حال، توجه به این نکته مهم است که میکروسرویس ها بسته به نیازهای خاص سیستم می توانند از انواع دیگر رویکردهای طراحی و پروتکل های ارتباطی نیز استفاده کنند.
برای آزمایش سرویس، سرور توسعه را بچرخانید و به Postman بروید تا درخواست های HTTP را به نقاط پایانی تعریف شده ارسال کنید.
flask --app service run
در Postman، یک درخواست POST برای افزودن داده های کاربر ایجاد کنید.
کانتینرسازی میکروسرویس ها با داکر
Docker برنامه ها و وابستگی های آنها را در کانتینرها جمع می کند. این رویکرد توسعه، استقرار و مدیریت میکروسرویس ها را در یک محیط تولید ساده می کند زیرا هر سرویس می تواند به طور مستقل عمل کند و با استفاده از پروتکل ارتباطی پیکربندی شده با سرویس های دیگر ارتباط برقرار کند.
قبل از شروع، ابتدا باید Docker را با دنبال کردن مراحل موجود در وب سایت Docker نصب کنید. سپس، یک تصویر Docker از یک Dockerfile بسازید که حاوی دستورالعملهای لازم برای تنظیم وابستگیهای مورد نیاز برای اجرای برنامه در یک ظرف است.
- یک Dockerfile در پوشه اصلی پروژه خود ایجاد کنید و این دستورالعمل ها را اضافه کنید: FROM python:3.9-alpineWORKDIR /appCOPY requires.txt./RUN pip install -r requires.txtCOPY. .EXPOSE 5000CMD [“python”، “./service.py”]
- دستور زیر را برای ساختن تصویر داکر اجرا کنید. docker build -t flask-microservice .
- در نهایت کانتینر Docker را اجرا کنید. docker run -p 5000:5000 flask-microservice
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "./service.py"]
docker build -t flask-microservice .
docker run -p 5000:5000 flask-microservice
با این کار یک کانتینر Docker شروع به اجرای میکروسرویس Flask می کند و پورت 5000 روی کانتینر را در معرض پورت 8000 در دستگاه میزبان قرار می دهد و به شما امکان می دهد درخواست های HTTP را از مرورگر وب یا Postman خود با استفاده از URL http://localhost:5000 انجام دهید.
پذیرش معماری میکروسرویس
معماری میکروسرویس ها به یک رویکرد محبوب برای توسعه برنامه های کاربردی نرم افزاری مقیاس پذیر و قوی تبدیل شده است. معماری میکروسرویس ها با تقسیم برنامه به سرویس های کوچک و مستقل قابل استقرار، نگهداری و مقیاس بندی سیستم را آسان تر می کند.
در حالی که این معماری مزایای بالقوه ای دارد، اما برای همه موارد استفاده مناسب نیست. در هر صورت، الزامات تجاری خاص پروژه در درجه اول باید روی رویکرد طراحی اتخاذ شده تأثیر بگذارد.