paint-brush
Kay Web IDE Códigoykita Puyupi purichin—Mana Laptopniyki chulluchispaby@oleksiijko
Musuq historia

Kay Web IDE Códigoykita Puyupi purichin—Mana Laptopniyki chulluchispa

by Oleksii Bondar12m2025/02/21
Read on Terminal Reader

Nishu unay; Ñawinchanapaq

Proyectoqa microservicio arquitectura kamachiypi ruwasqa kachkan, chaymanta ruwanakuna sapanchasqa yanapakuykunaman rakiyta atikunki. Sapa componente huk ancha especializasqa ruwanamanta ruwasqa, chaymanta flexibilidad, escalabilidad chaymanta sistemapa pantay tolerancia kaqninta qhawan. Chay proyectoqa Go programacion simipim kachkan.
featured image - Kay Web IDE Códigoykita Puyupi purichin—Mana Laptopniyki chulluchispa
Oleksii Bondar HackerNoon profile picture
0-item
1-item

Puyu computadora chaymanta microservicio arquitectura usqaylla wiñayninpa contextonpi, aswan necesidad kan quypaq atiyta dinamicamente ruwanapaq código imaymana programakuna simikunapaq huk garantia seguridad, escalabilidad chaymanta hatun ruway. Kay qillqasqa huk llamk'aymanta willan mayqinchus sapanchasqa pachapi código ruwayta ruwan, chaymanta kunan pacha WEB IDE kaqpaq akllasqa arquitectónico solucionpa allinninkunamanta riman. Chay sistemaqa ruwasqa kachkan Riy , llamk'achin gRPC nisqa allin interservicio nisqa rimanakuypaq, . Redis mensajekuna ruwaq hina hinaspa Docker nisqa wañuchina pachata sapaqchanapaq. A WebSocket nisqa servidor llamk'achkan chiqa pachapi ruwasqakuna rikuchinapaq.

Detalladamente willasaqku imayna sistemapa componentes principales nisqakuna ruwasqa kasqankuta, imayna hukniray solucionkunamanta chaymanta imarayku kay tecnologiakuna akllayqa hatun ruwayta chaymanta seguridadta aypayta saqin.


1. Arquitecturamanta qawariy hinaspa hatun componentekuna

Proyectoqa microservicio arquitectura kamachiypi ruwasqa kachkan, chaymanta ruwanakuna sapanchasqa yanapakuykunaman rakiyta atikunki. Sapa componente huk ancha especializasqa ruwanamanta ruwasqa, chaymanta flexibilidad, escalabilidad chaymanta sistemapa pantay tolerancia kaqninta qhawan.


Hatun componentekuna:


  • gRPC llamk'achkan inter-servicio willanakuypaq. Allinmi microserviciokunapura willayta t'inkinapaq kayrayku:
    • Iskayniyuq protocolo (Protocol Buffers): utqaylla chaymanta pisi willaykunata apachiyta qhawan.
    • Sinchi qillqay: yanapakun mana pantaykunata willayta apachiypi chaymanta ruwaypi.
    • Pisi latencia: mayqinchus ancha chaniyuq ukhu waqyakuykunapaq yanapakuykunapura (kayhina, huk gRPC sirwiqwan huk Redis filawan).
  • WebSocket Servidor: Iskay ñan willayta qun rantiqwan ruway ruwaykuna chiqa pachapi kachaypaq. Huk filaman suscribikun ruwasqakunawan chaymanta willayta clienteman apachin, chaylla rikuchiyta qun huñusqa chaymanta ruway registrokuna.
  • Llamk'aq: Huk sapanchasqa yanapakuy llamkanakunata huk filamanta aysan, huk pachapaq llamkana pachata ruwan, chiqaqchan chaymanta ruwan codigo sapanchasqa Docker waqaychanapi, chaymanta ruwaypa rurunkunata filaman kutiy lluqsichin.
  • Redis: Willayta ruwaq hina llamk'achisqa ruwanakuna gRPC sirwiqmanta Llamk'aqman chaymanta ruwasqakuna Llamk'aqmanta WebSocket sirwiqman t'inkinapaq. Redis kaqpa allinninkunaqa hatun utqaylla, Pub/Sub yanapakuy chaymanta mana sasa escala ruwaymi.
  • Ukhupi kaq módulos:
    • Huñuq chaymanta Docker Runner: Huk módulo Docker kamachiykunata mayu registrowan purichinapaq encargado, chiqa pacha qhawayta saqillan huñusqa chaymanta ruway ruwayta.
    • Simi Ruwaqkuna: Imaymana simikunapaq (C, C++, C#, Python, JavaScript, TypeScript) chiqapchaypaq, huñunapaq, codigo ruwanapaq lógica nisqakunata hukllana. Sapa kallpaq huklla interfazta ruwan, chaytaq musuq simikunapaq ruwanakuna mast'ariyta pisiyachin.


Uraypi siq'iqa willaypa puriyninta clientemanta llamk'aq ruwayman chaymanta kutiy gRPC, Redis chaymanta WebSocket kaqwan rikuchin.


2. Tecnologías nisqakuna, akllanapaq razonkuna ima

Riy

Go nisqap allinninkuna:

  • Ruway chaymanta escalabilidad: Go huk hatun ruway utqayllayuq, mayqinchus aswanta ancha chaniyuq achka yupay paralelo mañakuykunata llamk'achinapaq.

  • Yanapakuy concurrencia kaqpi ruwasqa: Gorutinakuna chaymanta canalkuna mecanismokuna componentekunapura asíncrono interacción ruwayta saqin mana complejo multithreading ruwanakunayuq.


gRPC nisqa

gRPC nisqap allinninkuna:

  • Allin willaykunata apachiy: Iskayniyuq apachiy protocoloman (Protocol Buffers) gracias, gRPC pisi latenciata qun chaymanta pisi llika cargata qun.
  • Sinchi qillqana: Kayqa microserviciokunapura willaykunata pantasqa t'ikraywan tinkisqa pantaykunata pisiyachin.
  • Iskay ñanniyuq purichiypaq yanapakuy: Kayqa aswan allinmi registrokuna chaymanta ruway ruwaykuna chiqa pachapi t'inkinapaq.

Tupanachiy: Mana REST API hinachu, gRPC aswan allin chaymanta atikuq willayta qun serviciokunapura, mayqinchus ancha kuskalla sistemakunapaq ancha chaniyuq.


Redis

¿Imaraykutaq Redis?

  • Alto ruway: Redis achka llamkanakunata sapa segundo kaqpi ruwayta atin, chaymanta llamkanapaq chaymanta ruway filakunapaq allin ruwan.

  • Pub/Sub chaymanta Lista Yanapakuy: Filakuna chaymanta suscripción mecanismokuna ruwaypa sasan ruwayqa mana sasachu ruwan serviciokunapura asíncrona tinkiykuna ruwayta.

  • Huk willakuy corredorkunawan tupachiy: Mana RabbitMQ utaq Kafka hinachu, Redis aswan pisi ruwayta mañan chaymanta chiqa pacha llamkanakunapaq suficiente ruwayta qun.


Docker nisqa

Dockerpa ruwaynin:

  • Pachamama sapanchasqa: Docker waqaychanakuna huk hunt'asqa sapanchasqa muyuriqpi codigo purichiyta saqin, chaymanta ruway harkayta yapan chaymanta hatun llamkanawan ch'aqway riesgota pisiyachin.

  • Kamachiy atiy chaymanta sapanchasqa: Docker llamk'achiyta kikin pachata qun codigo huñunapaq chaymanta ruwanapaq, quq llamkanamanta mana qhawaspa.

  • Tupanachiy: Chiqamanta qutupi codigo purichiyqa huk harkasqa riesgota ruwanman chaymanta dependencia ch'aqwaykunaman apayta atin, Dockertaq kay sasachakuykunata allichayta saqin.


WebSocket nisqa

  • Chiqa pacha: Clientewan sapa kuti tinkiyqa willayta (registrokuna, ruway ruwaykuna) chaylla t'inkiyta saqin.
  • Allinchasqa user experiencia: WebSocket kaqwan, IDE dinamicamente rikuchiyta atin codigo ruwasqakunata.


3. Arquitectura de Microservicio nisqapa allinninkuna

Kay proyectoqa microservicio nisqa ruwaytam llamkan, chaymi achka hatun ventajakunayuq:


  • Sapanchasqa escala: Sapa yanapakuy (gRPC sirwiq, Llamk'aq, WebSocket sirwiq, Redis) sapanchasqa escalayta atikun cargamanta. Chaywanmi allinta recursokuna utilizakunman, hinallataqmi usqhaylla adaptakunman mañakuykuna yapakusqanman hina.
  • Pantaykunata tolerancia: Sistemata sapanchasqa módulos kaqpi rakiyqa huk microservicio pantayninqa mana tukuy sistema pantaymanchu apamun. Kayqa tukuyninpi takyasqa kayta yapan chaymanta pantaykunamanta kutichiyta pisiyachin.
  • Flexibilidad wiñachiymanta chaymanta mast'ariymanta: Microserviciokuna sapalla ruwasqa chaymanta mast'arisqa kanku, chaymanta musuq ruwanakuna chaymanta musuqyachiykunata riqsichiyta pisiyachin. Kayqa sapa específico serviciopaq aswan allin tecnologiakuna llamk'achiyta atikunki.
  • Huñunakuy mana sasa: Sut'i riqsichisqa interfaces (kayhina gRPC kaqninta) musuq yanapakuykunata tinkiyta mana sasachu ruwanku mana hatun tikraykunawan kunan kaq arquitectura kaqpi.
  • Sapanchasqa chaymanta waqaychasqa: Sapa microservicio kikin waqaychanapi puriyta atin, mayqinchus mana waqaychasqa código ruwaywan tinkisqa riesgokunata pisiyachin chaymanta huk yapasqa qata harkayta qun.


4. Arquitectura nisqa ruwaykunata tupachiy

Kunan pacha WEB IDEkuna karu codigo ruwanapaq ruwachkaspa, imaymana arquitectura allichaykuna sapa kuti tupachisqa kanku. Iskay ruwaykunata qhawarisun:


A ruway: Microservicio ruway (gRPC + Redis + Docker) .


  • Latencia: 40 ms
  • Ruway: 90 unidadkuna
  • Seguridad: 85 unidades
  • Escalabilidad: 90 unidadkuna


Kaqninkuna:
Kay ruwayqa utqaylla chaymanta atikuq inter-servicio willayta qun, hatun sapanchasqa codigo ruwaymanta, chaymanta flexible escalamiento kaqmanta contenedorización kaqrayku. Kunan pacha WEB IDE kaqpaq allinmi, maypi kutichiy chaymanta waqaychasqa ancha chaniyuq.


Enfoque B: Arquitectura Monolítica Tradicional (HTTP REST + Ejecución Centralizada) nisqa.


  • Latencia: 70 ms
  • Ruway: 65 unidadkuna
  • Seguridad: 60 unidadkuna
  • Escalabilidad: 70 unidadkuna


Kaqninkuna:
Monolítico allichaykuna, sapa kuti web IDEkuna ñawpaq layakunapi llamk'achisqa, HTTP REST kaqpi chaymanta chawpichasqa codigo ruwaypi sayasqa kanku. Kayhina sistemakuna escala sasachakuykunawan, yapasqa latencia kaqwan, chaymanta sasachakuykunawan tinkinku hukpa códigonta ruwachkaspa harkayta qhawaypi.


Qhaway: Kunan pacha WEB IDE wiñachiypi, HTTP REST chaymanta chawpichasqa ruway ruwayqa huk microserviciokuna arquitecturapa allinninkunamanta aswan pisi, mana necesario flexibilidad chaymanta escalabilidadta qunchu.


Tupanachiy mitricakuna rikuchiy

Chay graficoqa sut’itan rikuchin microserviciokuna arquitectura (Enfoque A) aswan pisi latenciata, aswan hatun rendimientota, aswan allin seguridadta hinallataq escalabilidadta qon chay solucion monolíticawan tupachisqa (Enfoque B).


5. Docker arquitectura: sapanchasqa chaymanta escalable

Huknin llalliq elementokuna sistema waqaychasqa chaymanta takyasqa kaqmanta Docker llamk'achiynin. Solucionniykupi, llapa yanapakuykuna sapaq waqaychanakunapi churasqa kanku, chaymanta qhawan:


  • Ruway muyuriqmanta sapanchasqa: Sapa yanapakuy (gRPC sirwiq, Llamk'aq, WebSocket sirwiq) chaymanta willaypa rantiq (Redis) kikin waqaychanapi purin, mayqinchus mana waqaychasqa codigo hatun llamkanamanta riesgota pisiyachin. Chaypachallapi, mayqin codigochus ruwaq maskaqpi purichin (kayhina, WEB IDE kaqnintakama) ruwasqa chaymanta sapa ruwanapaq sapaq Docker waqaychanapi ruwasqa. Kay ruwayqa mana seguro utaq pantasqa código mana hatun infraestructura llamk'ayta afectanmanchu chayta qhawan.
  • Pachamama kaqlla kay: Docker llamk'achispa churanakuna wiñachiy, prueba chaymanta ruway muyuriqkunapi kaqlla kasqankuta qhawan, mayqinchus pantasqa allichayta anchata pisiyachin chaymanta codigo ruwaymanta willay atiyta qhawan.
  • Flexibilidad escalabilidad kaqmanta: Sapa componente sapanmanta escalasqa kanman, chaymanta allinta cargakuna tikrayman adaptayta atikun. Ejemplopaq, mañakuykuna yapakusqanman hina, yapa Llamk'aq waqaychanakunata qallarichiyta atikunki, sapa huk sapaq waqaychanakunata ruwanqa user codigo ruwanapaq.

Kay esquema kaqpi, Llamk'aq mana Redis kaqmanta ruwanakunallatachu chaskikun, aswanpas huk sapaq waqaychana (Contenedor: Código Ejecución) sapa mañakuypaq ruwan sapanchasqa user código ruwanapaq.


6. Huch’uy t’aqakuna codigo

Uraypi huk huch'uychasqa laya hatun t'aqakuna codigo kaqmanta kachkan chaymanta imayna llamkana rikuchin:

  1. Tukuypaq kallpaq registrowan mayqin simita purichinapaq kamachin.
  2. Huk Docker waqaychanata qallarichin RunInDockerStreaming ruwayta llamk'achispa user codigo purichinapaq.



1. Phawaqpa qillqakuyninwan simi riqsiy

Llamkana huk pachantinpi registro llamk'achin, maypi sapa simi kikin kallpaqniyuq. Kayqa musuq simikunapaq yanapakuyta mana sasachakuspa yapayta atikunki, phawaq interfazta ruwanapaq chaymanta qillqanapaq suficiente:


 package languages import ( "errors" "sync" ) var ( registry = make(map[string]Runner) registryMu sync.RWMutex ) type Runner interface { Validate(projectDir string) error Compile(ctx context.Context, projectDir string) (<-chan string, error) Run(ctx context.Context, projectDir string) (<-chan string, error) } func Register(language string, runner Runner) { registryMu.Lock() defer registryMu.Unlock() registry[language] = runner } func GetRunner(language string) (Runner, error) { registryMu.RLock() defer registryMu.RUnlock() if runner, exists := registry[language]; exists { return runner, nil } return nil, errors.New("unsupported language") }


Musuq simita qillqanapaq rikch'anachiy:


 func init() { languages.Register("python", NewGenericRunner("python")) languages.Register("javascript", NewGenericRunner("javascript")) }


Chayhina, huk mañakuyta chaskispa, sistemaqa kayhinata waqyan:


 runner, err := languages.GetRunner(req.Language)


hinaspa tupaqnin kallpaqta chaskikun chay codigo ruwananpaq.


2. Docker waqaychanata qallariy, codigo ruwanapaq

Sapa user codigo mañakuypaq, sapaq Docker waqaychana ruwasqa. Kayqa phawaq ñankuna ukhupi ruwakun (ahinataq, Phawaqpi). Waqaychasqata purichinapaq hatun lógica RunInDockerStreaming ruwaypi kachkan:


 package compiler import ( "bufio" "fmt" "io" "log" "os/exec" "time" ) func RunInDockerStreaming(image, dir, cmdStr string, logCh chan < -string) error { timeout: = 50 * time.Second cmd: = exec.Command("docker", "run", "--memory=256m", "--cpus=0.5", "--network=none", "-v", fmt.Sprintf("%s:/app", dir), "-w", "/app", image, "sh", "-c", cmdStr) cmd.Stdin = nil stdoutPipe, err: = cmd.StdoutPipe() if err != nil { return fmt.Errorf("error getting stdout: %v", err) } stderrPipe, err: = cmd.StderrPipe() if err != nil { return fmt.Errorf("error getting stderr: %v", err) } if err: = cmd.Start();err != nil { return fmt.Errorf("Error starting command: %v", err) } // Reading logs from the container go func() { reader: = bufio.NewReader(io.MultiReader(stdoutPipe, stderrPipe)) for { line, isPrefix, err: = reader.ReadLine() if err != nil { if err != io.EOF { logCh < -fmt.Sprintf("[Error reading logs: %v]", err) } break } msg: = string(line) for isPrefix { more, morePrefix, err: = reader.ReadLine() if err != nil { break } msg += string(more) isPrefix = morePrefix } logCh < -msg } close(logCh) }() doneCh: = make(chan error, 1) go func() { doneCh < -cmd.Wait() }() select { case err: = < -doneCh: return err case <-time.After(timeout): if cmd.Process != nil { cmd.Process.Kill() } return fmt.Errorf("Execution timed out") } }


Kay llamk'ayqa docker purichiy kamachiyta paqarichimun, maypichus:


  • siq'iqa huk simipaq akllasqa Docker siq'i (phawaqpa wakichiyninwan riqsichisqa).
  • dir nisqaqa kay mañakuypaq kamasqa codigoyuq willañiqim.
  • cmdStr nisqaqa qillqa mayt'u huñunapaq icha ruranapaq kamachiymi.


Chayhina, kallpaqpa Run métodota waqyaspaqa, kayhinam ruwakun:


  • RunInDockerStreaming ruwana Docker waqaychanata qallarichin maypichus codigo ruwasqa kachkan.
  • Ruway registrokuna logCh kanalman purichisqa kanku, mayqinchus ruway ruwaymanta willayta chiqa pachapi apachiyta atikun.


3. Huñusqa ruway ruway

Codigo ruwaypa hatun lógicanpa pisiyachisqa rakin (executor.ExecuteCode):


 func ExecuteCode(ctx context.Context, req CodeRequest, logCh chan string) CodeResponse { // Create a temporary directory and write files projectDir, err: = util.CreateTempProjectDir() if err != nil { return CodeResponse { "", fmt.Sprintf("Error: %v", err) } } defer os.RemoveAll(projectDir) for fileName, content: = range req.Files { util.WriteFileRecursive(filepath.Join(projectDir, fileName), [] byte(content)) } // Get a runner for the selected language runner, err: = languages.GetRunner(req.Language) if err != nil { return CodeResponse { "", err.Error() } } if err: = runner.Validate(projectDir); err != nil { return CodeResponse { "", fmt.Sprintf("Validation error: %v", err) } } // Compile (if needed) and run code in Docker container compileCh, _: = runner.Compile(ctx, projectDir) for msg: = range compileCh { logCh < -"[Compilation]: " + msg } runCh, _: = runner.Run(ctx, projectDir) var output string for msg: = range runCh​​ { logCh < -"[Run]: " + msg output += msg + "\n" } return CodeResponse { Output: output } }


Kay pisilla ejemplopiqa:


  • Simi tariyqa simikunaman waqyaywan ruwakun.GetRunner(req.Language), mayqinchus musuq simipaq yanapakuy mana sasa yapayta saqin.
  • Docker waqaychana qallariyqa Compile/Run ruwanakuna ukhupi ruwasqa, mayqinkunachus RunInDockerStreaming llamk'achinku sapanchasqa codigo ruwanapaq.


Kay llave t'aqakuna rikuchinku imayna llamkana mast'ariyta yanapan (musuq simikuna mana sasa yapay) chaymanta sapanchasqa kayta qun sapa mañakuypaq sapaq Docker waqaychana ruwaspa. Kay ruwayqa plataformapa waqaychasqa kayninta, takyasqa kayninta chaymanta escalabilidad nisqatapas allinchan, chaymi aswanta kunan pacha WEB IDE nisqapaq ancha chaniyuq.

7. Tukuchina

Kay qillqasqa huk plataformamanta riman karu codigo ruwanapaq ruwasqa huk microservicio arquitectura kaqpi gRPC + Redis + Docker pila kaqwan. Kay ruwayqa atikunmi:


  • Latenciata pisiyachiy chaymanta hatun ruwayta qhaway allin interservicio willakuyrayku.
  • Seguridadta qhaway sapaq Docker waqaychanakunapi codigo ruwayta sapaqchaspa, maypi sapa user mañakuypaq sapaq waqaychana ruwasqa.
  • Sistemata flexiblemente escalachiy microserviciokuna sapanchasqa escalacionninrayku.
  • WebSocket kaqnintakama chiqa pachapi ruwasqakunata quy, aswanta kunan pacha WEB IDEs kaqpaq ancha chaniyuq.


Huk tupanachiy t'aqwiyqa rikuchin microservicio arquitectura aswanta ruwan ñawpaq monolítico solucionkunamanta llapa llave métricas kaqpi. Kay ruwaypa allinninkuna chiqap willakuykunawan takyachisqa, chaymi huk munay allichayta ruwan hatun ruwayniyuq chaymanta pantaykunata tolerante sistemakuna ruwanapaq.



Qillqaq: Oleksii Bondar sutiyuq runa
P’unchaw: 2025–02–07