micro service developer experience node interac6ve 2015
play

Micro-service Developer Experience Node Interac6ve 2015 - PowerPoint PPT Presentation

Micro-service Developer Experience Node Interac6ve 2015 Peter Elger @pelger Micro-services NOT a new concept - See unix J Small,


  1. Micro-­‑service ¡Developer ¡Experience ¡ ¡ Node ¡Interac6ve ¡2015 ¡ Peter ¡Elger ¡ @pelger ¡ ¡

  2. Micro-­‑services ¡ • NOT ¡a ¡new ¡concept ¡-­‑ ¡See ¡‘unix’ ¡ J ¡ • Small, ¡focused, ¡decoupled ¡components ¡ • Easily ¡understood ¡ • Rapid ¡itera6ve ¡deployment ¡ • Architectural ¡style ¡par6cularly ¡suited ¡to ¡ node.js ¡

  3. That’s ¡Awesome! ¡But… ¡

  4. Shell ¡Hell? ¡

  5. Tradeoffs ¡ • Micro-­‑services ¡ – Smaller ¡units ¡of ¡code ¡ – Easier ¡to ¡reason ¡about ¡in ¡isola6on ¡ – Easier ¡to ¡test ¡in ¡isola6on ¡ – Rapid ¡incremental ¡deployment ¡ ¡ ¡ • Monoliths ¡ – Large ¡amount ¡of ¡code ¡ – Much ¡more ¡complex ¡to ¡reason ¡about ¡ – More ¡difficult ¡to ¡test ¡in ¡isola6on ¡ – Highly ¡coupled ¡slow, ¡risky ¡deployments ¡

  6. Tradeoffs ¡ • Micro-­‑services ¡ – Harder ¡to ¡run ¡a ¡system ¡in ¡development ¡ • Mul6ple ¡processes ¡ – Trickier ¡to ¡apply ¡debuggers ¡and ¡tooling ¡ ¡ • Monoliths ¡ – Easier ¡to ¡run ¡a ¡system ¡in ¡development ¡ ¡ • single ¡process ¡ – Easier ¡to ¡apply ¡debuggers ¡and ¡tooling ¡

  7. Op6ons? ¡

  8. Just ¡develop ¡services ¡in ¡isola6on? ¡ • Developing ¡single ¡services ¡is ¡simple ¡ – Easy ¡to ¡unit ¡test ¡ – 100% ¡line ¡coverage ¡is ¡usually ¡achievable ¡ • Then ¡integrate ¡on ¡staging ¡or ¡produc6on ¡only. ¡ ¡

  9. Script ¡it ¡ • Develop ¡custom ¡shell ¡scripts ¡to ¡start ¡and ¡stop ¡ the ¡system ¡under ¡development ¡ • This ¡can ¡work ¡well ¡ – Used ¡this ¡on ¡several ¡projects ¡ • However ¡there ¡is ¡addi6onal ¡overhead ¡in ¡ keeping ¡scripts ¡current ¡ • Also ¡need ¡to ¡ensure ¡that ¡developer ¡machines ¡ have ¡the ¡same ¡infrastructure ¡

  10. Use ¡containers? ¡ • Tools ¡like ¡docker-­‑compose ¡allow ¡us ¡to ¡start ¡and ¡ stop ¡mul6ple ¡containers ¡(i.e. ¡services) ¡in ¡one ¡go ¡ • Also ¡allow ¡us ¡to ¡define ¡the ¡infrastructure ¡ requirements ¡cleanly ¡ – However ¡the ¡container ¡build ¡cycle ¡can ¡be ¡slow ¡and ¡ frustra6ng ¡ – Environmental ¡differences ¡between ¡development ¡and ¡ produc6on ¡can ¡cause ¡fric6on ¡ – Debugging ¡using ¡containers ¡can ¡be ¡a ¡challenge ¡to ¡ setup ¡

  11. Three ¡strikes ¡and ¡automate… ¡ h_ps://github.com/apparatus/fuge ¡

  12. Goals ¡ • Provide ¡a ¡tool ¡that ¡generates ¡micro-­‑service ¡ scaffolding ¡ ¡ • Provide ¡a ¡run ¡6me ¡environment ¡for ¡micro-­‑ service ¡development ¡that ¡supports ¡ – Rapid ¡development ¡ – Reduces ¡container ¡fric6on ¡ – Eases ¡debugging ¡

  13. Stack ¡

  14. Stack ¡

  15. Code ¡6me!! ¡ fuge generate system

  16. System ¡Genera6on ¡

  17. System ¡Genera6on ¡

  18. System ¡Genera6on ¡ • Uses ¡Dockerfile ¡and ¡docker-­‑compose ¡syntax ¡ • Fuge ¡uses ¡these ¡files ¡to ¡run ¡local ¡processes ¡ and ¡containers ¡ ¡

  19. System ¡execu6on ¡ Fuge shell compose-dev.yml

  20. Add ¡a ¡service ¡ ¡ ¡ fuge generate service

  21. Add ¡a ¡service ¡

  22. Add ¡Infrastructure ¡ • docker ¡pull ¡mongo ¡ • Update ¡compose-­‑dev.yml ¡ • Add ¡some ¡code ¡to ¡service1 ¡ • restart ¡

  23. Add ¡Infrastructure ¡

  24. Proxy ¡ • We ¡are ¡now ¡recording ¡data ¡into ¡MongoDB ¡ running ¡in ¡a ¡container ¡from ¡a ¡process ¡ ¡ • Fuge ¡will ¡proxy ¡connec6ons ¡between ¡processes ¡ and ¡containers ¡ – Without ¡our ¡code ¡needing ¡to ¡be ¡configured ¡ ¡ • Mixing ¡containers ¡and ¡processes ¡with ¡reduced ¡ fric6on ¡

  25. Logging ¡ • For ¡convenience ¡ • Fuge ¡creates ¡per ¡service ¡logs ¡at ¡ – ./fuge/log/<servicename>.log ¡ ¡ • Fuge ¡grep ¡ – Search ¡by ¡service ¡or ¡over ¡all ¡

  26. Debugging ¡ • Experimental ¡ • Fuge ¡provides ¡a ¡debug ¡command ¡ – Currently ¡requires ¡node-­‑debug ¡installed ¡ • A_ach ¡a ¡debugger ¡to ¡a ¡specific ¡service ¡

  27. Retrofit ¡-­‑ ¡Nodezoo ¡

  28. Retrofit ¡-­‑ ¡Nodezoo ¡ • Exis6ng ¡system ¡ • Added ¡compose ¡yml ¡ – Broken ¡out ¡infrastructure ¡from ¡code ¡ • Docker-­‑compose ¡runs: ¡ – Redis, ¡elas6csearch, ¡influx ¡and ¡beanstalkd ¡ ¡ • Fuge ¡runs: ¡ – Frontend ¡and ¡services ¡

  29. Summary ¡ • Developing ¡micro-­‑services ¡presents ¡its ¡own ¡ unique ¡challenges ¡ • Tooling ¡can ¡help! ¡ ¡

  30. Contributors ¡

  31. Thank ¡you! ¡ ¡ ¡ • h_ps://github.com/apparatus/fuge ¡ • npm ¡install ¡–g ¡fuge ¡ • @pelger ¡

Recommend


More recommend