Giter Site home page Giter Site logo

sdb-homework-12-07's Introduction

Домашнее задание к занятию 12.7 "Репликация и масштабирование. Часть 2" -Леонардо Гунба

Задание 1.

Опишите основные преимущества использования масштабирования методами:

  • активный master-сервер и пассивный репликационный slave-сервер,
  • master-сервер и несколько slave-серверов,
  • активный сервер со специальным механизмом репликации – distributed replicated block device (DRBD),
  • SAN-кластер.

Дайте ответ в свободной форме.

- в первом примере мы можем писать в master-сервер и читать данные slave-сервер, так же в этой конфигурации снимаем нагрузку с master-сервер.
- в этом случае тоже самое что и в первом только у нас большое количество slave-серверов, значит больше копий баз и больше точек откуда можно читать информацию из баз для снятие нагружки.
- на сколько помню технологию то там блочный устройство ( активное и пассивное), при выхода устройства на первом сервере можно задействовать пассивное блочное устройство, тем самым в кратчайшие сроки восстановить работу сервиса.
- строются большие интерпрайз сети SAN для выдачи серверам большие(по объему) блочные устройства.

Задание 2.

Разработайте план для выполнения горизонтального и вертикального шаринга базы данных. База данных состоит из трех таблиц:

  • пользователи,
  • книги,
  • магазины (столбцы произвольно).

Опишите принципы построения системы и их разграничение или (и) разбивку между базами данных.

Пришлите блок схему, где и что будет располагатся. Опишите, в каких режимах будут работать сервера.

Вертикальный шардинг — это выделение таблицы или группы таблиц на отдельный сервер. Например, в приложении есть такие таблицы:

  • пользователи — данные пользователей
  • книги — книги пользователей
  • магазины — магазины

Таблицу users Вы оставляете на одном сервере, а таблицы книги и магазины переносите на другой. В таком случае в приложении Вам необходимо будет использовать соответствующее соединение для работы с каждой таблицей:

$пользователи_connection = mysql_connect('10.10.0.1', 'root', 'pwd');
$гниги_connection = mysql_connect('10.10.0.2', 'root', 'pwd';
# какой-то код и все такое...
$q = mysql_query('SELECT * FROM пользователи WHERE ...', $пользователи_connection);
# еще какой-то код...
$q = mysql_query('SELECT * FROM книги WHERE...', $книги_connection);
# еще какой-то код...
$q = mysql_query('SELECT * FROM магазины WHERE...', $магазины_connection);

Для каждой таблицы или группы таблиц будет отдельное соединение

alt tag

В отличие от репликации, мы используем разные соединения для любых операций, но с определенными таблицами.

Горизонтальный шардинг — это разделение одной таблицы на разные сервера. Это необходимо использовать для огромных таблиц, которые не умещаются на одном сервере. Разделение таблицы на куски делается по такому принципу:

  • На нескольких серверах создается одна и та же таблица (только структура, без данных). В приложении выбирается условие, по которому будет определяться нужное соединение (например, четные на один сервер, а нечетные — на другой).

  • Перед каждым обращением к таблице происходит выбор нужного соединения.

  • Допустим, наше приложение работает с огромной таблицей, которая хранит фотографии пользователей. Мы подготовили два сервера (обычно они называются шардами) для этой таблицы. Для нечетных пользователей мы будем работать с первыми сервером, а для четных — со вторым. Таким образом, на каждом из серверов будет только часть всех данных о фотках пользователей. Это будет выглядеть так:

'2' => '10.10.0.2',

];
$user_id = $_SESSION['user_id'];

# получение фотографий для пользователя $user_id

$connection_num = $user_id % 2 == 0 ? 1 : 2;
$connection = mysql_connect($photo_connections[$connection_num], 'root', 'pwd');
$q = mysql_query('SELECT * FROM photos WHREE user_id = ' . intval($user_id), $connection);

Перед обращением к таблице, мы выбираем нужное нам соединение

Результат вот этой операции $user_id % 2 будет остатком от деления на 2. Т.е. для четных чисел — 0, а для нечетных — 1.

Любая работа с таблицей photos теперь будет происходить только после получения нужного соединения на основе $user_id.

картинка честно взятая из лекции ;)

alt tag

источник - https://highload.today/sharding-i-replikatsiya/

sdb-homework-12-07's People

Contributors

marcinholeo avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.