SlideShare uma empresa Scribd logo
1 de 43
Да пишем код за хиляди
сървъри
@stoitsev
Backend
или Сървърна част
MVC Структура
ORM
Библиотека за тестове
Миграции за СУБД
Библиотека за шаблони
Библиотека за кеширане
Превод и локализация
Scaffolding
Logging
Сигурност
Валидация на форми
Мащабируемост
или scalability
Вертикално
Хоризонтално скалиране
Хоризонтално скалиране
Разпределена система
“Разпределена система е група от
самостоятелни сървъри, които работят заедно и
отвън изглеждат като една цялостна система”
120 сървъра
=
1 сървър на месец
1200 сървъра
=
1 сървър на 15 дни
12000 сървъра
=
1 сървър на 7.5 часа
Няма stackoverflow
Децентрализирани
алгоритми
1. Никоя машина няма информация за състоянитето на
цялата система.
2. Всяка машина решава спряло локалната си
информация.
3. Повреда е една машина не разваля целия алгоритъм.
4. Не се предполага че съществъва глобален часовник.
Gossip based membership
1. Няма централизирано
знание
2. Всеки сам има списък
3. Ако една машина се
повреди, алгоритъма си
работи
4. Няма глобален часовник
Консистентност
Consistency
Достъпност
Availability
Репликация
Репликация
Разделяне на мрежата
Partition tolerance
100 лв.
100 лв. 100 лв.
CAP Теорема
Доказателство
Seth Gilbert and Nancy Lynch. 2002. Brewer's conjecture and the feasibility of consistent, available,
partition-tolerant web services.
Консистентност
Или
Достъпност
Кворум
PH PDC
TSTS
“A distributed system
is one in which the
failure of a computer
you didn't even know
existed can render
your own computer
unusable.”
Ресурси
https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
https://www.goodreads.com/book/show/405614.Distributed_Systems
https://www.coursera.org/specializations/cloudcomputing
http://the-paper-trail.org/blog/consensus-protocols-paxos/
http://dl.acm.org/citation.cfm?id=564601
https://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-
ladis2009.pdf
http://static.googleusercontent.com/media/research.google.com/en//archi
ve/gfs-sosp2003.pdf
Въпроси?

Mais conteúdo relacionado

Destaque

OWLIM@AWS - On-demand RDF Data Management in the Cloud
OWLIM@AWS - On-demand RDF Data Management in the CloudOWLIM@AWS - On-demand RDF Data Management in the Cloud
OWLIM@AWS - On-demand RDF Data Management in the Cloud
Marin Dimitrov
 
Delivering Linked Data Training to Data Science Practitioners
Delivering Linked Data Training to Data Science PractitionersDelivering Linked Data Training to Data Science Practitioners
Delivering Linked Data Training to Data Science Practitioners
Marin Dimitrov
 
Semantic Technologies for Big Data
Semantic Technologies for Big DataSemantic Technologies for Big Data
Semantic Technologies for Big Data
Marin Dimitrov
 

Destaque (15)

OWLIM@AWS - On-demand RDF Data Management in the Cloud
OWLIM@AWS - On-demand RDF Data Management in the CloudOWLIM@AWS - On-demand RDF Data Management in the Cloud
OWLIM@AWS - On-demand RDF Data Management in the Cloud
 
RDF Database-as-a-Service with S4
RDF Database-as-a-Service with S4RDF Database-as-a-Service with S4
RDF Database-as-a-Service with S4
 
Text Analytics & Linked Data Management As-a-Service
Text Analytics & Linked Data Management As-a-ServiceText Analytics & Linked Data Management As-a-Service
Text Analytics & Linked Data Management As-a-Service
 
OpenFest 2016 - Open Microservice Architecture
OpenFest 2016 - Open Microservice ArchitectureOpenFest 2016 - Open Microservice Architecture
OpenFest 2016 - Open Microservice Architecture
 
Delivering Linked Data Training to Data Science Practitioners
Delivering Linked Data Training to Data Science PractitionersDelivering Linked Data Training to Data Science Practitioners
Delivering Linked Data Training to Data Science Practitioners
 
Scaling to Millions of Concurrent SPARQL Queries on the Cloud
Scaling to Millions of Concurrent SPARQL Queries on the CloudScaling to Millions of Concurrent SPARQL Queries on the Cloud
Scaling to Millions of Concurrent SPARQL Queries on the Cloud
 
GraphDB Connectors – Powering Complex SPARQL Queries
GraphDB Connectors – Powering Complex SPARQL QueriesGraphDB Connectors – Powering Complex SPARQL Queries
GraphDB Connectors – Powering Complex SPARQL Queries
 
Scaling up Linked Data
Scaling up Linked DataScaling up Linked Data
Scaling up Linked Data
 
From Big Data to Smart Data
From Big Data to Smart DataFrom Big Data to Smart Data
From Big Data to Smart Data
 
Crossing the Chasm with Semantic Technology
Crossing the Chasm with Semantic TechnologyCrossing the Chasm with Semantic Technology
Crossing the Chasm with Semantic Technology
 
Go at uber
Go at uberGo at uber
Go at uber
 
HTTP2 and gRPC
HTTP2 and gRPCHTTP2 and gRPC
HTTP2 and gRPC
 
Go and Uber’s time series database m3
Go and Uber’s time series database m3Go and Uber’s time series database m3
Go and Uber’s time series database m3
 
Distributed tracing for Node.js
Distributed tracing for Node.jsDistributed tracing for Node.js
Distributed tracing for Node.js
 
Semantic Technologies for Big Data
Semantic Technologies for Big DataSemantic Technologies for Big Data
Semantic Technologies for Big Data
 

Semelhante a Hackconf 2016 - Да пишем код за хиляди сървъри (6)

2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx
 
WordPress Security
WordPress SecurityWordPress Security
WordPress Security
 
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка YiiСигурност и права за достъп в уеб приложения изработени с работната рамка Yii
Сигурност и права за достъп в уеб приложения изработени с работната рамка Yii
 
Защита при създаване на java прил.в интернет
Защита при създаване на java прил.в интернетЗащита при създаване на java прил.в интернет
Защита при създаване на java прил.в интернет
 
Сравненителна характеристика на криптографски алгоритми
Сравненителна характеристика на криптографски алгоритмиСравненителна характеристика на криптографски алгоритми
Сравненителна характеристика на криптографски алгоритми
 
Php sec
Php secPhp sec
Php sec
 

Mais de Nikolay Stoitsev

Mais de Nikolay Stoitsev (20)

Building vs Buying Software
Building vs Buying SoftwareBuilding vs Buying Software
Building vs Buying Software
 
How and why to manage your manager
How and why to manage your managerHow and why to manage your manager
How and why to manage your manager
 
From programming to management
From programming to managementFrom programming to management
From programming to management
 
A practical introduction to observability
A practical introduction to observabilityA practical introduction to observability
A practical introduction to observability
 
Building a modern SaaS in 2020
Building a modern SaaS in 2020Building a modern SaaS in 2020
Building a modern SaaS in 2020
 
Everything You Need to Know About NewSQL in 2020
Everything You Need to Know About NewSQL in 2020Everything You Need to Know About NewSQL in 2020
Everything You Need to Know About NewSQL in 2020
 
3 lessons on effective communication for engineers
3 lessons on effective communication for engineers3 lessons on effective communication for engineers
3 lessons on effective communication for engineers
 
ISTA 2019 - Migrating data-intensive microservices from Python to Go
ISTA 2019 - Migrating data-intensive microservices from Python to GoISTA 2019 - Migrating data-intensive microservices from Python to Go
ISTA 2019 - Migrating data-intensive microservices from Python to Go
 
Evolving big microservice architectures
Evolving big microservice architecturesEvolving big microservice architectures
Evolving big microservice architectures
 
The career path of software engineers and how to navigate it
The career path of software engineers and how to navigate itThe career path of software engineers and how to navigate it
The career path of software engineers and how to navigate it
 
Migrating a data intensive microservice from Python to Go
Migrating a data intensive microservice from Python to GoMigrating a data intensive microservice from Python to Go
Migrating a data intensive microservice from Python to Go
 
Using Apache Kafka from Go
Using Apache Kafka from GoUsing Apache Kafka from Go
Using Apache Kafka from Go
 
Large scale stream processing with Apache Flink
Large scale stream processing with Apache FlinkLarge scale stream processing with Apache Flink
Large scale stream processing with Apache Flink
 
Scaling big with Apache Kafka
Scaling big with Apache KafkaScaling big with Apache Kafka
Scaling big with Apache Kafka
 
NewSQL: what, when and how
NewSQL: what, when and howNewSQL: what, when and how
NewSQL: what, when and how
 
How to read the v8 source code?
How to read the v8 source code?How to read the v8 source code?
How to read the v8 source code?
 
Running in multiple data centers
Running in multiple data centersRunning in multiple data centers
Running in multiple data centers
 
Distributed tracing for big systems
Distributed tracing for big systemsDistributed tracing for big systems
Distributed tracing for big systems
 
Reusable patterns for scalable APIs running on Docker @ Java2Days
Reusable patterns for scalable APIs running on Docker @ Java2DaysReusable patterns for scalable APIs running on Docker @ Java2Days
Reusable patterns for scalable APIs running on Docker @ Java2Days
 
Everyday tools and tricks for scaling Node.js
Everyday tools and tricks for scaling Node.jsEveryday tools and tricks for scaling Node.js
Everyday tools and tricks for scaling Node.js
 

Hackconf 2016 - Да пишем код за хиляди сървъри

Notas do Editor

  1. Здравейте на всички. Аз съм Ники и съм тук днес да ви разкажа за това как да пишем код за хиляди сървъри…
  2. Първо няколко думи за мен. Аз съм софтуерен инженер в Убер, която е една голяма платформа, където се занимавам с разпределени системи извършващи плащания и различни други аспекти при работата с пари. Вчера по време на първата лекция Aлекс Тодоров повдигна въпроса дали правим mutation testing. Отговора е да, правим за Java и за JavaScript понеже голяма част от най-важните ни системи са на javascript върху node.js и искаме те да са изключително добре изстествани. За Java имаме библиотека, която може да намерите в github организацията ни.
  3. И аз също съм част от ФМИ мафията, уча там и от няколко години водя упражнения
  4. Та очевидно днес ще си говорим за бекенд. Да пятам - коло хора се определят като фронтенд девелъпъри, колко от вас са писали някакви backend неща , колко от вас са рънвали бекенд с повече от 100 сървъра, колко са ставали в 3 през нощта понеже бекенда им се е счупил Моята презентация е доста по-различна от тези които видяхте до сега на тази конференция. Тя е доста технически, с термини и теореми. Но нещо което всички ви казаха е че няма значение какъв език за програмиране или какъв framework ще си изберете, стига да разбирате нещата в осново. Днес точно това ще направим. Ще видим някакви принципи на backend нещата.
  5. Та когато си избираме технология имаме доста голям избор и повечето пъти го правим спрямо езика за програмиране, който знаем. Тук виждаме няколко примера. Да направим едно малко състезание. Колко хора пишат на рейлс? Някой пише ли на django? Някой zend, php? А spring?
  6. Без значение кой модерен фреймуърк ще си изберем, те горе долу имат едни и същи фийчъри...
  7. Първото нещо което искаме да постигнем е мащабируемост - scalability Мащабируемост е възможноста на една система да увеличава количеството работа което извършва или да увеличи размера или капацитета си за да се справи с това увеличаване.
  8. Ако имаме приложение, което работи на един сървър и искаме да го скалираме, може да го направим по 2 начина.
  9. Първия е вертикално. При него си копуваме по-добър хардуер и започваме да използваме него. Това е по-евтино в началото и е много по-лесно
  10. Но има 3 проблема с вертикалното скалиране… първия е закона на муур(транзисторите в един процесор се удвояват всеки 18 месеца)… втория е че данните в мрежата се удвояват всеки 12 месеца… третия е че човешкото знание също се удвоява всеки 12 месеца
  11. Затова ще разгледаме втория начин, хоризонтално - при него нашата система увеличава капацитета си като добавя допълнителни сървъри
  12. Този начин за скалиране е добър може може да се прави доста динамично - просто добавяш още машини, може да става през някакъв уеб портал. Другата е че прави системата по-надеждна, понеже дори и един от сървърите да се счупи другите може да продължат работа.
  13. Така получаваме разпределена система...
  14. Разпределената система е много много по-трудна за управление поради няколко причини. Първата е че нещата се чупят доста. Да предположим че един компютър се счупва веднъж на 10 години… тоест шанса е 1 на 120
  15. Също така съм и мрежата се чупи the network will go down for annoying reasons: power failures, broken hardware, someone tripping a cord, vortex to other dimensions engulfing mission-critical components, headcrabs infestation, copper theft, etc И скороста на самата мрежа е непредвидима Study of Univeristy of Toronto and Microsoft - average failure rate of 5.2 devices per day and 40.8 links per day, with a median time to repair of approximately five minutes (and a maximum of one week), packet loss of 59,000 packets per failure. First year for a new Google cluster involves: • Five racks going wonky (40-80 machines seeing 50 percent packet loss). • Eight network maintenance events (four of which might cause ~30-minute random connectivity losses). • Three router failures (resulting in the need to pull traffic immediately for an hour).
  16. Дори и цял дейтацентър може да се счупи. Виждал съм го да се случва не веднъж. Например, един инженер прави неправилна настройка на мрежата и цялата мрежа спира да работи. Може да намерите доста примери от най-различни компании като amazon и google. Когато проектираме нашаща разпределена система е добре да помислим как да се справяме с такива ситуации. Имаме реален случай, един рак се запалва, става пожар, изгасва централно тока…(един рак изгаря суича отгоре, започва да дими, включва пожарната аларма и тока спира) В друг дайта център в индия, хората решили да отваорят прозорците
  17. Проблем е че може да си пейстнеш active record заявката в stackoverflow и да питаш защо не работи… няма как да питаш защо системата е толкова бавна в определена операция… може да питаш някакви малко архитектурни неща… няма кой да седи и да ни проектира системата в stackoverflow така че да реши точно нашия проблем с нашите инструменти
  18. Един много просто пример на този протокол е ако има трима асистенти в един университет и те трябва да проверят едни домашни.
  19. Ако имаме хиляди сървъри и искаме те да работят заедно, можем да имплементираме алгоритъм при които всеки знае, с колко и кои други сървъри работи. Проблема е как да разберем когато някой хост е добавен или кога е развален и повече не може да го достъпваме.
  20. Освен тези принципи има и някои основни концепции Всички знаят едно и също In the previous example, consistency would be having the ability to have the system, whether there are 2 or 1000 nodes that can answer queries, to see exactly the same amount of money in the account at a given time.
  21. Тhe key solution to high availability is redundancy.
  22. По-евтино е да не я записваме навсякъде
  23. The whole point of partition tolerance is that the system can work with messages possibly being lost between components. Примера
  24. In the real world, we can have various things like quorum systems where we turn this 'yes/no' question into a dial we can turn to choose how much consistency we want. By changing making the M value of required nodes up to N (the total number of nodes), you can have a fully consistent system. By giving M the value 1, you have a fully AP system, with no consistency guarantees.
  25. Лесли Лампорт, носител за наградата Тюринг за 2013