В облаке mail.ru cloud solutions будут развивать проекты в области геномных данных

Как мы реализовали решардинг

Самая большая проблема шардинга — это решардинг

Нам было важно сделать его без даунтайма, так как система уже была в продакшене. Покажу, как мы решили проблему на примере похожей задачи с живой миграцией данных из одного проекта в другой

Ниже схема нашего кластера, которая получилась после внедрения шардинга. У нас есть nginx, S3 API, роутер, primary-база с проектами, шардирующий прокси и непосредственно шарды

Выше я упустил момент, что на определенном этапе проекта была продуктовая задача: «Запустить ещё одно хранилище, Айсбокс, — как Хотбокс, только для холодных данных». По сути, такое же хранилище, но по другим URL и без кэшей.

Icebox использовался меньше, чем Hotbox, поэтому он довольно долго обходился без какого-либо шардирования. В итоге мы решили отказаться от него и объединить Hotbox и Icebox в один сервис, просто разделив классы хранения.

Бакеты в хранилищах не пересекались, их легко можно было смержить и переместить, но клиенты пользовались и тем, и другим хранилищем, значит, нужно было решить проблему с отсутствием даунтайма. Нельзя было просто выключить и скопировать. Мы сделали миграцию в несколько этапов.

Для начала мы синхронизировали primary-хранилища. У нас был Tarantool и мы могли при создании объекта сделать так:

  • к базе приходит запрос на создание бакета, например в Hotbox;
  • Tarantool проверяет в другой базе (в этом случае — в Icebox), что такого бакета нет;
  • если бакет есть, база говорит, что его создавать нельзя, и он синхронизировался как существующий.Синхронизация бакетов

В том хранилище, которое должно было принимать в себя все данные, ввели для проектов и бакетов признак, говорящий, где хранится этот объект. Он мог храниться локально, то есть в Hotbox, в Icebox — тогда в новом хранилище от него нет никаких данных, либо мог быть в состоянии миграции.

Если у проекта или бакета стоял признак Migrating, то во время миграции запрос выполнялся сначала в новое хранилище, в котором данные должны находиться, а если их там не было, то запросы пенаправлялись на альтернативное хранилище.

Далее мы переключили трафик. Поскольку API мог обслуживать и запросы Icebox, и запросы Hotbox, мы смогли без даунтайма переключить трафик, просто перенеся хосты и добавив соответствующие записи в Nginx.

После того, как трафик был перенаправлен, Nginx и API от Icebox можно было убрать.
Затем мы убрали Icebox nginx и S3 API — и всё заработало:

Далее мы запустили фоновый процесс миграции, который работает внутри базы — обходит поэлементно все проекты и их бакеты, выставляет для них признак Migrating, переносит данные и по завершению переноса выставляет признак Local.

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

По тем же принципам был выполнен и решардинг из старого хранилища в шардированное:

  • Пометили все бакеты как . Все запросы к ним шли в оригинальное, нешардированное хранилище.
  • Новые бакеты создавались сразу в статусе .
  • По одному брали бакеты, ставили статус и переносили данные.

Запросы при этом обслуживались по принципу:

  • Читаем в новом, потом в старом.
  • Создаём только в новом.
  • Обновляем двухфазно: если в новом нет, переносим из старого в новый, потом обновляем.

Стоит ли им доверять?

Когда вы задаете себе подобный вопрос, сразу же вспомните ваше поведение во время установки десктопного клиента Dropbox, Google Drive, Яндекс.Диска и прочих.

В момент, когда вы ставите галочку и щелкаете по кнопке «Принимаю», вы предварительно читаете добрый десяток страниц текста с «Условиями обслуживания»?

95% пользователей не делают этого. А значит и беспокоиться о конфиденциальности загруженных данных им нет смысла. Если вам нечего скрывать и вы не храните достоверные результаты спортивных мероприятий на ближайшие лет десять, как это было в фильме «Назад в будущее», то беспокоиться не за что.

Главное — правильно выбирать «облако», в котором планируете хранить свои данные. Из тех, кому можно доверять, стоит отметить:

А сервисы, предлагающие вам сотни гигабайт бесплатно — сомнительное удовольствие. Рискуете либо потерять данные, либо отправлять/скачивать их целую вечность.

Облачные хранилища действительно существенно упрощают нашу жизнь. Они заменили нам громоздкие винчестеры и вечно теряющиеся флешки, предоставив мгновенный доступ к сотням гигабайт информации. Стоит ли отказываться от таких преимуществ из суеверности? Вряд ли.

iPhones.ru

Здесь тоже есть свои моменты.

Рассказать

Облачные программные приложения

Трендом современности в области виртуальных технологий также можно назвать развитие облачного программного обеспечения. Этому способствовала повышенная гибкость настроек, отличая производительность, минимизация расходов на покупку оборудования. На сегодня более 70% приложений, которые использует бизнес в повседневной работе, находятся в облаке.

Перспективы такого решения можно понять, если сравнить обычные программные продукты и облачные. Так, классическое приложение включает данные и модуль обработки, представленный в форме кода. Для их выполнения обязательно требуется место на диске. Облачные же приложения не обслуживают большую часть этих процессов. Они выступают только в роли устройства для ввода данных. Для работы с ними пользователю необходимо воспользоваться браузером или мобильным приложением. А вот уже сама обработка будет выполняться на удаленном сервере на основании API.

Преимущества разработки программного обеспечения в облаке неоспоримы:

  • практически мгновенный доступ к важным данным;

  • экономия ресурсов на этапе запуска;

  • оплата исключительно за используемые ресурсы;

  • более высокая производительность;

  • возможность работы с любого устройства, подключенного к сети Интернет, без привязки к географическому местоположению.

Система анализа геномных данных

Один из ключевых продуктов компании – система анализа геномных данных NGS Wizard на платформе Genomenal. Она предназначена для медицинских учреждений, биотехкомпаний и научных институтов, которые занимаются исследованием и лечением наследственных заболеваний, онкологии. Сервис автоматизирует интерпретацию геномных данных. Особенность решения в том, что применять его могут пользователи без специальных знаний в биоинформатике. Это расширяет доступ к анализу геномных данных для специалистов различного профиля.

Тестирование сервиса NGS Wizard проходило в облаке MCS. Для этого использовались виртуальные машины, виртуальные сети, база данных PostgresSQL как сервис, файловое хранилище NFS и объектное хранилище S3 для резервирования данных. Развертывание сервиса в облаке позволило проверить его работоспособность, избежать ошибок при вводе в коммерческую эксплуатацию.

Задел для роста

Как отмечается в отчете IDC, интерес к публичным облачным сервисам обусловлен спросом на удобное средство доступа к новым технологиям — контейнерную виртуализацию, распределенные базы данных, аналитику больших данных, искусственный интеллект, интернет вещей. «Облако предоставляет компании безопасный, быстрый и удобный доступ к ее данным с любого устройства из любой точки мира, — говорит Александр Сорокоумов. — Облачные сервисы дают компаниям возможность быстрее тестировать новые гипотезы и выводить на рынок новые продукты, изменять бизнес-модели, масштабировать бизнес-процессы, использовать возможности новых технологий, таких как искусственный интеллект, машинное обучение и др.».

«Затраты на создание собственной ИТ-инфраструктуры — например, для анализа больших данных — постоянно растут, тогда как услуги облачных сервисов в силу высокой конкуренции становятся все более доступными, в том числе для крупного и среднего бизнеса», — считает Илья Летунов. По его словам, облако может стать базой цифровой трансформации отдельных компаний и целых отраслей: агрегация и «умный» анализ данных создают новую ценность практически в любой сфере, от ретейла до банкинга, от медицины до медиа. В сфере промышленности драйвером рынка облаков является взрывной рост платформ промышленного интернета вещей (IIoT)  — такие игроки получают максимальную пользу от облаков за счет внедрения масштабируемых сервисов по приему, хранению и обработке данных.

«Облака позволяют повысить эффективность бизнес-процессов, оптимизировать затраты, высвободить человеческие ресурсы и увеличить скорость внедрения инноваций», — поясняет Антон Груздев, руководитель департамента технической поддержки продаж компании Yadro (входит в «ИКС Холдинг»). Как дополняет Алексей Ведин, директор по продуктам монетизации сети Nexign (входит в «ИКС Холдинг»), основной драйвер использования облачных технологий, в частности, операторами связи, — необходимость сокращения совокупной стоимости владения (инфраструктуры). Облачные технологии обеспечивают более эффективный и быстрый запуск новых сервисов, одновременно снижая эксплуатационные расходы операторов.

В сегменте среднего и малого бизнеса (СМБ) использование облака в 40 раз выгоднее использования собственного физического сервера, считает Александр Сорокоумов, при том что для СМБ особенно важны стоимость облачных решений и возможность доступа к новым бизнес-инструментам.

По данным IDC, наибольший объем потребления облаков зафиксирован со стороны предприятий розничной и оптовой торговли, финансового сектора и производства. «Облачные технологии не используются в оборонной промышленности и тех организациях, которые работают с гостайной, а также в компаниях, обладающих уникальными данными», — комментирует Сергей Самоукин. Но технически разместить свои данные в облаке может любая организация, прописав уникальный SLA (Service Level Agreement — соглашение об уровне предоставления услуги для облачного провайдера).

В целом уровень проникновения облачных решений в России пока невысок и составляет лишь 3%, в то время как в мире — свыше 50%, отмечает Александр Сорокоумов. Расширению сферы применения облачных услуг для автоматизации деятельности предприятий будет способствовать развитие программы «Цифровая экономика», считает Антон Груздев. По его словам, путь к облачным сервисам пройден отечественными компаниями только на 20%, и следующие 80% раскроют весь потенциал этой трансформации.

Первые компоненты

Демон, реализующий S3 API. Это стандартный S3 API Amazon, который поддерживает работу по XML для метаданных и позволяет непосредственно передавать контент. Нам не пришлось что-то изобретать, всё описано и задокументировано.

Также перед сервисом мы поставили Nginx. Его мы использовали для терминации SSL, балансировки нарузки, а также для некоторой логики на Lua (метрики, логгирование и трейсинг).

Для хранения метаданных S3 мы также выбрали Tarantool. В первой версии за метаданными демон S3 ходил в эту базу, сам контент хранил в большом хранилище через Streamer.

Nginx + S3 API + метаданные

Облака без серверов

Бессерверные облака – технология, которая сегодня находится на этапе активного развития. Ее суть в том, что для предоставления серверных услуг уже не требуется покупать или арендовать аппаратное обеспечение. Одно из наиболее весомых преимуществ такого решения – возможность быстрого и простого масштабирования. Как результат, исключаются простои оборудования, нет превышения лимитов в результате резкого повышения трафика. Ресурсы автоматически подстроятся под требуемый объем.

Более того, бизнес при переходе в облако оплачивает аренду только используемых ресурсов. Никаких фиксированных плат за объемы хранилища, пропускную способность, аппаратное обеспечение. Предпринимателям остается только пользоваться всеми преимуществами высоких вычислительных мощностей с минимальными вложениями, без покупки «железа». Более того, бизнесу больше не надо тратиться на обслуживание информационной инфраструктуры. Поддержку работоспособности облачных устройств, их ремонт, обновление, полностью берет на себя провайдер услуг.

Если облака для вас
не просто теория

Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям

Конфигурация VPS и бесплатный тест уже через 2 минуты

Сконфигурировать VPS

Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Запросить КП

Доработки боевой системы: фейловер и масштабирование

Система была уже в бою, при этом на старте мы кое-что упустили — нужно было добавить фейловер и масштабирование.

Наш S3-демон ходил за метаданными по протоколу Tarantool. На место оригинальной базы мы поставили Tarantool, который выступал в роли прокси-роутера запросов за метаданными. С точки зрения приложения, реализующего API, ничего не поменялось — оно продолжило обращаться к базе по протоколу Tarantool, но роутер смог обеспечить активный фейловер. То есть мы смогли проверять доступность узла, выдерживать паузу при переключениях и отказах и так далее. При этом само приложение мы не модифицировали.

Инвестиции в энергосбережение

Энергосбережение – технологии, затронувшие всевозможные области человеческой жизнедеятельности. Не исключением они стали и в процессе виртуализации, став одним из передовых трендов облака 2022 года. Мир стремится к достижению углеродной стабильности, повышению экологичности технологий и продуктов. А вот сфера облачных технологий способна обеспечить существенное сокращение энергопотребления. Это накладывает свои ограничения на требования к цифровым хранилищам в комплексе с круглосуточным выделением пользователям IaaS, SaaS, PaaS услуг.

Речь идет о том, чтобы облачные провайдеры стали уделять как можно больше внимания так называемым «зеленым» дата-центрам. Это хранилища, работа которых основана на альтернативных источниках энергии. Одно из таких передовых решений – внедрение облачных сервисов, масштабирование которых выполняется не исходя из производительности, а на основе энергопотребления. Именно под него и будут выделяться определенные ресурсы.

Челлендж 3: работа с персональными данными

Если стартап собирает персональные данные пользователей и клиентов, то его ИТ-инфраструктура должна соответствовать закону о персональных данных 152-ФЗ. Построить такую инфраструктуру своими силами, обеспечить требуемый уровень надежности и пройти все процедуры по сертификации — достаточно сложно и дорого.

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

Облачный провайдер предоставляет уже аттестованную инфраструктуру, соответствующую требованиям по хранению персональных данных.

Стартап Novel Software Systems из Новосибирска запускает проекты в области геномных данных. Один из них — первая в России генетическая энциклопедия «Генокарта». В будущем он станет сервисом, позволяющим каждому пользователю загрузить данные о своем геноме и узнать о предрасположенности к различным наследственным заболеваниям. Для проекта необходима инфраструктура, соответствующая 152-ФЗ, поэтому «Генокарта» размещена в отечественном облаке.

Челлендж 5: внедрение новых технологий

Сегодня не нужно осваивать инновационные технологии с нуля. Можно подключить готовые среды разработки для машинного обучения или развернуть платформу для хранения и обработки больших данных в облаке. Это позволит быстро разработать и протестировать новую «фичу»: если проект оказался удачным — оставить, если нет — просто отключить.

Например, в облаке есть готовые сервисы для анализа больших данных (Hadoop, Spark, HBase, Airflow). Их используют для развертывания аналитической инфраструктуры приложений, работающих с Big Data. Процесс автоматизирован, что экономит дни и даже недели по сравнению с самостоятельной настройкой этих решений.

По такому же принципу в облаке создается среда для разработчиков моделей машинного обучения. Популярные инструменты и фреймворки (Matplotlib, LightGBM, PyTorch, XGBoost, pandas и другие) доступны из облака — можно настроить их и приступить к работе.

Платформа для обработки геномных данных

Novel Software Systems с 2004 г. специализируется на глубокой аналитике биомедицинских данных и разработке программных продуктов для науки и генетики с применением технологий машинного обучения. Компания с 2017 года развивает платформу Genomenal для обработки геномных данных. ИТ-инфраструктура, обеспечивающая работу проектов, должна соответствовать требованиям закона о хранении персональных и медицинских данных ФЗ-152.

Головной офис компании расположен в новосибирском Академгородке, представительства работают в Москве и Санкт-Петербурге, а также США (Роквилль, Мэриленд), Китае (Сямынь) и Нидерландах (Хертогенбос). Распределенная команда и широкая география пользователей сервисов требуют от ИТ-инфраструктуры высокой доступности: системы должны работать одинаково быстро и удобно для всех специалистов и пользователей сервисов. Необходимость получить высокопроизводительную инфраструктуру, соответствующую ФЗ-152, привела компанию в облака.

Повышение безопасности

За безопасность информации в облачных и локальных структурах отвечают как представители бизнеса, так и сами поставщики услуг. Существенно упростить эти процессы позволяет множество готовых решений от таких гиперскейлеров, как Google, Azure, AWS. Они предлагают продукты, способные автоматически шифровать исходные данные и информацию, которая передается. И все это идет уже как фрагмент управляемых сервисов.

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

Такие решения значительно повысят уровнять безопасности данных, повысят отказоустойчивость, позволят управлять рисками. А это значит, что безопасность бизнес-процессов значительно улучшится.

Этот комплекс мероприятий входит в перечень обязательных задач для тех, кто планирует заполучить сертификат информационной безопасности ISO/IEC 27001. Но ими не стоит пренебрегать и тем, кто не настроен получать его. Реализация этих задач – стратегическое мероприятие, которое позволит быть уверенным в информационной безопасности бизнеса.

МейлОблако

МейлОблако (Облако Mail.ru) — это универсальное хранилище, которое подходит для личного и корпоративного пользования. В него можно закачивать практически все типы файлов, включая мультимедийные, графические, текстовые и прочие. Облачным сервисом удобно пользоваться как с мобильных, так и с десктопных устройств.

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

Как и в Google, в сервисе МейлОблако, предусмотрен бесплатный объем хранилища и платные расширения по подписке с пробным периодом, по завершении которого можно отказаться от использования дополнительной памяти.

Не просто несколько облаков, а ИТ-стратегия

Если в 2010-х годах перед компаниями стоял вопрос, переходить на облако или нет, то сейчас они решают, какое облако выбрать и сколько их должно быть. Стало очевидно, что без облачных технологий сложно пробовать и внедрять новые сервисы, экспериментировать и увеличивать отрыв от конкурентов, быстро выводя продукты на рынок. 

Бизнес начал искать пути оптимизации уже существующей практики и постепенно пришел к мультиоблачной (Multicloud) стратегии. Если упростить, она подразумевает использование решений сразу нескольких облачных провайдеров или распределение рабочих нагрузок между частным и несколькими публичными облаками. 

При этом с развитием рынка мультиоблако могут позволить себе не только крупные корпорации, но и средний, а также малый бизнес. В этом сегменте такой подход позволяет экономить на инфраструктуре, оптимизируя расходы, и получать нужные ресурсы без капитальных затрат.

Преимущества хранения данных в облачных сервисах

Онлайн-сервисы позволяют пользователям хранить информацию, медиафайлы и даже резервные копии ПО за пределами телефона, что хорошо экономит внутреннюю память. Работоспособность гаджета и скорость его ответа напрямую зависит от количества «свободных» гигабайтов.

Ему просто не хватает ресурсов. Эту проблему с лёгкостью решают различные онлайн-сервисы для хранения электронной информации. Их легко синхронизировать с устройством, после чего данные начинается их автоматическая загрузка. Доступ к «облаку» сохраняется при наличии интернета, логина и пароля от аккаунта.

Облачные сервисы позволяют сэкономить на покупке различных устройств для хранения информации: внешние жесткие диски, флешки и даже смартфоны с большим объемом памяти. Более того продлевается и срок эксплуатации гаджета, поскольку тот не подвергается большой нагрузке.

Что мы добавили, чтобы сделать S3-хранилище

Итак, мы рассмотрели общее базовое устройство хранилища на момент, когда мы собрались запускать S3-хранилище. При помощи метода PUT мы могли поместить туда произвольный контент и получить в качестве идентификатора этих данных хэш. С этим идентификатором впоследствии можно было прийти и забрать исходный файл. Но этого недостаточно для реализации S3. В протоколе S3, помимо самого хранения объектов, есть:

  • хранение метаданных — дополнительных свойств объектов;
  • организация доступа к объектам посредством HTTP;
  • группировка объектов в коллекции — бакеты;
  • HTTP-S3 Endpoint. S3 организует данные в определенные структуры — бакеты, каждый из которых предоставляет точку входа для хранения файлов.

Для реализации этой логики был нужен отдельный сервис. Также хотелось сразу предусмотреть архитектуру для дальнейшего роста сервиса с линейной масштабируемостью.

Как устроены облачные хранилища

На сегодняшний день существует масса всевозможных облачных систем хранения. У каждого свои задачи. Одни отвечают за хранение переписки в мессенджерах, другие — для переноса фотографий или резервного копирования писем из электронной почты. Есть и универсальные, благодаря которым можно загружать файлы любого типа и с любым расширением.

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

Для компаний, предоставляющий дисковое пространство в качестве облачного, важно иметь не только достаточную мощность, но и позаботиться о нескольких дополнительных факторах. Избыточное резервирование

Центра обработки данных не может состоять из серверов, которые рассчитаны сугубо на конкретную клиентскую базу. Говоря проще: если облаком пользуется 1000 человек по тарифу 10 ГБ в облаке, то компании нужно позаботиться о наличии не 10 ТБ емкости хранилища, а о значительно большем

Избыточное резервирование. Центра обработки данных не может состоять из серверов, которые рассчитаны сугубо на конкретную клиентскую базу. Говоря проще: если облаком пользуется 1000 человек по тарифу 10 ГБ в облаке, то компании нужно позаботиться о наличии не 10 ТБ емкости хранилища, а о значительно большем.

Дело в том, что серверам необходима периодическая профилактика. Ведь, по сути, это железо, которое покрывается слоем пыли, перегревается, выходит из строя. Но клиент должен быть уверен в том, что получит доступ к своим файлам в любое время.

Для этого используются избыточные сервера. На них хранятся, как бы странно это не звучало, копии копии ваших данных. А оригиналы — у вас на компьютере или смартфоне. Во время профилактики сервера отключаются в такой последовательности, чтобы, как минимум, одна копия данных всегда оставалась доступной.

Резервное питание. В облачных хранилищах инженеры подключают сервера таким образом, чтобы пользователи, опять-таки, всегда имели доступ к файлам даже при аварии в электросети.

Для обеспечения бесперебойного доступа используются автономные электрические генераторы, способные обеспечить весьма продолжительное время работы.

У той же Apple, учитывая приоритеты компании в «зеленой» энергетике, роль таких генераторов выполняют солнечные панели.

Шифрование. С целью безопасности и предотвращения несанкционированного доступа, все загруженные в облако данные шифруются посредством сложного алгоритма кодирования. Получить доступ к таким данным можно лишь с помощью ключа шифрования, которые есть лишь у пользователя.

Само по себе облачное хранение разделяется на три категории: инфраструктура как услуга (IaaS) — ситуация, в которой такие крупные игроки как Amazon и Google предоставляю свои аппаратные мощности в аренду другим компаниям; платформа как сервис (PaaS) — объемы пространства в онлайне, в которых разработчики создают приложения для различных категорий пользователей; ПО как сервис (SaaS) — когда пользователи используют программное обеспечение для доступа к облаку через интернет.

Итак, вы решили загрузить очередную порцию фотографий с отпуска в облачное хранилище. Открыв мобильный клиент, выбираете снимки для синхронизации и выбираете «Загрузить».

Со смартфона через интернет поступает запрос на управляющий концентратор облачного сервера. Его еще называют «распределительным сервером» или MasterMind-сервером. Он отвечает за обработку вашего запроса и отправку файлов точно по адресу, то несть непосредственно в папку, которая принадлежит вам.

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Центр Начало
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: