Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt

Bài viết Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt thuộc chủ đề về Giải Đáp thời gian này đang được rất nhiều bạn quan tâm đúng không nào !! Hôm nay, Hãy cùng https://NaciHolidays.vn/ tìm hiểu Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt trong bài viết hôm nay nha !

Các bạn đang xem nội dung : “Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt”

Trong dự án hiện nay của tớ khi tới phần scaling hệ thống thì kiến trúc hiện nay theo hướng microservice gặp phải một vấn đề: mọi service trong hệ thống đều tương tác trực tiếp với database nên xảy ra vấn đề càng nhiều service thì càng nhiều kết nối tới database kéo theo tình trạng xảy ra deadlock, performance cũng rất chậm do những kết nối tới database từ những service phải chờ nhau phóng ra.

Bài Viết: Celery là gì

Sau khi được gợi ý về việc chuyển sang dùng hàng đợi thay vì để những service thao tác trực tiếp với database, mình có dành thời gian tìm hiểu thêm về kiến trúc Queue. Do dự án chạy chủ yếu bằng python nên tech lead gợi ý dùng Celery, một hệ thống quản trị queue thịnh hành.

Kiến trúc sau khi chuyển sang dùng queue trong hệ thống của tớ sẽ như sau. Một bài viết khá chi tiết về một dạng thiết kế queue là message queue mọi người khả năng đọc thêm ở toidicodedao

*

Về CeleryLà một hệ thống quản trị hàng đợi xử lý task thời gian thực. Trong hệ thống Celery chúng ta sẽ dùng khái niệm task giống như job ở một vài framework khác như Sidekiq.Input của celery cần kết nối với một loại message broker còn output khả năng kết nối tới một hệ thống backend để lưu trữ kết quả

Mọi người khả năng tham khảo một bài viết khác về Celery trên viblo ở đây. mặt khác Celery cũng có một hệ thống document chi tiết và dễ đọc ở trang chủ https://docs.celeryproject.org/en/latest/getting-started/introduction.html.

Những bài toán nên dùng CeleryChạy background jobsChạy những job lập lịchTính toán phân tánXử lý song songCác chức năng chính Celery cung cấpMonitor: giám sát những job/task được đưa vào queueScheduling: chạy những task lập lịch (giống cronjob)Workflows: tạo một luồng xử lý taskTime & Rate Limits: kiểm soát số lượng task được thực thi trong một khoảng thời gian, thời gian một task được chạy,…Resource Leak Protection: kiểm soát tài nguyên trong quy trình xử lý taskUser Component: được phép người mua tự customize những worker.Cơ chế của CeleryCelery vận hành dựa trên khái niệm task queue. Đây là cơ chế queue dùng để điều phối những job/work giữa những máy khác nhau. Những worker sẽ nhận task, chạy task và trả về kết quả.Input của queue:TaskNhững process trên từng worker sẽ theo dõi queue để thực thi những task mới được đẩy vào queueCelery thường dùng một message broker để điều phối task giữa những clients và worker. Để tạo một task mới client sẽ thêm một message vào queue, broker sau đó sẽ chuyển message này tới worker. Celery hỗ trợ 3 loại broker:RabbitMQRedisSQSMột hệ thống dùng celery khả năng có nhiều workers và brokers, nhờ vậy việc scale theo chiều ngang sẽ rất đơn giản.Những module chính của Celery

Mọi Người Cũng Xem   Inktober Là Gì - Inktober Nghĩa Là Gì

Application

Một instance được khởi tạo từ thư viện Celery được gọi là application

Nhiều Celery application khả năng cùng tồn tại trong một process

Khởi tạo một celery application:

from celery import Celeryapp = Celery()Khi gửi một message tới queue, message đó sẽ chỉ chứa tên của task cần thực thi.

Những celery worker sẽ map giữa tên của task với hàm thực thi task đó, việc mapping như vậy được gọi là task registry

app.taskdef add(x, y):return x + y

Tasks

Task trong Celery có hai nhiệm vụ chính:định nghĩa những gì sẽ xảy ra sau khi một task được gọi (gửi đi message)định nghĩa những gì sẽ xảy ra khi một worker nhận được message đóMỗi task có một tên riêng không trùng lặp, tên này sẽ được refer trong message để worker khả năng tìm được đúng hàm để thực thi. Nếu không định nghĩa tên cho task thì task đó sẽ được tự đặt tên dựa vào module mà task được định nghĩa và tên function của task.Những message của task sẽ không bị xóa khỏi queue chừng nào message đó chưa được một worker xử lý. Một worker khả năng xử lý nhiều message, nếu worker bị crash mà chưa xử lý hết những message đó thì chúng vẫn khả năng được gửi lại tới một worker khácCác function của task nên ở trạng thái idempotent: function không gây ra ra liên quan gì kể cả khi có bị gọi rất nhiều lần với cùng một tham số => một task đã thực thi sẽ đảm bảo không bị chạy lại lần nữa.

Tạo task

Để tạo task chúng ta dùng decorator
app.task(name=”create_new_user”)def create_user(username, password):User.objects.create(username=username, password=password)Để task khả năng retry chúng ta khả năng bound task vào chính instance của nó

task(bind=True)def add(self, x, y):logger.info(self.request.id)Task cũng khả năng kế thừa

import celeryclass MyTask(celery.Task):def on_failure(self, exc, task_id, args, kwargs, einfo): print(“0!r failed: 1!r”.format(task_id, exc))
task(base=MyTask)def add(x, y):raise KeyError()Để biết thêm thông tin và trạng thái của task chúng ta khả năng dùng Task.request

app.task(bind=True)def dump_context(self, x, y):print(“Executing task id 0.id, args: 0.args!r kwargs: 0.kwargs!r”.format( self.request))Celery quản trị trạng thái của tasks và khả năng lưu chúng trong những hệ thống gọi là result backend. Vòng đời mặc định của task trong Celery gồm:

Mọi Người Cũng Xem   Khát Vọng Là Gì - Tham Vọng Và Khát Vọng ở đời sống

PENDING: task đợi được thực thi.

Xem Ngay: Momo Là Gì – Những ý Nghĩa Của Momo

STARTED: task đã khởi chạy

SUCCESS: task đã chạy thành công

FAILURE: task gặp lỗi sau khi khởi chạy

RETRY: task đang được chạy lại

REVOKED: task được thu hồi lại

Ngoài những trạng thái mặc định trên chúng ta khả năng tự định nghĩa thêm trạng thái và update trạng thái cho task bằng method update_state

app.task(bind=True)def upload_files(self, filenames):for i, tệp tin in enumerate(filenames): if not self.request.called_directly: self.update_state(state=”PROGRESS”, TruongGiaThien=“current”: i, “total”: len(filenames))

Gọi task

Celery ưng ý những API để gọi task sau khi đã định nghĩa chúng ở trên.

3 method chính:

apply_async: gửi task message.delay: gửi task messagecalling: task message sẽ không được gửi đi tới worker mà task sẽ được thực thi luôn bởi process hiện nay.

Có một task như sau:

app.taskdef add(x, y):return x + yĐể gọi task này chúng ta sẽ thử dùng 2 method là apply_async và delay

Với delay chúng ta sẽ viết như sau:

# task.delay(arg1, arg2, kwarg1=”x”, kwarg2=”y”)add.delay(10, 5)add.delay(a=10, b=5)Dùng apply_async thì phải viết phức tạp hơn một chút# task.apply_async(args=, kwargs=“kwarg1”: “x”, “kwarg2”: “y”)add.apply_async(queue=”low_priority”, args=(10, 5))add.apply_async(queue=”high_priority”, kwargs=“a”: 10, “b”: 5)Về thực chất delay và apply_async là như nhau nhưng delay đã có rất nhiều sẵn những thiết lập mặc định và chúng ta chỉ khả năng truyền vào những tham số bắt buộc đã định nghĩa trong function của task, còn với apply_async chúng ta khả năng truyền thêm những tham số khác như queue chúng ta muốn gửi message vào,…. Best practice là nên dùng apply_async để tiện việc config chạy task tùy thuộc theo mong muốn dùng.

Celery hỗ trợ việc gọi task theo dạng chaining, kết quả của task này khả năng được truyền vào task tiếp theo

add.apply_async((2, 2), link=add.s(16)) # 20Nhờ vào cơ chế này chúng ta khả năng thiết kế callback cho task như sau
app.taskdef error_handler(uuid):result = AsyncResult(uuid)exc = result.get(propagate=False)print(“Task 0 raised exception: 1!r
2!r”.format( uuid, exc, result.traceback))add.apply_async((2, 2), link_error=error_handler.s())dùng Celery

Setup

pip install -U Celery

dùng

Lựa chọn loại message broker phù hợp với dự án. Như đã nói ở trên Celery hỗ trợ 3 loại message broker là RabbitMQ, Redis, SQS. Mình sẽ đi sâu vào phân tích từng loại message broker trong phần sau về Celery.

Tạo một celery worker với task add

from celery Import Celeryapp = Celery(“name of module”, broker=”url_of_broker”)
app.taskdef add(x, y):return x + yChạy worker

$ celery -A tasks worker –loglevel=infoGọi task

Lưu kết quả

Celery khả năng lưu lại trạng thái của tasks nếu chúng ta cần theo dõi tasks sau này. Với những hệ thống thực hiện task theo phương thức state machine thì việc hệ thống cần nắm được luồng trạng thái của task là vô cùng quan trọng.

Xem Ngay: Niacinamide Là Gì – Công Dụng Và công dụng Trong Làm xinh

Những hệ thống celery dùng để lưu trạng thái task:

SQLAlchemyMemcachedRedis

Để dùng cơ chế lưu kết quả trong Celery chúng ta khai báo celery worker có tham số backend. Ở đây mình dùng redis cho cả việc lưu kết quả task lẫn làm message broker

Mọi Người Cũng Xem   Klq Là Gì - Bất Ngờ Với Câu Trả Lời

app = Celery(“tasks”, backend=”redis://localhost”, broker=”redis://localhost:6379/0″)

Cấu hình Celery

Cấu hình mặc định cơ bản của celery:

## Broker settings.broker_url = “redis://localhost:6379/0″# List of modules to import when the Celery worker starts.imports = (“myapp.tasks”,)## Using the database to store task state và results.result_backend = “db+sqlite:///results.db”task_annotations = “tasks.add”: “rate_limit”: “10/s”Best practice: tạo một tệp tin config riêng cho celery celeryconfig.py

broker_url = “redis://localhost:6379/0://”result_backend = “rpc://”task_serializer = “json”result_serializer = “json”accept_content = timezone = “Europe/Oslo”enable_utc = Truetask_routes = “tasks.add”: “low-priority”, # routing một task tới queue mong muốnNgoài cách thức tạo tệp tin config trên ra chúng ta cũng khả năng config trực tiếp bằng application của Celery app.conf

app.conf.update(enable_utc=True, timezone=”Europe/London”,)Tổng kếtCelery không cần phải config nhiều mà chỉ cần import từ module dùng trực tiếp như sau

from celery Import Celeryapp = Celery(“name of module”, broker=”url_of_broker”)Worker và client của Celery khả năng tự retry

Một process của Celery khả năng xử lý hàng triệu task trong một phút với độ trễ chỉ vài miligiây

Celery hỗ trợ:

Message brokers:RabbitMQRedisSQSXử lý concurrencymultiprocessingmultithreadsingle threadeventlet, geventLưu trữ kết quả trên những hệ thống:AmqpRedisMemcachedSQLAlchemyAmazon S3File systemSerializationjsonyaml

Ở phần sau bài viết mình sẽ đi sâu hơn về worker trong Celery và hai loại message broker mà Celery hỗ trợ: SQS – Redis, cùng lúc ấy dựng một ứng dụng cơ bản dùng hệ thống này.

Thể Loại: Chia sẻ Kiến Thức Cộng Đồng

Nguồn Blog là gì: https://hethongbokhoe.com Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt

Các câu hỏi về Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt


Nếu có bắt kỳ câu hỏi thắc mắt nào vê Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt hãy cho chúng mình biết nha, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình nâng cao hơn hơn trong các bài sau nha <3 Bài viết Celery Là Gì - Nghĩa Của Từ Celery Trong Tiếng Việt ! được mình và team xem xét cũng như tổng hợp từ nhiều nguồn. Nếu thấy bài viết Celery Là Gì - Nghĩa Của Từ Celery Trong Tiếng Việt Cực hay ! Hay thì hãy ủng hộ team Like hoặc share. Nếu thấy bài viết Celery Là Gì - Nghĩa Của Từ Celery Trong Tiếng Việt rât hay ! chưa hay, hoặc cần bổ sung. Bạn góp ý giúp mình nha!!

Các Hình Ảnh Về Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt

Celery Là Gì - Nghĩa Của Từ Celery Trong Tiếng Việt

Các từ khóa tìm kiếm cho bài viết #Celery #Là #Gì #Nghĩa #Của #Từ #Celery #Trong #Tiếng #Việt

Tham khảo thông tin về Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt tại WikiPedia

Bạn hãy xem thông tin chi tiết về Celery Là Gì – Nghĩa Của Từ Celery Trong Tiếng Việt từ web Wikipedia tiếng Việt.◄

Tham Gia Cộng Đồng Tại

💝 Nguồn Tin tại: https://NaciHolidays.vn/

💝 Xem Thêm Chủ Đề Liên Quan tại : https://naciholidays.vn/hoi-dap/

Related Posts

About The Author

Add Comment