- A "nuvem" fornece redundância e tolerância a falhas
- Necessidade de um sistema onde o link mais fraco pode falhar e outras partes do sistema continuam funcionando
- No Netflix, as seguintes técnicas são utilizadas:
- Graceful degration
- Datacenter/availability-zone
- [Regionally-redundant deployments] (http://techblog.netflix.com/2013/12/active-active-for-multi-regional.html)
- Testar esse sistema é muito importante para garantir interoperabilidade
- Metáfora do pneu furado
###Consumer Driven Contracts (http://martinfowler.com/articles/consumerDrivenContracts.html)
####Como evoluir um serviço?
Um exemplo: Product Search, serviço que permite procurar produtos. Duas aplicações consomem esse serviço. Essas aplicações utilizam [XSD] (https://en.wikipedia.org/wiki/XML_Schema_(W3C)) para validar a resposta do serviço antes de realizar qualquer processamento. Um terceiro consumidor precisa de um novo campo na resposta do serviço já existente. Duas abordagens para implementar essa alteração:
-
Provedor altera o esquema e os consumidores terão que atualizar a cópia dos seus esquemas para validar corretamente a resposta do serviço, necessitando mudanças de todos os envolvidos (provedor e os três consumidores).
-
Adicionar uma nova operação ao serviço, com um novo esquema. O custo das mudanças fica todo do lado do provedor, mas o serviço irá ficar mais complexo e difícil de manter.
describe package(‘httpd’) do | |
it { should be_installed } | |
end |
describe file(‘/etc/httpd/conf/httpd.conf’) do | |
it { should exist } | |
end |
describe host(‘bravo.jenkins.com’) do | |
it { should be_resolvable.by(‘hosts’) } | |
it { should be_reachable } | |
end |
describe file(‘/etc/httpd/conf/httpd.conf’) do | |
it { should contain ‘ServerName www.thoughtworks.com' } | |
end |
describe service(‘jenkins’), :if => os[:family] == ‘ubuntu’ do | |
it { should be_enabled } | |
it { should be_running } | |
end | |
describe port(80) do | |
it { should be_listening } | |
end |
Some tech debt resources (for now):
- https://en.wikipedia.org/wiki/Technical_debt
- https://martinfowler.com/bliki/TechnicalDebt.html
- https://martinfowler.com/bliki/TechnicalDebtQuadrant.html
- https://softwareengineering.stackexchange.com/questions/207060/are-bugs-part-of-technical-debt
- http://techdebtmodel.com/
- http://blogs.adobe.com/agile/2014/09/08/what-is-technical-debt/
- https://medium.com/@joaomilho/festina-lente-e29070811b84
- http://chadfowler.com/2014/01/22/the-crunch-mode-antipattern.html