Hacking the MonolithSVT interaktiv
TV4 Tech Meetup, 2014-11-26
Gereon Kåver@gereonk
Rickard Andersson
2009
2011
2014TEAM
[CMS]
≈120 manår kod
400 redaktörer4,7 m unika/vecka
Ny arkitektur!
Organisations- vs verksamhetsanpassad arkitekturFritt vs styrt teknikvalStandardiserade API:n
Gemensam drift, infrastruktur, loggning,…Fokus på lättrörlighet eller återanvändningDistribuerat eller centraliserat ägarskap
…
“Any organization that designs a system (defined broadly) will produce a design
whose structure is a copy of the organization's communication structure.”
Mel Conway
Kaos?
Ny arkitektur! Ny kultur?
Från mål till produktion
Delaktighet
• Autonoma team
• Delaktighet
• Stort mandat/ansvar
Kultur
Kultur
• Automoma team
• Delaktighet
• Stort ansvar/mandat
Microservice Arkitektur
Arkitekturprinciper
KommunikationEngineering ProductivityOpt-in
Virtuella team
Öppenhets-kultur
Engineering Productivity
Opt-in
Produktägare tillsammans med teamen är ytterst ansvariga för att teamen gör teknikval som gör teamen långsiktigt effektiva. Teknikvalen måste gå i linje med de riktlinjer som finns i det här dokumentet för att underlätta rörlighet mellan team, förvaltning och långsiktig strategi.
Teams ansvar och mandat
“Create greater ownership” - LinkedIn
Ge full kontroll, inga centrala regler
Historia (Från 2 till 4 team)
Bakgrund i Subversion och merge-hell.
Ny kultur:● All incheckning i trunk● Feature-toggles● Release ofta. En gång i veckan, varje dag.
Att en release lyckas ska vara normalfallet
Continuous Delivery
Avsaknad av plattform skapade en monolit
“Vi har redan en databasserver i produktion, vi lägger den där.”
Skapa en plattform
1. Man ska på under 6 timmar kunna från en nyinstallerad laptop kunna ändra och deploya ett existerande projekt till produktion.
2. Det ska ta mindre än 2 timmar att skapa en ny tjänst med CI, övervakning, loggning.
Microservices?
1. Single Responsibility Principle. Skall bara ändras av en anledning.
2. Körs i en egen process.3. Kommunicera via språkoberoende API.4. En förändring av en microservice skall inte påverka
en annan (Decoupled).
http://martinfowler.com/articles/microservices.html
Hur liten är en microservice?
“Fits in my head” - Dan North
Microservices ger (nya) krav
1. Automatiserad deploy2. Monitorering3. Robusthet
Microservices på SVT
Deploy sker på Heroku eller internt på “Molnet”
Microservices på SVT - Molnet- Docker. Paketera och kör tjänster - Helios. Orkestrering av tjänster. - Consul. System för configuration och service
discovery.
$> moln app create <your-username>/molnet-crash-course$> moln app image set anli20/molnet-crash-course google/python-hello:2.7$> moln app targets set <your-username>/molnet-crash-course sto.molnet.svt.se=stomoln01-agent01 drs.molnet.svt.se=drsmoln01-agent01$> moln app deploy <your-username>/molnet-crash-course:v3$> moln app undeploy <your-username>/molnet-crash-course:v3
Microservices på SVT - Riktlinjer
1. Vi bryter inte mot HTTP 1.12. Vi använd Rest,
Använd http://martinfowler.com/articles/richardsonMaturityModel.html till och med level 2.
3. Alla API:er dokumenteras med swagger.io4. Alla klienter ska sätta user-agent för att
underlätta spårbarhet5. Vi använder CORS (inte JSONP)
Microservices på SVT - Teknikstack
Språk- Java, JavaScript, (Spring Boot, Node.js)
Microservices på SVT - Teknikstack
Robusthet- Hystrix från Netflix. (Circuit Breakers,
Monitorering, Parallellisering)
Microservices på SVT - Teknikstack
Loggning: - Key-value via stdout till Logentries
Microservices på SVT - Teknikstack
Metrics - Newrelic och Graphite
Microservices på SVT - Framtiden
● Automatisk hantering av last. (Peaks)● Red/Black deploy
Knäcka monoliten:● Bygga nytt med hjälpa av ny arkitektur och
plattform. Ta bort den gamla koden.● Skapa API:er framför CMS.
Vi söker alltid duktiga människorblogg.svt.se/testbild
Gereon Kåver [email protected]
@gereonk
Rickard Andersson [email protected]