<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>АВТОМАТИЗОВАНА РОЗРОБКА ПАРАЛЕЛЬНОЇ РОЗПОДІЛЕНОЇ СИСТЕМИ ОБРОБКИ ПОТОКОВИХ ДАНИХ</article-title>
      </title-group>
      <pub-date>
        <year>2016</year>
      </pub-date>
      <fpage>96</fpage>
      <lpage>104</lpage>
      <abstract>
        <p>Виконана автоматизована розробка паралельної розподіленої динамічно масштабованої відмовостійкої системи для обробки потокових даних великого обсягу. Система розроблена на основі платформи для розподілених обчислень Hazelcast із використанням інструментарію генерації програм за високорівневими специфікаціями алгоритмів. Проведена перевірка та дослідження системи на прикладі обробки даних соціальної мережі Twitter, в якій реалізовано функціональність сентимент-аналізу повідомлень. Розглянуто механізм розгортання створеної системи на хмарній платформі. Ключові слова: мережа, аналіз, відмовостійкість, масштабування, кластер, потік, хмара, вузол, генерація програм. Выполнена автоматизированная разработка параллельной распределенной динамически масштабируемой отказоустойчивой системы для обработки потоковых данных большого объема. Система разработана на основе платформы для распределенных вычислений Hazelcast с использованием инструментария генерации программ по высокоуровневым спецификациям алгоритмов. Проведена проверка и исследование системы на примере обработки данных социальной сети Twitter, в которой реализована функциональность сентимент-анализа сообщений. Рассмотрен механизм развертывания созданной системы на облачной платформе. Ключевые слова: сеть, анализ, отказоустойчивость, масштабирование, кластер, поток, облако, узел, генерация программ. An automated development of a parallel distributed dynamically scalable fault-tolerant system for processing large amount of streaming data is performed. The system is based on the framework for distributed computing Hazelcast and the usage of the toolkit for generation of programs from high-level specifications of algorithms. The inspection and study of this system is performed on an example of data processing in Twitter social network in which sentiment analysis functionality is implemented. The mechanism of the deployment of the created system on a cloud platform is examined.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        мічна мова САА/1 [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], призначена для багаторівневого структурного проектування та документування
алгоритмів і програм. Перевагою її використання є можливість опису алгоритмів у природно-лінгвістичній формі, що
полегшує досягнення необхідної якості програм. Подання операторів мовою САА/1 називаються САА-схемами.
Основними операціями англомовної версії мови САА/1 є такі:
1) композиція – послідовне виконання двох операторів: operator 1; operator 2;
2) альтернатива – умовний оператор: IF predicate THEN operator 1 ELSE operator 2 END IF;
      </p>
    </sec>
    <sec id="sec-2">
      <title>3) оператор циклу: WHILE (predicate) LOOP operator END OF LOOP.</title>
      <p>У даній роботі також використовується оператор циклу, у якому ітерації виконуються за елементами
колекції (списку), заданої виразом expression:</p>
      <sec id="sec-2-1">
        <title>FOR EACH (Variable type, Variable name)</title>
        <p>&lt;Collection&gt; expression</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>LOOP</title>
      <p>operator
END OF LOOP
Тут Variable type вказує тип даних, а Variable name – ім’я змінної, яка послідовно буде приймати
значення із колекції; expression – вираз, у якому зазначається колекція; operator – оператор тіла циклу.</p>
      <p>
        В сигнатуру САА-М також входять операції, призначені для формалізації паралельних обчислень [
        <xref ref-type="bibr" rid="ref10 ref11 ref9">9–11</xref>
        ]
та основних понять об’єктно-орієнтованого програмування. Для сумісності з мовою програмування Java в
сигнатуру алгебри включені операції для визначення анотованих класів, полів даних, методів та параметрів.
Анотації є спеціальною формою синтаксичних метаданих, що додаються у програмний код [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Далі наведено
перелік основних операцій САА-М, що використовуються у даній роботі для визначення класів та їх складових
елементів.
      </p>
      <p>1. Визначення анотованого класу (в узагальненому вигляді):</p>
    </sec>
    <sec id="sec-4">
      <title>Annotated class X implements Y (Class name, Interface name) &lt;Annotations&gt;</title>
      <sec id="sec-4-1">
        <title>Annotation (Annotation text);</title>
        <p>&lt;Fields&gt;
operators
&lt;Methods&gt;</p>
        <p>operators
2. Визначення анотованого поля даних:</p>
      </sec>
      <sec id="sec-4-2">
        <title>Field annotated (Modifiers, Field type, Field name)</title>
        <p>&lt;Annotations&gt;</p>
      </sec>
      <sec id="sec-4-3">
        <title>Annotation (Annotation text)</title>
        <p>3. Визначення анотованого методу:</p>
      </sec>
      <sec id="sec-4-4">
        <title>Method annotated (Return type, Method name, Parameters list),</title>
        <p>&lt;Annotations&gt;</p>
        <p>Annotation (Annotation text);
&lt;Body&gt;</p>
        <p>operators
Тут Class name – ім’я класу, який реалізує інтерфейс Interface name; &lt;Annotations&gt;, &lt;Fields&gt;, &lt;Methods&gt; –
рядки, після яких необхідно вказати оператори визначення однієї або кількох анотацій, полів даних та методів
класу, відповідно; Annotation text – текст анотації (наприклад, Component).</p>
        <p>Тут Modifiers – список модифікаторів доступу (наприклад, public, static, final і т. п.); Field type – тип
даних поля; Field name – назва поля; Annotation text – текст анотації (наприклад, Resource).</p>
        <p>Тут Return type – тип значення, яке повертає метод; Method name – назва методу; Parameters list – список
формальних параметрів; Annotation text – текст анотації (наприклад, Override); &lt;Body&gt; – рядок, після якого
вказуються оператори тіла метода.
Відмітимо, що не анотовані класи, поля даних та методи визначаються за допомогою конструкцій
САА-М, аналогічних до вищенаведених. Їх специфікації відрізняються відсутністю ключового слова annotated
та списку анотацій.</p>
        <p>4. Конструкція для виклику методу екземпляра (об'єкта) класу має вигляд:</p>
        <p>Call instance method (Instance name, Method name, Arguments),
де Instance name – ідентифікатор екземпляра класу; Method name – назва методу класу; Arguments – список
фактичних параметрів методу.</p>
        <p>
          Приклади САА-схем, у яких застосовуються вищерозглянуті операції, наведено у наступних розділах.
На використанні САА-М ґрунтується розроблена інструментальна система – онлайновий діалоговий
конструктор синтаксично правильних програм (ОДСП, або Synthesis) [
          <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
          ]. Система призначена для
діалогового проектування, генерації й запуску програм, і містить такі основні компоненти:
        </p>
        <p>• клієнт – веб-інтерфейс для діалогової взаємодії користувача із системою; надає можливість виконувати
конструювання схеми алгоритму із використанням елементів бази даних, здійснювати генерацію коду цільовою
мовою програмування та виконувати запуск згенерованої програми;</p>
        <p>• конструктор схем, призначений для автоматизованої побудови високорівневих специфікацій
алгоритмів. Основна ідея методу проектування полягає в порівневому конструюванні схем зверху вниз за допомогою
підстановки мовних конструкцій САА-М (які користувач обирає зі списку) у дерево алгоритму. Специфікації
конструкцій ґрунтуються на англомовній версії мови САА/1 (див. вище);</p>
        <p>• генератор програм, який виконує автоматичний переклад побудованої в інструментарії схеми
алгоритму в текст цільовою мовою програмування (Java, C++);</p>
        <p>• база даних алгеброалгоритмічних специфікацій, у якій зберігається текст конструкцій САА-М та
базисних елементів схем, а також шаблони їх програмних реалізацій.</p>
        <p>
          У попередніх роботах [
          <xref ref-type="bibr" rid="ref10 ref11 ref9">9–11</xref>
          ] засоби САА-М та розроблений інструментарій використовувались для
автоматизації проектування та генерації паралельних програм для багатоядерних центральних процесорів
та графічних прискорювачів. У наступних розділах виконаний подальший розвиток створених засобів у
напрямку їх застосування для розробки паралельної розподіленої системи обробки потокових даних
соціальної мережі Twitter на основі фреймворку Hazelcast [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. Цільовою мовою програмування у даному випадку
є Java.
2. Отримання даних з соціальної мережі Twitter та сентимент-аналіз повідомлень
Соціальна мережа Twitter надає доступ до своїх даних у вигляді Twitter REST API та Twitter Firehose. В
даній статті не розглядається Twitter REST API, оскільки доступ до нього є пакетним: клієнт відправляє запит
до серверу, а той відповідає певним пакетом даних. Така форма доступу не є отриманням інформації у
реальному часі, на відміну від Twitter Firehose – технології, за якою Twitter надає текстові повідомлення одразу як
вони з’являються в системі, тобто у реальному часі [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. Доступ до повного потоку контенту є платним,
проте існує безкоштовна лімітована версія – Twitter Sample Stream, що фактично є Twitter Firehose, обмеженим
1% кількості повідомлень. Існує декілька Java-провайдерів для взаємодії з Twitter Sample Stream, одним з
найпопулярніших та найзручніших є Spring Social, а саме його підмодуль – Spring Social Twitter [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. Для
початку прослуховування вхідного потоку достатньо створити Spring Bean, що реалізує інтерфейс
StreamListener [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
        <p>
          Для практичного тестування вищезгаданих механізмів була обрана проблема сентимент-аналізу
текстових повідомлень. Сентимент-аналіз або аналіз тональності тексту (Sentiment analysis) – це клас методів
контент-аналізу в комп’ютерній лінгвістиці, призначений для автоматизованого виявлення в текстах емоційно
забарвленої лексики та емоційної оцінки думок авторів по відношенню до об’єктів, мова про які йде у тексті
[
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. Набуття популярності соціальними медіа, таких як блоги та соціальні мережі, підігріло інтерес до
сентимент-аналізу. З поширенням оглядів, відгуків, рекомендацій та інших форм Інтернет-самовираження,
онлайндумки почали перетворюватися на певну форму віртуальної валюти для бізнесу, що розширює ринки збуту
своєї продукції, шукає нові можливості та піклується про свою репутацію. З огляду на те, що бізнес шукає
способи автоматизації фільтрації інформаційного шуму, розуміння онлайн-діалогів та знаходження
релевантного контенту, проблема сентимент-аналізу стає дуже актуальною в наш час.
        </p>
        <p>
          Метою аналізу тональності є знаходження думок у тексті та визначення їх властивостей. У залежності
від поставленого завдання нас можуть цікавити різні властивості, наприклад: суб’єкт тональності (автор
тексту), тональна оцінка (наприклад, позитивна, нейтральна, негативна), об'єкт тональності (предмет, про який
висловлюється думка). У комп’ютерних програмах автоматизованого аналізу тональності застосовують
алгоритми машинного навчання, інструменти статистики та обробки природної мови (Natural Language
Processing, скорочено NLP), що дозволяє обробляти великі масиви тексту.
Для розв’язання задачі аналізу тональності тексту у даній роботі обраний фреймворк Standford
CoreNLP [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. Цей фреймворк є набором програмних бібліотек для аналізу природних мов та дозволяє
виконувати певні операції обробки текстів, такі як фільтрація, сегментація, стемінг, побудова лексичних дерев та
багато інших. До цього переліку також входить функція сентимент-аналізу.
        </p>
        <p>Далі наведено САА-схему для класу NLPProcessor, який забезпечує обробку тексту, поданого
природною мовою, на основі використання Standford CoreNLP. Схема побудована із використанням операцій САА-М
та інструментальної системи ОДСП, розглянутих у розділі 1.</p>
      </sec>
      <sec id="sec-4-5">
        <title>Comment (Nature Language Processor);</title>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Annotated class (NLPProcessor) &lt;Annotations&gt; Annotation (Component) &lt;Fields&gt;</title>
      <p>END IF</p>
    </sec>
    <sec id="sec-6">
      <title>Return (Call instance method (Sentiment, valueOf, mainSentiment));</title>
      <p>Оцінки тональності тексту (невизначена, сильна негативна, слабка негативна, нейтральна, слабка
позитивна та сильна позитивна) зазначаються у класі Sentiment, САА-схему якого наведено далі. Згаданий клас є
перерахованим типом даних (Enum type), множина значень якого вказується за допомогою списку констант (Enum
constant). Клас містить також поле даних sentimentScore та два методи.</p>
      <sec id="sec-6-1">
        <title>Comment (Enum representation of a sentiment score of a text);</title>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Enum type (Sentiment) &lt;Constants&gt;</title>
    </sec>
    <sec id="sec-8">
      <title>Enum constant (UNDEFINED(-1)); Enum constant (STRONG_NEGATIVE(0));</title>
    </sec>
    <sec id="sec-9">
      <title>Enum constant (WEAK_NEGATIVE(1)); Enum constant (NEUTRAL(2));</title>
    </sec>
    <sec id="sec-10">
      <title>Enum constant (WEAK_POSITIVE(3)); Enum constant (STRONG_POSITIVE(4)); &lt;Fields&gt; &lt;Methods&gt; &lt;Body&gt;</title>
    </sec>
    <sec id="sec-11">
      <title>Return (UNDEFINED);</title>
    </sec>
    <sec id="sec-12">
      <title>IF (Equal(Instance field (sentiment, sentimentScore), Variable (sentimentScore))) THEN</title>
      <p>Генератор програм системи ОДСП автоматично виконав трансляцію наведених САА-схем у мову
програмування Java.
3. Реалізація паралельної розподіленої системи за допомогою Hazelcast</p>
      <p>
        Hazelcast є платформою з відкритим програмним кодом для Java, яка використовується для побудови
кластерів та масштабованого розподілу даних [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Типовими функціями фреймворку є:
• організація обміну даними/станом серед багатьох серверів та кешування даних (розподілений кеш);
• кластерне розподілення програми та забезпечення захищеної комунікації між обчислювальними
вузлами;
• синхронізоване використання даних у пам’яті;
• розподіл обчислень між багатьма серверами та паралельне виконання задач;
• забезпечення відмовостійкого управління даними.
      </p>
      <p>Перевагою використання Hazelcast є автоматичне розгортання та управління обчислювальним
кластером: розробник не повинен передбачати окремого механізму синхронізації обчислювальних вузлів між
собою. Це гарантує ще більшу відмовостійкість, оскільки збій жодного окремого серверу не зможе призвести
до того, що система перестане функціонувати в цілому. Для комунікації між вузлами використовується
розподілений ExecutorService, який отримує на вхід екземпляри класів, що реалізують інтерфейси Callable або
Runnable. Ці представляють собою команди (з інкапсульованими всередині даними), які будуть виконані на
певному обчислювальному вузлі. Фрагмент САА-схеми такого класу наведений далі.</p>
      <sec id="sec-12-1">
        <title>Class X implements Y (public, TwitterCallable, Callable&lt;TweetWrapper&gt;, Serializable)</title>
        <p>
          &lt;Methods&gt;
Hazelcast надає дуже зручний механізм моніторингу подій, які трапляються з вузлами кластеру –
інтерфейс MembershipListener. Цей інтерфейс має три методи, що дозволяють відслідковувати додавання
нового вузла, відключення вузла та зміну атрибутів вузла [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. Саме можливість задавати значення певних
атрибутів на елементах кластеру дозволяє відділяти master-вузол від інших та динамічно змінювати конфігурацію
системи.
4. Розгортання кластеру в хмарині Amazon Elastic Compute Cloud
        </p>
        <p>
          Для розгортання системи на основі Hazelcast була обрана хмарна платформа Amazon Elastic Compute
Cloud (EC2). EC2 є веб-сервісом, який дозволяє отримати доступ до обчислювальних потужностей і
налаштувати ресурси з мінімальними затратами. Служба скорочує час, необхідний для отримання і завантаження
нового сервера [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. Для тестування кластеру в ЕС2 було замовлено 5 серверів, які мають фіксовані технічні
характеристики [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. На серверах встановлена операційна система Ubuntu Linux, доступ здійснюється за
допомогою протоколу SSH.
        </p>
        <p>Загалом Hazelcast передбачає три опції для знаходження вузлів один-одним: статична
IPадресація, multicast в локальній мережі та AWS EC2 Auto Discovery. Перший підхід не задовольняє потребу
динамічного підключення обчислювальних вузлів, а між другим та третім був обраний AWS EC2 Auto
Discovery, оскільки він є простою та зручною інтеграцією із середовищем ЕС2. Далі наведено САА-схему
методу, що відповідає за створення HazelcastInstance – основного класу фреймворку Hazelcast, який
інкапсулює в собі всі налаштування кластеру.</p>
      </sec>
      <sec id="sec-12-2">
        <title>Method annotated (HazelcastInstance, hazelcastInstance)</title>
        <p>&lt;Parameters&gt;</p>
      </sec>
    </sec>
    <sec id="sec-13">
      <title>Parameter annotated with value (accessKey, String, aws.access.key);</title>
    </sec>
    <sec id="sec-14">
      <title>Parameter annotated with value (secretKey, String, aws.secret.key) &lt;Annotations&gt; Annotation (Bean) &lt;Body&gt;</title>
      <p>
        Як бачимо, інтеграція з ЕС2 полягає у зазначенні ключа доступу та секретного ключа доступу до
платформи, які можна отримати в панелі керування хмарним сервісом. Після запуску додатку на першому
сервері Hazelcast створює кластер, що наразі складається з одного обчислювального вузла. Коли будуть
додаватись інші вузли, їх синхронізація між собою відбуватиметься повністю прозоро для розробника і
відображатиметься в терміналі. Крім того, існує можливість запуску декількох екземплярів додатків на одному сервері
– в такому випадку кожний вузол стартує на своєму власному порту. Для зручного управління кластером у
системі реалізований веб-інтерфейс, який дозволяє керувати станом кожного окремого вузла за допомогою
запитів до REST-сервісів [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
5. Тестування системи
      </p>
      <p>Для порівняння ефективності розглянутих технологій, була проведена серія експериментів: розроблена
розподілена система запускалась на одному, двох, трьох та чотирьох серверах в хмарині Amazon EC2.
Кожний сервер має двоядерний процесор Intel Xeon E52676, 2.40 ГГц. Тривалість вимірювання дорівнює десяти
секундам (повідомлення оброблювалися із використанням механізму сентимент-аналізу фреймворку
Standford CoreNLP). Результати експерименту та побудований графік подані у таблиці та на рис. 1.
Таблиця 1. Продуктивність розподіленої системи обробки повідомлень в хмарині Amazon EC2
Кількість
серверів, S
Кількість оброблених</p>
      <p>повідомлень, P
1
2
3
4
288
491
749
1310
Рис. 1. Графік продуктивності розробленої системи: залежність
кількості оброблених повідомлень P від кількості серверів S в Amazon EC2
Також система була протестована на персональному комп’ютері з восьмиядерним процесором Intel
Core i7 4702MQ, 2.20 ГГц та на вузлі обчислювального кластеру з двома чотириядерними процесорами Intel
Xeon E5405, 2.00 ГГц. Результати експерименту та побудований графік подані у табл. 2 та на рис. 2. Як видно
з наведених даних, найбільш ефективним є виконання системи в хмарині Amazon EC2 на процесорах Intel
Xeon E52676.</p>
      <p>Таблиця 2. Продуктивність розподіленої системи обробки повідомлень
з використанням різних конфігурацій апаратного забезпечення</p>
      <p>Тип
процесору
4702MQ</p>
      <p>E5405
E52676
Кількість оброблених
повідомлень
857
525
1310</p>
      <p>Рис. 2. Графік продуктивності розробленої системи в залежності від апаратної конфігурації
Висновки</p>
      <p>У роботі виконано подальший розвиток паралельної розподіленої динамічно масштабованої
відмовостійкої системи для обробки потокових даних великого обсягу. Як приклад джерела даних для обробки обрана
соціальна мережа Twitter та її потоковий API – Twitter Firehose (а саме його тестова версія Twitter Sample
Stream). Система розроблена на основі Hazelcast Framework із використанням інструментарію
автоматизованої генерації програм за високорівневими специфікаціями алгоритмів. Програмний комплекс представляє
собою динамічно масштабоване та відмовостійке кластерне рішення, придатне до розгортання в локальній
мережі або в хмарній платформі Amazon EC2. У систему додано нову функціональність, що відповідає за
сентимент-аналіз повідомлень соціальної мережі.</p>
      <p>Одним з головних надбань розробленого рішення є те, що дослідник може нарощувати ресурси для
обчислень за своїм бажанням, різної конфігурації та потужності, що дає змогу досягати бажаної швидкодії
системи. В результаті серії експериментів встановлено, що збільшення кількості обчислювальних вузлів у
кластері забезпечує значний приріст продуктивності системи.</p>
      <p>В подальшому планується оптимізація рішення на основі Hazelcast, реалізація криптографічного
захисту даних, що передаються, та низка інших покращень.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Brandwatch</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Social Listening in Practice</article-title>
          . Market Research. [Online] Available from: https://www.brandwatch.com/guide-marketresearch.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Brandwatch</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Social Listening in Practice. Social customer service</article-title>
          . [Online] Available from: https://www.brandwatch.com/customerservice-guide.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Titov</surname>
            ,
            <given-names>D.S.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Doroshenko</surname>
            <given-names>A.Yu.</given-names>
          </string-name>
          (
          <year>2015</year>
          )
          <article-title>Social networks monitoring in real-time systems</article-title>
          .
          <source>In Proc. of 5th Int. Conf</source>
          .
          <article-title>"Scientific discussion: theory, practice, innovation"</article-title>
          . Kyiv, Ukraine,
          <fpage>27</fpage>
          -
          <lpage>28</lpage>
          March
          <year>2015</year>
          . Kyiv: IOMP. p.
          <fpage>93</fpage>
          -
          <lpage>96</lpage>
          (in Ukrainian)
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Intel</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Intel Core i7-</article-title>
          3770k
          <string-name>
            <surname>Processor</surname>
          </string-name>
          . [Online] Available from: http://ark.intel.com/products/65523. [Accessed: 25th
          <year>January 2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Mamudi</surname>
            <given-names>S.</given-names>
          </string-name>
          (
          <year>2016</year>
          )
          <article-title>Charlie Munger: HFT is Legalized Front-Running</article-title>
          . [Online] Available from: http://blogs.barrons.com/stockstowatchtoday/ 2013/05/03/charlie-munger
          <article-title>-hft-is-legalized-front-running</article-title>
          .
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Titov</surname>
            ,
            <given-names>D.S.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Doroshenko</surname>
            <given-names>A.Yu.</given-names>
          </string-name>
          (
          <year>2015</year>
          )
          <article-title>The parallel distributed system for social media data streams analysis</article-title>
          .
          <source>Problems in programming. (4)</source>
          . p.
          <fpage>31</fpage>
          -
          <lpage>39</lpage>
          . (in Ukrainian)
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Hazelcast</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Hazelcast</article-title>
          . [Online] Available from: https://hazelcast.org.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Sentiment analysis</surname>
          </string-name>
          (
          <year>2016</year>
          )
          <article-title>Sentiment analysis</article-title>
          . [Online] Available from: https://en.wikipedia.org/wiki/Sentiment_analysis.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Andon</surname>
            ,
            <given-names>P.I.</given-names>
          </string-name>
          et al. (
          <year>2007</year>
          )
          <article-title>Algebra-algorithmic models and methods of parallel programming</article-title>
          . Kiev: Akademperiodika. (in Russian)
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Iovchev</surname>
            ,
            <given-names>V.O.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Mokhnitsa</surname>
            ,
            <given-names>O.S.</given-names>
          </string-name>
          (
          <year>2010</year>
          )
          <article-title>Algebra-algorithmic tools on Web 2.0 platform. Problems in programming</article-title>
          .
          <source>(2-3)</source>
          . p.
          <fpage>547</fpage>
          -
          <lpage>555</lpage>
          . (in Russian)
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Doroshenko</surname>
            ,
            <given-names>A.Yu.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Beketov</surname>
            ,
            <given-names>O.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ivaniv</surname>
            <given-names>R.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Iovchev</surname>
            ,
            <given-names>V.O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Myronenko</surname>
            ,
            <given-names>I.O.</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Yatsenko</surname>
            ,
            <given-names>O.A.</given-names>
          </string-name>
          (
          <year>2015</year>
          )
          <article-title>Automated generation of parallel programs for graphics processing units based on algorithm schemes. Problems in programming</article-title>
          .
          <source>(1)</source>
          . p.
          <fpage>19</fpage>
          -
          <lpage>28</lpage>
          . (in Ukrainian)
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Oracle</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Java documentation</article-title>
          .
          <source>The Java Tutorials</source>
          . Lesson: Annotations. [Online] Available from: https://docs.oracle.com/ javase/tutorial/java/annotations. [
          <source>Accessed: 25th January</source>
          <year>2016</year>
          ].
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Twitter</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Public streams</article-title>
          . [Online] Available from: https://dev.twitter.com/streaming/public. [
          <source>Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14. Spring. (
          <year>2016</year>
          )
          <article-title>Spring Social</article-title>
          . [Online] Available from: http://projects.spring.io/spring-social.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>The Stanford NLP (Natural Language Processing</surname>
          </string-name>
          ) Group. (
          <year>2016</year>
          )
          <article-title>Stanford CoreNLP - a suite of core NLP tools</article-title>
          . [Online] Available from: http://nlp.stanford.edu/software/corenlp.shtml.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Amazon</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Amazon EC2</article-title>
          . [Online] Available from: https://aws.amazon.
          <source>com/ec2. [Accessed: 25th January</source>
          <year>2016</year>
          ]
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Amazon</surname>
          </string-name>
          . (
          <year>2016</year>
          )
          <article-title>Amazon EC2 Instances</article-title>
          . [Online] Available from: http://aws.amazon.com/ec2/instance-types.
          <source>[Accessed: 25th January</source>
          <year>2016</year>
          ]
          <article-title>Про авторів: Тітов Дмитро Сергійович, студент факультету інформатики та обчислювальної техніки, кафедри автоматики і управління в технічних системах НТУУ “КПІ”</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          http://orcid.org/0000-0003-1607-5405, Дорошенко Анатолій Юхимович,
          <article-title>доктор фізико-математичних наук, професор, завідувач відділу теорії комп'ютерних обчислень Інституту програмних систем НАН України, професор кафедри автоматики і управління в технічних системах НТУУ “КПІ”</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          http://orcid.org/0000-0002-8435-1451, Яценко Олена Анатоліївна,
          <article-title>кандидат фізико-математичних наук, старший науковий співробітник</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>http://orcid.org/0000-0002-4700-6704.</mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          <article-title>E-mail: doroshenkoanatoliy2@gmail.com, dmytro</article-title>
          .titov@gmail.com.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>