Pull to refresh
14
0
Максим Алексеев @malexejev

User

Send message

Соотв. по КИК отчитываться в РФ тоже не надо, тк это не компания, верно?

Точно. Ок, спасибо за информацию.
Например, ввели патентную систему налогообложения и добавили туда ИТ-шные ОКВЭД.

Это, насколько я понимаю, только в некоторых регионах. Я недавно пытался по этому длинному списку понять какая у IT в Москве ситуация на 2016 год, и похоже у нас патентов еще нет. Поправьте, если ошибаюсь.
Интересующимся темой NoSQL вообще и Cassandra в частности рекомендую митап, который я организую в эту субботу — www.meetup.com/bigmoscow/events/135429192/.
К нам приедет русскоговорящий сотрудник DataStax, которому можно будет задать все свои вопросы, а также будут другие нескучные спикеры. Вход свободный, регистрация на сайте ивента обязательна.
А трансляция лекции будет? Если нет, то где можно забрать запись?
Проблема в том, что выразить это в Maven нельзя никак. Можно сказать конкретно модулю E: «ты думал у тебя есть зависимость на D? Так вот, ее нет». Это хороший выход, конфликта больше нет, D2 в classpath, win. Но это решение совершенно не масштабируемо. Что если от D1 зависят десятки артефактов? На разных уровнях транзитивности?

Можно хоть на весь проект. maven-enforcer-plugin

Пример наведения порядка «сквозняком» по всему проекту:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>1.1.1</version>
                <executions>
                    <execution>
                        <id>enforce-prerequisites</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <fail>true</fail>
                            <rules>
                                <requireJavaVersion>
                                    <version>${java.version}</version>
                                </requireJavaVersion>
                                <bannedDependencies>
                                    <searchTransitive>true</searchTransitive>
                                    <excludes>
                                        <!-- Prohibits Log4J, commons-logging, all SLF4J bindings -->
                                        <exclude>org.slf4j</exclude>
                                        <exclude>commons-logging</exclude>
                                        <exclude>log4j</exclude>
                                        <!-- Prohibits servlet-api -->
                                        <exclude>javax.servlet:servlet-api</exclude>
                                        <!-- Prohibits libthrift by default -->
                                        <exclude>org.apache.thrift:libthrift</exclude>
                                        <!-- Prohibits old javassist, should be org.javassist -->
                                        <exclude>javassist:javassist</exclude>
                                        <!-- Prohibits old aspectj, should be org.aspectj -->
                                        <exclude>aspectj:aspectj</exclude>
                                        <!-- Prohibits Spring Framework by default -->
                                        <exclude>org.springframework</exclude>
                                    </excludes>
                                    <includes>
                                        <!-- Allow exact version of SLF4J API and migration bindings -->
                                        <include>org.slf4j:slf4j-api:${slf4j.version}</include>
                                        <include>org.slf4j:jcl-over-slf4j:${slf4j.version}</include>
                                        <include>org.slf4j:log4j-over-slf4j:${slf4j.version}</include>
                                        <include>org.slf4j:jul-to-slf4j:${slf4j.version}</include>
                                        <!-- Allow exact versiob of libthrift -->
                                        <include>org.apache.thrift:libthrift:${libthrift.version}</include>
                                        <!-- Allow exact version of Spring -->
                                        <include>org.springframework:*:${spring.version}</include>
                                    </includes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Ок, спасибо за подробный ответ )
IMDG опенсорсные тоже есть — Hazelcast и Infinispan, например. И наконфигурять можно так, что кластер будет автодискавериться автоматически. Но если задачи горизонтально скейлить одну карту нет, то оно дейсвительно не надо.
Тема с SSD напомнила давнюю историю с Eve Online, которые тоже полагаются вовсю на реляционный SQL Server, и перенесли его на RAMSAN-овский SSD от Texas Memory Systems. Это промышленный SLC SSD в стоечном исполнении и с контроллером на FPGA. Было это, кажется, в 2007-м. Так что для геймдева подход похоже работает неплохо.

Андрей, а в сторону In-Memory Data Grids для бекенда не смотрели? Мне кажется, для геймдева это может быть интересный вариант, чтобы преодолеть вертикальное ограничение — максимальное количество юзеров на одну тачку, из-за того что вы вынуждены юзать только локальные взаимодействия на одной карте, комнате или что там у вас является аналогом партиции.
С внешним поллером на Java (почему не shell / Python / Ruby / Tcl / etc?) и самопальным агентом вы конечно намудрили, простой и проверенный мониторинг для Java делается так:

JVM & application metrics 
=> JMX 
=> Jolokia JVM Agent (exposes all JMX via HTTP/JSON REST API) 
=> HTTP data source in any Monitoring System

Мониторить прямо через JMX обычно неудобно т.к. экстеншены для систем мониторинга отсутствуют или сырые (Zabbix не пробовал) и RMI имеет врожденные проблемы с файрволами. Это у вас написано.

Jolokia agents — www.jolokia.org/agent.html

AppDynamics упомянутый выше для таких задач overkill, и стоит довольно ощутимых денег (порядка $5000 per JVM, кажется annual). NewRelic намного дешевле, но тоже overkill для таких простых случаев.

А так — полезная статья. Главное в бизнесе — результат :)
64-битная JVM в Linux и Windows

т.е., в принципе, ничего не работает. к сожалению.
Посмотрим еще, как оно обернется при встрече )
Кстати, Владимир, на прошлой или позапрошлой J1 я у вас спрашивал после доклада о GC free логгере, связывались ли вы с ребятами из Logback по поводу полученных результатов.
Я смотрю, вы снова выступаете с тем же докладом — как за год/два прогресс у Logback в плане перфоманса и у вас в плане коммуникаций с девелоперами? )
допустим, инвестор дает 5 Мио за 33%. Это значит, что он оценил стартап в 20 миллионов

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

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

Ну и раз уж вы тоже используете Кассандру в реальном проекте, у меня есть довольно много практических вопросов — могу писать их потихоньку сюда или еще куда-нибудь. Вам как удобнее?
Ага, знакомая картина. Тогда часто возникает другой вопрос.
Вот допустим у нас стоит ферма апп-серверов, которые держат tcp (ws, etc) соединения с клиентами через ELB. И дальше где-то на бекенде возникает необходимость послать сообщение клиенту X. Как определяете сервер, который нужно пнуть чтобы сообщение ушло этому клиенту?

Сам апп-сервер может роутить месиджи любым клиентам, которые сейчас к нему приконекчены — держит in-memory ConcurrentMap и нет проблем.
А какие best-practices вы знаете, чтобы роутить месиджы к самим апп-серверам?

На моем конкретном проекте этих краевых серверов мало, и я делаю broadcast запрос по ним в рамках одного региона Amazon. Но наверняка есть варианты лучше.
А как обеспечиваете HA на уровне самого ELB? В случае, если сам ELB упал.

Сами инстансы, которые стояли за ним, могут быть или живы, или мертвы (допустим, отрубился весь регион и мы хотим переключить его клиентов на другие континенты).
Для этого случая там стоит 60 сек. Все есть в их документации.
А как балансируете вебсокеты?
ELB же не умеет делать sticky balancing для TCP/SSL (i.e. ws/wss).
Не очень понимаю цель перевода статей с английского языка, ну да ладно.

Я последние полторы недели делал уведомления для APNS и GCM. Добавлю свои 5 копеек.

1. mobiforge.com/developing/story/programming-apple-push-notification-services такая же статья про настройку от и до. Только больше кода на Objective C и есть какой-то текст про написание собственно провайдера.

2. Есть засада с сертификатами Entrust, которые использует APNS. Копипаста из доков:
Note: To establish a TLS session with APNs, an Entrust Secure CA root certificate must be installed on the provider’s server. If the server is running OS X, this root certificate is already in the keychain. On other systems, the certificate might not be available. You can download this certificate from the Entrust SSL Certificates website.

3. На самом деле, у APNS есть два способа обратной связи
— Feedback service/ Ее надо поллить раз в час… день на предмет inactive devices — устройств, на которые пуши стабильно не доходят. Обычно это означает, что приложение с девайса уже удалено. Такие токены надо вычищать из своего хранилища, в противном случае APNS теоретически может применить санкции за abuse пуш сервиса.
— Error detection (для Enhanced format) — все исходящие сообщения пронумерованы, в ответ прилетают пакеты-нотификации с кодами ошибок.

Оф. документация на оба момента — goo.gl/rwO8t

4. Мой бекенд разработан на Java/Scala, APNS провайдер тоже писался на Java. Как ни странно, ситуация с клиентскими библиотеками для APNS аховая. Собственно, их всего две — github.com/notnoop/java-apns (Java-APNS) и code.google.com/p/javapns/ (JavaPNS).

Последняя отвратительно написана и энкораджит откровенно плохой стиль кодирования. Можно просто поглядеть исходники и все сразу станет ясно.

Java-apns написана отлично и не тянет лишних депенденций. Проблема с ней — автор отошел от дел полтора года назад, версию 2.0 в мавен не зарелизил и по сути проект не поддерживается. Последняя доступная в maven central версия имеет отровенные баги — ну, например, в конфигурации с тред-пулом не работает error detection. Тем не менее, качество кода отличное и исправление занимает минуты. Многие компании форкнули либу и используют в работе со своими мелками доделками. В пул-реквестах на гитхабе все это хорошо видно.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity