пятница, 8 февраля 2019 г.

Selenoid/Moon

      Раньше у людей отвечающих за QA инфраструктуру было любимое развлечение - по приходу в новую компанию руками разворачивать инфраструктуру для Selenium автотестов. Сделать это хорошо довольно сложно а времени на поддержку инфраструктурных проектов вечно не хватает. Поэтому веселье обычно растягивалось минимум на пол года. Сейчас похоже лавочку прикрыли.  С приходом кубера в широкие массы развернуть Selenoid можно не запачкав ручки - все за вас сделает Moon. По крайней мере обещает что сделает :-)

вторник, 5 февраля 2019 г.

CLR via C# by Jeffrey Richter

       Наконец-то дочитал книгу CLR via C# by Jeffrey Richter. Скажу честно - дочитал через силу. Прям заставлял себя дочитывать.  В книге очень много воды и сомнительных рекомендаций по оптимизации.  Временами автор даже сваливается в какие-то внутри мелкософтовские разборки(как например при обсуждении EAP - event based asynchronous pattern).  
      В общем из плюсов - очень много информации по .NET CLR в одном месте, объяснены некоторые интересные аспекты работы .NET CLR. Из минусов - очень много воды, объяснения очевиднейших вещей, пересказывания мануалов. В общем временами читается как инструкция к стиральной машинке. 
        Если говорить о том мнении которое я составил о C# после прочтения этой книги: C# и его runtime писались с оглядкой на Java, и они всегда старались сделать немного лучше чем сделано в Java.  Иногда это получалось, но в некоторых случаях Java выигрывает за  счет открытости платформы и того что более качественные идеи рождаются и реализуются в community. 
     Параллельное программирование на .NET никогда не будет таким же эффективным как в Golang или другими языками где идея легковесных потоков была заложена с основания языка. Причина этого не в технологиях - я уверен что в microsoft достаточно компетенции написать scheduler легковесных потоков  а в legacy - то что раньше было возможно запускать потоки операционной системы с разными контекстами (правами, приоритетами и тд). И каждый раз при переключении на другой таск ThreadPool обязан все эти огромные структуры данных копировать. Добавьте к этому поддержку иерархической системы тасков которая требует большого количества памяти и хранение не перехваченных exceptions. 
       В общем отказаться от поддержки всего этого они не могут, а без этого просто взять и вкрутить планировщик легковесных потоков в существующий runtime будет очень трудно/не возможно.

среда, 30 января 2019 г.

Thanos

       Сегодня открыл для себя Thanos - инструмент для масштабирования Prometheus через federation (не знаю русскоязычного аналога этого глагола).  В свое время когда мы строили мониторинг Lazada на Prometheus нам очень не хватало инструмента подобного Thanos. Prometheus превосходный инструмент, но он не поддерживает HA из коробки, да и масштабируется только через ручное шардирование нагрузки на несколько истансов. По сути все работало превосходно пока все метрики помещались на один сервер и его мощности хватало и на запись собираемых метрик и на обработку входящих звапросов. Дальше начинались танцы с бубнами. 
         Сейчас судя по всему это уже позади.  Если говорить по простому: Thanos это инструмент который позволяет поставить рядом два Prometheus сервера и построить высоко доступный (HA) сервер мониторинга.  Также он позволяет масштабировать Prometheus через федерирование.  Дело осталось за малым - чтобы это все работало так же красиво как об этом пишут его создатели. 

вторник, 15 января 2019 г.

Как работает ApplePay

     Не так давно мне пришлось вплотную столкнуться с ApplePay, хотя вообще я с платежками давно уже не работаю. Попытался понять как работает ApplePay и с удивлением обнаружил что  нормального технического описания нет. Есть куча маркетингового булшита и отдельных догадок.  Единственное что я нашел - https://medium.freecodecamp.org/how-apple-pay-works-under-the-hood-8c3978238324  Это тоже не официальная документация, но выглядит вполне правдоподобно.
       Если в двух словах - когда вы добавляете карточку в ApplePay, Apple валидирует данные и отправляет к МПС(Visa/MasterCard) запрос на генерацию секретного токена(DAN - device account number), который по сути представляет "фейковый" номер кредитной карточки. Этот фейковый номер запоминается в устройстве. Во время транзакции iphone "прикидывается" этой фейковой карточкой и NFC терминал передает этот номер карты в МПС. МПС подменяет фейковый номер карточки реальным номером карточки добавленной ранее в ApplePay. Дальше транзакция проходит как обычно.