Тёмный

Trabalhando num sistema crítico 

Filho da nuvem
Подписаться 42 тыс.
Просмотров 13 тыс.
50% 1

Alguns softwares são tão críticos que programadores precisam trabalhar de forma diferente para atualizá-los, deploys frequentes são um risco, estratégias diferentes de single tenancy vs single tenancy devem ser adotadas entre vários outros detalhes que eu descrevo nesse vídeo.
Doações pro Rio Grande do Sul:
PIX: enchentes@vakinha.com.br
www.vakinha.com.br/vaquinha/a...
Evolua com desafios técnicos inspirados em testes reais de empresas de tecnologia:
💪 devgym.com.br/
🎥 Nesse vídeo eu usei:
Microfone: amzn.to/3zujQII
Câmera (lente kit padrão): amzn.to/2UQspip
Tripé: amzn.to/2UM6Xv4
Editor de vídeo com efeitos de zoom: www.screen.studio/?aff=rKnVX
▶️ Redes sociais
Instagram: / filhodanuvem
Twitter: / filhodanuvem
GitHub: github.com/filhodanuvem

Наука

Опубликовано:

 

19 май 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 122   
@Filhodanuvem
@Filhodanuvem Месяц назад
Eu gravei dois vídeos no mesmo dia em que o áudio saiu um pequeno ruído, peço perdão por isso 😅
@rxrxrx_rxrxrx
@rxrxrx_rxrxrx Месяц назад
Um dos únicos canais de tech que foge da mediocridade e realmente fala sobre assuntos fodas! Parabéns, meu maninho, conteúdo de qualidade! Não aguento mais ver fazedores de CRUD que não sabem nada de software.
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano, será que resistimos as notícias de IA e reacts de vídeos? Haha.
@ppacrz
@ppacrz Месяц назад
@@Filhodanuvem salve @manodeivyn 🤣
@rodrigorodriguescosta
@rodrigorodriguescosta Месяц назад
o que seria um fazedor de crud? tipo o cara so sabe receber a request e gravar no banco? o que exatamente esse termo é?
@Filhodanuvem
@Filhodanuvem Месяц назад
Crud é um acrônimo pra create read update delete. Aplicações que salvam, editam, deletam e fazem leitura de uma informação no banco.
@gepetovovo2509
@gepetovovo2509 Месяц назад
Fazedor de CRUD ou "Arrastador de CARD" é aquele profissional que se acha engenheiro de software e só sabe fazer isso ai.... nada de crítido é jogado na mão desse "profissional" e fica lá sentado esperando task.
@ediltonpwd
@ediltonpwd Месяц назад
É fascinante ouvir essas história. Tudo o que vem na minha cabeça é: não vejo a hora de lidar com isso. A todo instante ficava lembrando de conceitos de SRE, system design... Parabéns por mais um vídeo! Que venham mais.
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu cara, quando menos esperar vai estar vivendo isso.
@GeovaniBritox
@GeovaniBritox Месяц назад
Seu conteúdo agrega muito. Eu nunca ia saber dessas particularidades no trabalho com grandes clientes.
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu Geovani, a intenção é essa, fico feliz.
@jsantosrocha
@jsantosrocha Месяц назад
Trabalho em grandes bancos, geralmente mainframes, essa estrategia que vc exemplificou é utilizada a bastante tempo, eu diria a uns 30 anos pelo menos. É interessante saber que as "coisas velhas" se reciclam e ganham uma "cara nova"
@Filhodanuvem
@Filhodanuvem Месяц назад
Que legal essa sua experiência. Realmente, a nossa área não mudou muito, as ferramentas sim mas os conceitos por trás são os mesmos.
@rafapontello
@rafapontello Месяц назад
Já tava com saudades do teus videos meu amigo. Trabalhei em um gateway de pagamentos do banco laranja e entendo um pouco disso que vc passou, baita aprendizado!
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano Rafael. Hoje em dia tem dois bancos laranjas haha mas legal que tu entende bem essas dores
@GiuMorelli
@GiuMorelli Месяц назад
Talvez os deploys pudessem ocorrer com maior frequência se houvesse um sistema de "graceful startup", onde o novo pod aguardaria pronto pelo graceful shutdown para assumir os valores de portas do pod antigo. Neste método, deploys feitos muito próximos um do outro poderiam substituir o anterior antes que subisse no ambiente.
@Filhodanuvem
@Filhodanuvem Месяц назад
Interessante isso, já vivenciou algo assim com k8s? Pergunto porque até onde eu sei o comportamento default de um replicaset é matar um pod pra depois subir outro. E pelo o que entendi da sua proposta seria bom que a nova versão estivesse no ar já pronta pra se conectar na porta assim que o graceful shutdown notificar. Não sei se da pra mudar esse comportamento do k8s mas é a boa ideia. Não fui eu que implantei essa arquitetura no começo da empresa mas lembro que estabelecer a conexão TCP com o banco central incluída algumas fases tipo troca de mensagem handshake e tals, não lembro se esse era um fato pra evitar criar novas conexões ( ex: os 3 segundos iniciais é de handshake)
@kubemind
@kubemind Месяц назад
Excelente explicação, toma mais um escrito. Seu vídeo é o primeiro em muito tempo que consigo assistir até o final sem por no 2x. Obrigado por compartilhar e estarei por aqui sempre. Abraço
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano, que bom que agregou
@paulovinicius5833
@paulovinicius5833 Месяц назад
Excelentes pontos, muito bem levantados e explicados. Ate me inscrevi. Parabens!
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano, que bom que curtiu a ponto de se inscrever. Bem vindo.
@teliiz
@teliiz Месяц назад
Caralho, quanto tema importante em um só único vídeo, microservicos, instâncias, gracefull shutdown, mto bom 👍 Não sei se já tem no canal mas seria interessante entrar no tema do gracefull shutdown pq eh algo mto importante e pode impactar negativamente nos dados do banco de dados quando os processos são interrompidos. Parabéns
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeuuu pelo comentário e sugestão 📝
@Kimitri
@Kimitri Месяц назад
Pelo tamanho da responsabilidade desses desenvolvedores ainda mais quando mexe com banco, o salário deve ser enorme
@Filhodanuvem
@Filhodanuvem Месяц назад
Acho que tem uma valor pra pagar o stress sim, nessa experiência foi o maior salário da carreira.
@Kimitri
@Kimitri Месяц назад
@@Filhodanuvem eu tenho uma dúvida, eu estava fora da área desde 2015, aí voltei em 2022, aí tive que dar uma boa atualizada já que foram muitos anos fora, então peguei um freelancer de uma plataforma para um estúdio fotográfico para fazer para colocar no portfólio, e fiz alguns projetos pessoais tbm para o portfólio. A pergunta é, com essa experiência é possível conseguir vagas back end na Europa?
@Filhodanuvem
@Filhodanuvem Месяц назад
@Kimitri o que essa plataforma fazia ?
@Kimitri
@Kimitri Месяц назад
@@Filhodanuvem é um ecommerce de serviços de fotografia, com integração com banco do Brasil, ciclo. Armazenagem e gerenciamento de fotos com os aws, e cloudflare, e tbm tem gerenciamento de estoque, e mais uma série de coisas. Ele é todo personalizado pq o produto além das fotos, são os serviços e agendamentos, é muito grande não sei como explicar melhor.
@laislima_dev
@laislima_dev Месяц назад
Filassss... é sempre um desafio em projetos de banco né? É complexo demais gerenciar se todos os serviços processaram as mensagens rsrs em um projeto um pouco mais simples com poucos clientes ok mas do tamanho que descreveu... meo deooooos! Que desafio!!! Isso torna o adolescente um adulto 🤣 Muito legal você também ter falado sobre os termos single tenant e graceful shutdown, no meu trampo fiz uma abordagem pra isso em um serviço mas não sabia o nome kkkk
@Filhodanuvem
@Filhodanuvem Месяц назад
Nossa, nesse ambiente aí, cada mensagem que caída numa dead letter gerava um alerta de incidente. Como tudo era pagamento, qualquer mensagem era um pagamento não processado. Pensa numa saude mental debilitada hahaha
@eduardomaes
@eduardomaes Месяц назад
parabéns, muito interessante o conteúdo e o tempo do vídeo está excelente.
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu Eduardo. Que bom que achou o vídeo direto, tenho tentado ao máximo não enrolar.
@JvalentinWeb
@JvalentinWeb Месяц назад
Conteúdo muito top! Pode trazer mais sim.
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano
@gabrielcamurcab
@gabrielcamurcab 19 дней назад
Muito bom! Além de todo o conhecimento agregado, descobri uma nova ferramenta pra rabiscar arquitetura de software kkkkkkkk. Sou fissurado nessas ferramentas!
@Filhodanuvem
@Filhodanuvem 19 дней назад
Hahahaha boa, também gosto muito.
@heydevs1494
@heydevs1494 Месяц назад
Wouuu! Massa demais a experiência. Com certeza vai ajudar a pensar melhor em implementações futuras aqui na empresa.
@Filhodanuvem
@Filhodanuvem Месяц назад
Bem diferente neh? Espero que ajude :)
@heydevs1494
@heydevs1494 Месяц назад
Sim, sim. Eu já agendei com um dev aqui para discutirmos sobre a partir das suas considerações.
@mauridocarmo7167
@mauridocarmo7167 Месяц назад
Muito bom!!!
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu 🙏
@BrunoArrais1
@BrunoArrais1 Месяц назад
a BEAM, runtime do Erlang/Elixir/Gleam entre outras, consegue fazer upgrade de código sem reiniciar. Não se encaixa muito bem nesse mundo de kubernetes, mas nesses casos, é um recurso precioso. Acredito que a JVM tenha algum recurso parecido
@Filhodanuvem
@Filhodanuvem Месяц назад
Legal, esse ambiente do erlang é bem famoso por esses cenários críticos mesmo tipo telefonia, mas nunca usei.
@eduardoramos8317
@eduardoramos8317 Месяц назад
Muito bom! Como estatístico, me lembra um cafo clássico de modelagem de filas. Só que com mais recursos de gerenciamento.
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu Eduardo, é bem por aí mesmo
@arozendojr
@arozendojr Месяц назад
Interessante esses diferenciais da sua plataforma, parabéns
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano
@ojoao3499
@ojoao3499 Месяц назад
Que foda 😮😮
@gilmar69047
@gilmar69047 Месяц назад
Interessante saber um pouco mais dessa dinâmica
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu Gilmar
@leandrocruz6621
@leandrocruz6621 Месяц назад
Que visão top parabéns
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano
@felipelimeira8361
@felipelimeira8361 Месяц назад
Que canal foda parabéns pelo conteúdo!
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu Felipe, que bom que curtiu.
@matheusaraujo6445
@matheusaraujo6445 Месяц назад
Video maneiro man!
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeuu
@williamroger9375
@williamroger9375 Месяц назад
Manda mais mano, curto de mais seus vídeos!
@Filhodanuvem
@Filhodanuvem Месяц назад
Boaaa
@devgui_
@devgui_ Месяц назад
Conteúdo maravilhoso!
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano
@af2b
@af2b Месяц назад
Como sempre, incrível. Sucesso nuvem! 💪
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu mano por sempre aparecer aqui
@joseguilhermecr
@joseguilhermecr Месяц назад
São todas soluções interessantes. Deduzi que você trouxe um resumo dos requisitos, principalmente nas regras de comunicação com o banco central. Dependendo da flexibilidade ali naquele ponto, seria possível entregas mais frequentes sem impactar os clientes. Mas entendo também que às vezes não é um impedimento técnico, mas sim uma mitigação de risco.
@Filhodanuvem
@Filhodanuvem Месяц назад
Boa! Acho que é um misto de muitas coisas sim, tem um pouco da natureza crítica do negócio, da qualidade de serviço que é preciso ser entregue mas também a cultura dos clientes e da própria empresa. Claro que se fosse algo crítico teria que ir pra produção, mas esse mundo muda pouco, depois da solução pronta e estável não é como se a aplicação precisasse de muitas melhorias.
@Filhodanuvem
@Filhodanuvem Месяц назад
Boa! Acho que é um misto de muitas coisas sim, tem um pouco da natureza crítica do negócio, da qualidade de serviço que é preciso ser entregue mas também a cultura dos clientes e da própria empresa. Claro que se fosse algo crítico teria que ir pra produção, mas esse mundo muda pouco, depois da solução pronta e estável não é como se a aplicação precisasse de muitas melhorias.
@amarboro
@amarboro Месяц назад
Mano continue fazendo videos que eu irei continuar assistindo.
@Filhodanuvem
@Filhodanuvem Месяц назад
Opaaa, combinado 🤝
@Rssl100
@Rssl100 Месяц назад
Canary deployment nao resolveria ? Pois voce mantem a versao estavel em produção e escala mais pods com a versao nova e vc vai alterando em % a quantidade de trafego que vai cair na nova versao... Assim voce nao tem indisponibilidade no seu deploy
@Filhodanuvem
@Filhodanuvem Месяц назад
No protocolo TCP (em resumo) cada máquina (ip) so pode manter uma conexão com um outro ip de destino na mesma porta. E do meu lado não há controle de se conectar em outra porta porque o acordo com o banco central é “pagamentos que vem do ip tal conectado na porta x ou y representam o Santander” . Basicamente no canary existiria uma terceira conexão.
@luiseduardo1458
@luiseduardo1458 15 дней назад
Ótimo vídeo, como sempre. Por curiosidade, por que você trocou o Clojure pelo Go?
@Filhodanuvem
@Filhodanuvem 15 дней назад
Valeu Luís. Olha, sinceramente minha ida pro clojure foi muito mais pra sair do PHP e ter outras experiências mas meu objetivo sempre foi go. Como na época não tava conseguindo uma oportunidade na linguagem aceitei o desafio.
@dhbmarcos
@dhbmarcos Месяц назад
Bem vindo ao clube
@Filhodanuvem
@Filhodanuvem Месяц назад
Hahahaha
@shtanaka121
@shtanaka121 Месяц назад
Levantar uma questão, será que grande parte dos problemas levantados não seriam resolvidos em um ambiente serverless? Quais os impedimentos para utilizar serverless no mercado financeiro?
@Filhodanuvem
@Filhodanuvem Месяц назад
A própria arquitetura do “banco central” exige a conexão permanente TCP, se usássemos serverless a lambda perderia a conexão assim que fosse desligada. Além disso dependendo da linguagem que você usa em serverless tu vai sofrer com cold start, nesse cenário você precisa resolver o pagamento o mais rápido possível, perderíamos um tempo subindo a lambda.
@shtanaka121
@shtanaka121 Месяц назад
Faz sentido. Mesmo com lambda, vc ia ter que manter a conexão aberta de alguma maneira, o que o forçaria a retornar ao menos essa parte da aplicação para algo gerenciado. Ainda imagino que o throughput disso deve ser monstruoso, para justificar essa necessidade de uma conexão permanente. Bom conteúdo, sucesso!
@not3851
@not3851 Месяц назад
Vim do Embbed C, tô indo pra back-end com C#, eu vejo essas coisas n críticas e me dá ânsia toda vez q da deploy kkkkkķkkk Maluco codar pra embarcado é tentativa única e funcionou rodando liso, pra mexer naquilo tem q ser pq é mto necessário e é algo crítico
@Filhodanuvem
@Filhodanuvem Месяц назад
Hahahahah esse problema eu nunca passei e acho muito difícil eu passar.
@antoniofernandodiasjunior8896
@antoniofernandodiasjunior8896 Месяц назад
Mano, eu vi algo sobre uma arquitetura chamada de config server, que manter uma instância que serviria apenas para fornecer as variáveis de ambiente. Essa instância poderia ser usada nesse caso ao invés do lance dos arquivos?
@Filhodanuvem
@Filhodanuvem Месяц назад
Provavelmente deve ser algo como o Vault da Hashicorp, eu vi uma galera de segurança recomendando que a aplicação vá atrás dos secrets que são guardados nesses servidores de cofre. Acho que a sua sugestão funcionaria sim, só fico pensativo que a aplicação teria que fazer uma request a cada x tempos pra entender se o valor mudou. Sendo um arquivo a aplicação consegue entender algo até pelo metadado do arquivo (última data de modificação). É mais rápido. (Eu não amo arquivo de configuração não, só pensando em voz alta)
@antoniofernandodiasjunior8896
@antoniofernandodiasjunior8896 Месяц назад
@@Filhodanuvem faz sentido msm
@limaneto8590
@limaneto8590 Месяц назад
Eu sou super leigo nessa complexidade. Mas e se ao invés de atualizar um serviço vc agregasse outro serviço que a partir do momento que ele subisse ele assumisse as novas requisições e o anterior após terminar o que tinha em fila fosse desligado. Será que daria certo? Não sei se vc me entendeu.
@Filhodanuvem
@Filhodanuvem Месяц назад
Essa dúvida é boa. Eu não sou expert em redes mas vamos lá, as conexões de rede são feitas através de portas, quando a gente se conecta no redis por exemplo, a gente passa o ip/host e a porta do servidor. O protocolo TCP diz que não dá pra ter duas conexões com os mesmos ip e porta na origem e no destino. Então quando o serviço novo subisse, ele teria que se conectar numa porta diferente, o que acaba definindo outra conexão e não a mesma. O serviço do banco central registra de forma fixa quais as portas TCP representam os pagamentos do santander. Na hora de assinar contrato de papel mesmo eles falam “a porta do Santander é a 1001 e a 1002” então não existia flexibilidade de usar qualquer porta.
@asfernandes
@asfernandes Месяц назад
Existe algo chamado socket takeover que poderia ser usado nessa situação, onde um processo pode continuar uma conexão iniciada por outro.
@Filhodanuvem
@Filhodanuvem Месяц назад
Que legal, não conhecia essa parada não
@MarcosVMSoares
@MarcosVMSoares 7 дней назад
Trabalhei com algo assim tmb mas era elixir. Então quase tudo q k8s tenta fazer a BEAM já faz a anos e com qualidade afinal telefonia da Inglaterra e até WhatsApp rodam nela ne
@Filhodanuvem
@Filhodanuvem 7 дней назад
Legal, já ouvi dizer mesmo que a máquina virtual do earlang é incrível pra esses ambientes de alta disponibilidade
@mutv70
@mutv70 Месяц назад
O mais legal é que quem já hospedou algum jogo online já deve ter passado por situações similares kkk
@Filhodanuvem
@Filhodanuvem Месяц назад
Haha eu vejo muita semelhança também entre indústria de jogos e fintechs
@thiagoampj
@thiagoampj Месяц назад
Se tinha um failover, qual era o problema de atualizar mais frequentemente o serviço?
@Filhodanuvem
@Filhodanuvem Месяц назад
Sobrecarregar o outro pod que lidaria sozinho com o tráfego, aumentar o tempo de resposta dos pagamentos já que por um momento a throughput. Causar frequentes desconexoes também seria percebido pelo lado do banco central, acabaria criando uma reputação ruim pro serviço, como se nossa disponibilidade não fosse tão alta.
@thiagoampj
@thiagoampj Месяц назад
Entendi. O protocolo demanda essa conexão persistente
@brunonovais8801
@brunonovais8801 Месяц назад
mas é assim porque provavelmente no passado os dev faziam muita cagada nos deploy e o uptime não era garantido. Sem cumprir o uptime direitinho partiram para a soluc'ão ideal para não ter downtime por conta de atualizações frequentes. ou seja. deixam de atualizar novas versões para ganhar uptime.
@Filhodanuvem
@Filhodanuvem Месяц назад
Acho que não, o time era bem maduro. Essa era uma característica dos sistemas críticos, existiam outros que todo mundo era bem livre pra fazer deploy.
@VamosViverFora
@VamosViverFora Месяц назад
Show. Era a API da SEPA?
@Filhodanuvem
@Filhodanuvem Месяц назад
FPS, tipo um pix do uk
@trump1678
@trump1678 Месяц назад
top
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeu
@arozendojr
@arozendojr Месяц назад
Toda vez que abro OLX, lembro de você
@Filhodanuvem
@Filhodanuvem Месяц назад
Hahahahahah sempre que eu uso Olx fico pensando “será que a análise de anúncio ainda é por aquele código?” Haha
@rodrigomelo4843
@rodrigomelo4843 Месяц назад
Curti o vídeo. Só achei estranho a cultura de fazer deploy em produção todos os dias. Nunca deparei com um ambiente assim. Tudo é bem programado e testado antes e sempre aprovado com uma change
@Filhodanuvem
@Filhodanuvem Месяц назад
Quanto mais testes automatizados temos num projeto mais segurança temos de colocar ele em produção, mesmo sem testes manuais. Quanto mais teste automatizado mais rápido uma mudança vai pra prod, alguns fazem Continuous deployment que a grosso modo quer dizer que quando você faz merge na master, todos os testes automatizados já garantiram que nada vai quebrar e automaticamente um deploy é feito. Outro tópico que ajuda a entregar código constante são as feature flags, você faz deploy mas nada muda pro usuário até que você ligue uma flag. A talk mais histórica é essa aqui, que o Flickr cita fazer mais de 10 deploys por dia. A talk acabou sendo o começo do movimento devops também. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-LdOe18KhtT4.htmlsi=KASjkZXKue8uHF8a
@brunopinhas1
@brunopinhas1 Месяц назад
o que é restata? reset? reiniciar?
@Filhodanuvem
@Filhodanuvem Месяц назад
Dependendo da linguagem de programação e do programa, quando você roda o programa ele fica rodando pra sempre, ligado, por exemplo um site está sempre no ar, então essa aplicação está rodando. Restartar quer dizer parar o programa e roda-lo de novo. Mesmo processo que fazemos com o sistema operacional.
@TechFarmingBr
@TechFarmingBr Месяц назад
Do you sell channel?
@Filhodanuvem
@Filhodanuvem Месяц назад
My channel? No, I don’t.
@alysonvilela310
@alysonvilela310 25 дней назад
trampou na Dock é?
@Filhodanuvem
@Filhodanuvem 25 дней назад
Não rsrs mas deve ter muita empresa com uma arquitetura parecida
@brunonovais8801
@brunonovais8801 Месяц назад
seu time era gerenciado por Indiano?
@Filhodanuvem
@Filhodanuvem Месяц назад
Que isso cara hahaha não tinha indiano não. A empresa foi fundada (e consequentemente essa arquitetura) por ingleses.
@Oaserr
@Oaserr Месяц назад
Mais...
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeuu
@VamosViverFora
@VamosViverFora Месяц назад
Mais
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeuuu
@rogerssampaio652
@rogerssampaio652 Месяц назад
Mais
@Filhodanuvem
@Filhodanuvem Месяц назад
Opa, bora! Já pensando nos próximos exemplos pra trazer.
@RafaelSouza-eh3zn
@RafaelSouza-eh3zn Месяц назад
Mais
@Filhodanuvem
@Filhodanuvem Месяц назад
Valeuuu Rafael
Далее
VOCÊ É (OU SERÁ) UM PROGRAMADOR RUIM! (DESCUBRA)
24:31
Como encontrar um SaaS validado pelo mundo.
9:23
Просмотров 14 тыс.
Backend não é só CRUD (e eu posso provar)
11:54
Просмотров 8 тыс.
Quanto faturei (e gastei) no meu primeiro SAAS em 2023
13:00
ПОКУПКА ТЕЛЕФОНА С АВИТО?🤭
1:00
ОБСЛУЖИЛИ САМЫЙ ГРЯЗНЫЙ ПК
1:00