Käytännön kokemus Apache DolphinScheduler -sovelluksen käyttämisestä big data -alustan rakentamiseen ja käyttöönottoon sekä tehtävien lähettämiseen AWS:lle
Hei kaikki, nimeni on Li Qingwang, ohjelmistokehitysinsinööri Ciscosta. Tiimimme on käyttänyt Apache DolphinScheduleria rakentaakseen oman big datan ajoitusalustan lähes kolmen vuoden ajan. Alkuversiosta 2.0.3 nykypäivään olemme kasvaneet yhdessä yhteisön kanssa. Tänään jaetut tekniset ideat ovat toissijaisia kehitysversioita, jotka perustuvat versioon 3.1.1, ja niihin on lisätty joitakin uusia ominaisuuksia, jotka eivät sisälly yhteisöversioon.
Tänään kerron, kuinka käytämme Apache DolphinScheduleria suuren dataalustan rakentamiseen ja tehtäviemme lähettämiseen ja käyttöönottamiseksi AWS:lle. Joitakin prosessin aikana kohtaamia haasteita ja ratkaisujamme.
Arkkitehtuurisuunnittelu ja säätö
Aluksi kaikki palvelumme on otettu käyttöön Kubernetesissa (K8s), mukaan lukien API, Alert ja komponentit, kuten Zookeeper (ZK), Master ja Worker.
Suuret tiedonkäsittelytehtävät
Olemme tehneet toissijaista kehitystä sellaisille tehtäville kuin Spark, ETL ja Flink:
ETL-tehtävät: Tiimimme on kehittänyt yksinkertaisen vedä ja pudota -työkalun, jonka avulla käyttäjät voivat luoda nopeasti ETL-tehtäviä.
Kipinätuki : Varhainen versio tuki vain Sparkia, joka toimii Yarnilla, ja teimme sen tukemaan K8s-käyttöä toissijaisen kehityksen kautta. Yhteisön uusin versio tukee tällä hetkellä Sparkia K8s:ssa.
*Flink toissijainen kehitys: Samoin olemme lisänneet Flink On K8s -suoratoistotehtävät sekä tuen SQL-tehtäville ja Python-tehtäville K8sissa.
Tukityö AWS:ssä
Liiketoiminnan laajentuessa ja tietokäytäntöjä vaaditaan, haasteena on, että datatehtäviä on suoritettava eri alueilla. Tämä edellyttää, että rakennamme arkkitehtuurin, joka tukee useita klustereita. Alla on yksityiskohtainen kuvaus ratkaisustamme ja toteutusprosessistamme.
Nykyinen arkkitehtuurimme koostuu keskitetystä ohjauspäätepisteestä, yhdestä Apache DolphinScheduler -palvelusta, joka hallitsee useita klustereita. Nämä klusterit on jaettu eri maantieteellisille alueille, kuten EU:hun ja Yhdysvaltoihin, paikallisten tietokäytäntöjen ja eristysvaatimusten noudattamiseksi.
Arkkitehtoninen säätö
Vastataksemme tähän tarpeeseen olemme tehneet seuraavat muutokset:
Pidä Apache DolphinScheduler -palvelua keskitetysti hallinnassa: DolphinScheduler-palvelumme on edelleen käytössä itse rakennetussa Cisco Webex DC:ssä, mikä säilyttää hallinnan keskittämisen ja johdonmukaisuuden.
Tukee AWS EKS -klusteria : Samalla laajensimme arkkitehtuurimme ominaisuuksia tukemaan useita AWS EKS -klustereita. Tällä tavalla EKS-klusterissa suoritettavien tehtävien uudet liiketoimintavaatimukset voidaan täyttää vaikuttamatta muiden Webex DC -klusterien toimintaan ja tietojen eristykseen.
Tämän suunnittelun avulla voimme vastata joustavasti erilaisiin liiketoiminnan tarpeisiin ja teknisiin haasteisiin varmistaen samalla tietojen eristämisen ja käytäntöjen noudattamisen.
Seuraavaksi esittelemme kuinka käsitellä Apache DolphinSchedulerin teknistä toteutusta ja resurssiriippuvuuksia suoritettaessa tehtäviä Cisco Webex DC:ssä.
Resurssiriippuvuudet ja tallennustila
Koska kaikki tehtävämme ovat Kubernetes (K8s), meidän on tärkeää:
Docker-kuva
varastointisijainti: Aiemmin kaikki Docker-kuvamme oli tallennettu Ciscon Docker-arkistoon.
Kuvanhallinta: Nämä kuvat tarjoavat tarvittavan toimintaympäristön ja riippuvuudet suorittamillemme erilaisille palveluille ja tehtäville.
Resurssitiedostot ja riippuvuudet
Jar-paketit ja asetustiedostot jne.: Käytämme Amazon S3 Bucketia resurssien tallennuskeskuksena käyttäjän Jar-paketin ja mahdollisten riippuvaisten määritystiedostojen tallentamiseen.
Tietoturvaresurssien hallinta: Sisältää tietokannan salasanat, Kafka-salaustiedot ja käyttäjäkohtaiset avaimet jne. Nämä arkaluontoiset tiedot tallennetaan Ciscon Holvipalveluun.
Suojattu käyttöoikeuksien ja oikeuksien hallinta
S3 Bucketin käyttöä varten meidän on määritettävä ja hallittava AWS-tunnistetiedot:
IAM-tilin määritys
Tunnistetietojen hallinta: Käytämme IAM-tilejä hallitaksemme pääsyä AWS-resursseihin, mukaan lukien pääsyavaimet ja salaiset avaimet.
K8s integraatio: Nämä valtuustiedot tallennetaan Kubernetes Secretiin, ja Api-Service viittaa niihin, jotta S3-säilöä voidaan käyttää turvallisesti.
Lupien valvonta ja resurssien eristäminen: IAM-tilien kautta voimme toteuttaa yksityiskohtaisen lupien hallinnan varmistaaksemme tietoturvan ja liiketoiminnan vaatimustenmukaisuuden.
IAM-tilin käyttöavaimien vanhenemisongelmat ja vastatoimenpiteet
Kun käytämme IAM-tilejä AWS-resurssien hallintaan, kohtaamme pääsyavaimen vanhenemisen ongelman. Tässä on lisätietoja siitä, kuinka vastaamme tähän haasteeseen.
Pääsyavaimen vanhenemisongelma
avainaika: IAM-tilin AWS-avain on yleensä asetettu vanhentumaan automaattisesti 90 päivän välein, mikä parantaa järjestelmän turvallisuutta.
tehtävän vaikutus: Kun avaimet vanhenevat, kaikkia tehtäviä, jotka käyttävät näitä avaimia käyttääkseen AWS-resursseja, ei voida suorittaa, mikä edellyttää meidän päivittävän avaimet ajoissa toiminnan jatkuvuuden ylläpitämiseksi.
Vastauksena tähän tilanteeseen määritämme tehtävän säännölliset uudelleenkäynnistykset ja määritämme vastaavan valvonnan. Jos AWS-tilillä on ongelma ennen vanhenemisaikaa, meidän on ilmoitettava vastaaville kehittäjillemme.
Tuki AWS EKS
Kun liiketoimintamme laajenee AWS EKS:ksi, meidän on tehtävä useita muutoksia olemassa olevaan arkkitehtuuriimme ja tietoturvatoimiimme.
Esimerkiksi, kuten juuri mainittu Docker-kuva, laitoimme sen aiemmin Ciscon omaan Docker-varastoon, joten nyt meidän on asetettava Docker-kuva ECR:ään.
Useiden S3-kauhan tuki
AWS-klusterien hajautetun luonteen ja eri yritysten tietojen eristysvaatimusten vuoksi meidän on tuettava useita S3-säilöjä vastataksemme eri klusterien tiedontallennustarpeisiin:
Klusterin ja kauhan välinen vastaavuus: Jokainen klusteri käyttää vastaavaa S3-säilöään tietojen paikallisuuden ja yhteensopivuuden varmistamiseksi.
Muokkaa strategiaa: Meidän on mukautettava tallennustilan käyttökäytäntöämme tukemaan tietojen lukemista ja kirjoittamista useista S3-säilöistä.
ASM:n käyttö: ASM tarjoaa integroidumman ratkaisun AWS-resurssien salasanojen ja avainten hallintaan.
Olemme ottaneet käyttöön menetelmän käyttää IAM-roolia ja palvelutiliä parantaaksemme Podin turvallisuutta:
Luo IAM-rooli ja -käytäntö: Luo ensin IAM-rooli ja sido siihen tarvittavat käytännöt varmistaaksesi, että vain tarvittavat luvat myönnetään.
Sido K8s-palvelutili: Luo sitten Kubernetes-palvelutili ja liitä se IAM-rooliin.
Pod-käyttöoikeuksien integrointi: Kun käytät podia, liittämällä sen palvelutiliin, Pod voi hankkia tarvittavat AWS-tunnistetiedot suoraan IAM-roolin kautta ja siten käyttää tarvittavia AWS-resursseja.
Nämä säädöt eivät ainoastaan paranna järjestelmämme skaalautuvuutta ja joustavuutta, vaan vahvistavat myös yleistä suojausarkkitehtuuria varmistaakseen, että toiminta AWS-ympäristössä on sekä tehokasta että turvallista. Samalla vältetään myös aiempi avainten automaattinen vanheneminen ja uudelleenkäynnistyksen tarve.
Optimoi resurssienhallinta- ja tallennusprosessit
Käyttöönottoprosessin yksinkertaistamiseksi aiomme työntää Docker-kuvan suoraan ECR:ään toissijaisen siirron sijaan:
työnnä suoraan: Muokkaa nykyistä pakkausprosessia niin, että Docker-kuva työnnetään suoraan ECR:ään rakentamisen jälkeen, mikä vähentää aikaviiveitä ja mahdollisia virhepisteitä.
Muutoksen toteutus
Kooditason säädöt: Olemme muokanneet DolphinScheduler-koodia, jotta se tukee useita S3-asiakkaita ja lisännyt välimuistin hallintaa useille S3-asiakkaille.
Resurssienhallinnan käyttöliittymän säädöt: Antaa käyttäjien valita erilaisia AWS-säilön nimiä käyttöliittymän kautta tapahtuville toimille.
resurssien käyttöoikeus: Muokattu Apache DolphinScheduler -palvelu voi nyt käyttää useita S3-säilöjä, mikä mahdollistaa tietojen joustavan hallinnan eri AWS-klusterien välillä.
AWS-resurssien hallinta ja käyttöoikeuseristys
Integroi AWS Secrets Manager (ASM)
Olemme laajentaneet Apache DolphinScheduleria tukemaan AWS Secrets Manageria, jolloin käyttäjät voivat valita salaisuuksia eri klusterityypeistä:
ASM toiminnallinen integraatio
Käyttöliittymän parannuksia: DolphinSchedulerin käyttöliittymään lisätään erilaisten salatyyppien näyttö- ja valintatoiminnot.
Automaattinen avainten hallinta: Yhdistää tiedostopolun, joka tallentaa käyttäjän valitseman salaisuuden todelliseen Pod-ympäristömuuttujaan ajon aikana, mikä varmistaa avaimen turvallisen käytön.
Dynaaminen resurssien määritys- ja alustuspalvelu (Init Container)
Hallitaksemme ja alustaaksemme AWS-resursseja joustavammin otimme käyttöön palvelun nimeltä Init Container:
Resurssien veto: Init Container vetää automaattisesti käyttäjän määrittämät S3-resurssit ja sijoittaa ne määritettyyn hakemistoon ennen kuin Pod suoritetaan.
Avainten ja konfiguraatioiden hallinta: Määrityksen mukaan Init Container tarkistaa ja hakee salasanatiedot ASM:ssä, tallentaa ne sitten tiedostoon ja yhdistää ne ympäristömuuttujien kautta Podin käyttöön.
Terraformin soveltaminen resurssien luomiseen ja hallintaan
Olemme automatisoineet AWS-resurssien määritys- ja hallintaprosessin Terraformin avulla, mikä yksinkertaistaa resurssien allokointia ja käyttöoikeusasetuksia:
Automaattinen resurssien määritys: Luo Terraformilla tarvittavat AWS-resurssit, kuten S3 Bucket ja ECR Repo.
IAM-politiikka ja roolien hallinta: Luo automaattisesti IAM-käytännöt ja roolit varmistaaksesi, että jokaisella liiketoimintayksiköllä on pyynnöstä pääsy tarvitsemiinsa resursseihin.
Lupaeristys ja turvallisuus
Käytämme kehittyneitä käyttöoikeuksien eristysstrategioita varmistaaksemme, että eri liiketoimintayksiköt toimivat itsenäisissä nimiavaruuksissa, välttäen resurssien käyttöristiriidat ja turvallisuusriskit:
Toteutustiedot
Palvelutilin luominen ja sitominen: Luo itsenäinen palvelutili jokaiselle liiketoimintayksikölle ja sitoa se IAM-rooliin.
Nimitilan eristäminen: Jokainen palvelutilitoiminto käyttää vastaavia AWS-resurssejaan määritetyn nimitilan IAM-roolin kautta.
Parannuksia klusterin tukeen ja käyttöoikeuksien hallintaan
Klusterityyppiset laajennukset
Lisäsimme uuden kentän cluster type, tukemaan erityyppisiä K8S-klustereita, jotka eivät sisällä vain tavallisia Webex DC -klustereita ja AWS EKS -klustereita, vaan tukevat myös tiettyjä klustereita, joilla on korkeammat turvallisuusvaatimukset:
Klusterityyppien hallinta
Klusterin tyyppi -kenttä: by Introducedcluster typekentät, voimme helposti hallita ja laajentaa tukea eri K8S-klustereille.
Kooditason mukauttaminen: Tiettyjen klustereiden ainutlaatuisia tarpeita varten voimme tehdä kooditason muutoksia varmistaaksemme, että suojaus- ja määritysvaatimukset täyttyvät, kun töitä suoritetaan näissä klusteissa.
Kehitimme Auth-järjestelmän erityisesti hienorakeista käyttöoikeuksien valvontaa varten, mukaan lukien projektien, resurssien ja nimitilojen välisten käyttöoikeuksien hallinta:
Oikeuksien hallintatoiminto
Projekti- ja resurssioikeudet: Käyttäjät voivat hallita käyttöoikeuksia projektiulottuvuuden kautta, kun heillä on projektin käyttöoikeudet, he voivat käyttää kaikkia projektin resursseja.
nimitilan käyttöoikeuksien valvonta: Varmista, että tietty ryhmä voi suorittaa projektinsa töitä vain määritetyssä nimiavaruudessa, mikä varmistaa käynnissä olevien resurssien eristämisen.
Esimerkiksi ryhmä A voi suorittaa vain tiettyjä projektitöitä A-nimitilassaan. Esimerkiksi käyttäjä B ei voi suorittaa töitä käyttäjän A nimiavaruudessa.
AWS-resurssienhallinta- ja käyttöoikeussovellus
Käytämme Auth-järjestelmää ja muita työkaluja AWS-resurssien käyttöoikeuksien ja käyttöoikeuksien hallintaan, mikä tekee resurssien allokoinnista joustavampaa ja turvallisempaa:
Usean AWS-tilin tuki: Auth-järjestelmässä voit hallita useita AWS-tilejä ja sitoa erilaisia AWS-resursseja, kuten S3 Bucket, ECR, ASM jne.
Resurssikartoitus ja lupasovellus: Käyttäjät voivat kartoittaa olemassa olevat AWS-resurssit ja hakea käyttöoikeuksia järjestelmään, jotta he voivat helposti valita resurssit, joita he tarvitsevat käytettäväksi suorittaessaan työtä.
Palvelu Tilinhallinta ja lupien sitominen
Palvelutilien ja niiden käyttöoikeuksien hallinnan parantamiseksi olemme ottaneet käyttöön seuraavat toiminnot:
Palvelutilin sitominen ja hallinta
Ainoa ero palvelutilin välillä: Sido palvelutili tietyn klusterin, nimitilan ja projektin nimen kautta sen ainutlaatuisuuden varmistamiseksi.
Lupasidonnainen käyttöliittymä: Käyttäjät voivat sitoa palvelutilin tiettyihin AWS-resursseihin, kuten S3, ASM tai ECR, käyttöliittymässä tarkan käyttöoikeuksien hallinnan saavuttamiseksi.
Yksinkertaista toimintaa ja resurssien synkronointia
Sanoin juuri paljon, mutta varsinainen toiminta on käyttäjille suhteellisen yksinkertaista. Koko sovellusprosessi on itse asiassa kertaluonteinen tehtävä parantaaksemme Apache DolphinSchedulerin käyttökokemusta AWS-ympäristössä. toimenpiteet toimintamenettelyjen yksinkertaistamiseksi ja resurssien synkronointikyvyn parantamiseksi.
Haluan tiivistää sen sinulle:
Yksinkertaistettu käyttöliittymä
DolphinSchedulerissa käyttäjät voivat helposti määrittää tietyn klusterin ja nimitilan, jossa heidän työnsä suoritetaan:
Klusterin ja nimitilan valinta
Klusterin valinta: Lähettäessään työtä käyttäjät voivat valita klusterin, jossa he haluavat työn suoritettavan.
nimitilan määritys: Valitusta klusterista riippuen käyttäjän on myös määritettävä nimitila, jossa työ suoritetaan.
Palvelutilin ja resurssien valinta
Palvelutilin näyttö: Sivu näyttää automaattisesti vastaavan palvelutilin valitun projektin, klusterin ja nimitilan perusteella.
Resurssien käyttöoikeuksien määritys: Käyttäjät voivat valita avattavasta luettelosta palvelutiliin liitetyn S3-ämpäri, ECR-osoitteen ja ASM-avaimen.
tulevaisuuden näkymät
Nykyisessä suunnittelussa on vielä joitain alueita, joita voidaan optimoida ja parantaa käyttäjien ilmoittamisen parantamiseksi ja käytön ja ylläpidon helpottamiseksi:
Kuvan työntöoptimointi: Harkitse Ciscon kuljetuspakkausprosessin ohittamista ja paketin työntämistä suoraan ECR:ään, erityisesti EKS-kohtaisten kuvamuutosten yhteydessä.
Yhden napsautuksen synkronointitoiminto: Suunnittelemme kehittävämme yhden napsautuksen synkronointitoiminnon, jonka avulla käyttäjät voivat ladata resurssipaketin S3-säilöön ja valita valintaruudun synkronoidaksesi sen automaattisesti muiden S3-säilöiden kanssa toistuvien latausten vähentämiseksi.
Kartoita automaattisesti Auth-järjestelmään: Kun Aws-resurssit on luotu Terraformin kautta, järjestelmä yhdistää nämä resurssit automaattisesti käyttöoikeuksien hallintajärjestelmään, jotta käyttäjät eivät syötä resursseja manuaalisesti.
Käyttöoikeuksien hallinnan optimointi: Automatisoidun resurssien ja käyttöoikeuksien hallinnan ansiosta käyttäjien toiminnasta tulee yksinkertaisempaa, mikä vähentää asennuksen ja hallinnan monimutkaisuutta.
Näillä parannuksilla odotamme auttavan käyttäjiä ottamaan käyttöön ja hallitsemaan työtään tehokkaammin Apache DolphinSchedulerin avulla, olipa kyseessä Webex DC tai EKS, ja samalla parantaa resurssienhallinnan tehokkuutta ja turvallisuutta.