ce este țelina?
Celeryeste o coadă de locuri de muncă distribuită care simplifică gestionarea distribuției sarcinilor.Dezvoltatorii rupe seturi de date în loturi mai mici pentru telina pentru a procesa în aunit de lucru cunoscut ca un loc de muncă.
implementați unul sau mai multe procese de lucru care se conectează la o coadă de mesaje (anAMQP sau broker bazat pe SQS). Clienții trimit locuri de muncă la brokerul de mesaje, șicoada de așteptare ascultă cererile de locuri de muncă folosindcelery. Brokerul de mesaje distribuie apoi cererile de locuri de muncă lucrătorilor.Lucrătorii așteaptă locuri de muncă din țelină și execută sarcinile.Când ați terminat, lucrătorul trimite un rezultat la o altă coadă pentru clientproces.
în telina, clienții și lucrătorii nu comunică direct unul cu celălalt, ci prin cozi de mesaje.Clientii trimite mesaje folosind sarcini în sistem de mult ca o procedurecall la distanță inițiază o funcție. Clienții nu trebuie să înțeleagă actualformat, ci să adnoteze funcțiile și să le înregistreze cu cadrul:
@app.task def send_hello(x, y): return ‘Hello’ # overrides the broker from your configuration app = Celery('app_name', broker='...') app.tasks
folosind legarea oficială Python, am creat o sarcină și am înregistrat-o cusistemul. Puteți utiliza metodaapply_async(function, args, kwargs,...)
pentru a trimite sarcina la coada corespunzătoare. Clientul apelează get
pe viitor returnat deapply_async
pentru a bloca și a prelua răspunsul sau utilizează metoda de stat pentru a iniția un apel către broker verificând starea cererii.
un mesaj direcționat către o coadă așteaptă în coadă până când cineva îl consumă și mesajul este șters din coadă când a fost recunoscut.
rezultate în telina
este posibil să se țină evidența stărilor unei sarcini. Țelina poate, de asemeneadepozitați sau trimiteți Statele. Deci, în loc să utilizați funcția get, este posibilpentru a împinge rezultatele într-un alt backend. Există mai multe built-in resultbackends pentru a alegede inclusivqlalchemy,specificdatabasesandRPC (RabbitMQ).
în mod implicit, telina este configurat să nu consume rezultatele sarcinii. Setarea opțiunii de configurare result_backend = 'rpc'
spune sistemului să trimită un răspuns la o coadă unică pentru consum. Nu este recomandat să utilizați backend-ul ampq. Ar putea duce la o scurgere de memorie.mai multe informații despre rezultate pot fi găsite aici.
ce sunt schimburile în țelină?
telina funcționează printreruter de mesaje șimodele de publicare-abonare.Editorii împinge mesaje la un schimb care utilizeaza fie direct sauwildcard de potrivire tooutethem la una sau mai multe cozi de lucru în broker. Tipul de schimb definește modul în caremesajele sunt direcționate prin schimb.Configurați tipurile de schimb în configurația:
CELERY_QUEUES = { "my_queue”:{ "exchange”: "my_exchange”, "exchange_type”: "topic”, "binding_key”: "all_tasks.task_type” } } CELERY_DEFUALT_EXCHANGE=”my_exchange” CELERY_DEFAULT_EXCHANGE_TYPE=”direct” CELERY_DEFAULT_ROUTING_KEY=”all_tasks”
în acest exemplu, declarați o coadă implicită ca singura coadă cunoscută cu schimbul implicit, dar suprascrieți Tipul la subiect cu cheia de rutareall_tasks.task_type. Schimbul de subiecte vă permite să utilizați potrivirea wildcardastfel încât sarcinile trimise la all_tasks.* sunt încă primite. Această configurațiepoate apărea în același modul în care porniți aplicația.
tipuri de schimburi
tipurile STANDARD de schimb sunt direct, topic, fanout și anteturi. Thesedictează modul în care mesajele trec abonaților. Cheile de rutare trebuie să se potrivească exact înschimburi directe. Schimburile Fanout trimit mesaje către toate cozile atașate.Subiectele permit potrivirea wildcard. Schimburile de antet trec doar metadate.
Aflați mai multe despretrabbitmq schimburi și Chei de rutare
când ar trebui să folosesc telina?
ca sistem de așteptare a sarcinilor, țelina funcționează bine cu procese de lungă durată sausarcini repetabile mici care lucrează pe loturi.Tipurile de probleme telina mânere sunt SARCINI asincrone comune. Imagescaling, codare video, ETL, trimiterea de e-mail, sau alte conducte beneficiază de acest cadru pre-construit de manipulare o mare parte din munca implicată în construcția lor.
care sunt beneficiile utilizării țelinei?
telina funcționează cu orice limbă prin protocolul de mesaj standardizat.În afară de lansarea oficială Python, alte API-uri sunt în curs de dezvoltare pentru e.g.Java, RustandNode.Este posibil să creați un sistem centralizat folosind orice limbă cu anAMQP sau SQS API.
alte beneficii includ minimizarea cantității de cod necesare pentru distributetasks și capacitatea de a programa locuri de muncă periodic princelerybeat.Celerybeat este un programator care începe SARCINI la intervale regulate.O monitorizare independentă în timp real pentru lucrătorii telina este de asemenea disponibil princelerymon.
De ce ar trebui să folosesc un broker de mesaje cloud?
ca intermediar preconstruit, telina simplifică dezvoltarea și gestionarea conductelor.CloudAMQP elimină nevoile administrative ale backend cu ready-madeclusters.
„noi folosim CloudAMQP – RabbitMQ ca un broker pentru sarcinile noastre asincron throughCelery. Îl folosim ca serviciu asincron bazat pe evenimente. CloudAMQP supportsour proiect prin monitorizarea corespunzătoare și disponibilitate ridicată și cozi scalablebroker.”Shivam Arora, Delhivery
nu mai trebuie să vă faceți griji cu privire la scalarea sistemului dvs. pentru a satisface cererea în creștere.Instanțele noastre vin cu consola de administrare care rulează deja.
Configurarea RabbitMQ cu CloudAMQP
CloudAMQP dispoziții Instancesnearly RabbitMQ instantaneu.Creați un cont și furnizați o instanță direct de la web managementinterface. Built-in auto-scalare permite brokerilor dvs. pentru a lucra rapid.Bazele CloudAMQP costă în întregime pe puterea provisionedinstance de bază și puteți scala în sus și în jos între diferite planuri atunci când este necesar. Nivelul nostru gratuit, Little lemur, este o opțiune excelentă pentru testare.
cum folosesc CloudAMQP ca broker de mesaje telina?
odată furnizat, brokerul CloudAMQP funcționează în același mod ca și sistemul youron-premises. Tot ce aveți nevoie este o adresă URL, un nume de utilizator și o parolă pentru a stabiliconexiune cu brokerul. Telina se ocupă de restul:
app = Celery('app_name', broker='amqps://user:password@host:port/host’)print(app.conf.broker_url)
cadrul telina stochează URL-ul în configurația. Deoarece țelina ruleazăseparat de broker, obțineți același grad de control ca și cum ați rula întregul sistem la fața locului.
pot să-mi conduc lucrătorii de țelină în nor?
în timp ce CloudAMQP oferă un broker de mesaje, este de asemenea posibil să se implementezelery workers pe AWS sau un alt serviciu cloud. Lucrătorii trebuie doar să știeunde locuiește brokerul pentru a deveni o parte a sistemului. Telina menține aqueue pentru evenimente și notificări fără un nod de registru comun.
datorită utilizării unui broker de management de sistem, puteți rula sarcinile inDocker containere overKubernetes.Containerele se scalează automat pentru a se potrivi nevoilor dvs., în timp ce Kubernetes vă permite să definiți politicile de scalare, iar Flower oferă capacități de monitorizare.Un container oficial de țelină poate fi găsit aici:https://hub.docker.com/_/celery.Celery este, de asemenea, pe deplin acceptat onHeroku.
rularea clienților dvs. de țelină și a lucrătorilor în cloud minimizează costul dezvoltării și implementării conductelor.
De ce CloudAMQP sponsorizează proiectul telina
avem mulți clienți care rulează aplicații care au încredere în telina și,prin urmare, susținem activ și lunar dezvoltarea proiectului theCelery (AMQP). Vă rugăm să ne anunțați dacă există ceva în țelină pe care ați dori să ne concentrăm în plus.
vizitați pagina noastră planpentru mai multe informații despre începerea implementării unui cluster RabbitMQ.De asemenea, vă sfătuim să citiți setările recomandate pentru țelină pe CloudAMQP înainte de a începe o conductă de producție, precum și de a câștiga o apreciere pentru cadrul de producție.