Создание REST API на Falcon
Перевод статьи Create a scalable REST API with Falcon and RHSCL автора Shane Boulden.
В этой статье мы создадим REST API на основе фреймворка Python Falcon, потестируем производительность и попробуем его масштабировать, чтобы справиться с нагрузками.
Для реализации и тестирования нашего API нам понадобятся следующие компоненты:
Почему Falcon?
Falcon — это минималистичный веб-фреймворк для построения веб API, согласно сайту Falcon он до 10 раз быстрее чем Flask. Falcon быстрый!
Начало
Я предполагаю, что у вас уже установлен PostgreSQL (куда же мы без него). Нам необходимо создать БД orgdb и пользователя orguser.
Этому пользователю необходимо в настройках PostgreSQL в файле pg_hba.conf прописать доступ по паролю к только что созданной БД и выдать все права.
Конфигурирование базы данных завершено. Перейдем к созданию нашего Falcon приложения.
Создание API
Для нашего приложения будем использовать Python3.5.
Фунгицид ФАЛЬКОН — средство от болезней растений. Как правильно применять Фалькон
Создадим virtualenv и установим необходимые библиотеки:
$ virtualenv ~/falconenv $ source ~/falconenv/bin/activate $ pip install peewee falcon gunicorn
Создадим файл ‘app.py’:
import falcon from models import * from playhouse.shortcuts import model_to_dict import json class UserIdResource(): def on_get(self, req, resp, user_id): try: user = OrgUser.get(OrgUser.id == user_id) resp.body = json.dumps(model_to_dict(user)) except OrgUser.DoesNotExist: resp.status = falcon.HTTP_404 class UserResource(): def on_get(self, req, resp): users = OrgUser.select().order_by(OrgUser.id) resp.body = json.dumps([model_to_dict(u) for u in users]) api = falcon.API() users = UserResource() users_id = UserIdResource() api.add_route(‘/users/’, users) api.add_route(‘/users/’, users_id)
Теперь опишем модели в файле ‘models.py’:
from peewee import * import uuid psql_db = PostgresqlDatabase( ‘orgdb’, user=’orguser’, password=’123456′, host=’127.0.0.1′) def init_tables(): psql_db.create_tables([OrgUser], safe=True) def generate_users(num_users): for i in range(num_users): user_name = str(uuid.uuid4())[0:8] OrgUser(username=user_name).save() class BaseModel(Model): class Meta: database = psql_db class OrgUser(BaseModel): username = CharField(unique=True)
Мы создали два вспомогательных метода для настройки приложения ‘init_tables’ и ‘generate_users’. Запустим их для инициализации приложения:
$ python Python 3.5.1 (default, Sep 15 2016, 08:30:32) Type «help», «copyright», «credits» or «license» for more information. >>> from app import * >>> init_tables() >>> generate_users(20)
Если вы зайдете в БД orgdb, то в таблице orguser увидите созданных пользователей.
Теперь вы можете протестировать API:
$ gunicorn app:api -b 0.0.0.0:8000 [2017-12-11 23:19:40 +1100] [23493] [INFO] Starting gunicorn 19.7.1 [2017-12-11 23:19:40 +1100] [23493] [INFO] Listening at: http://0.0.0.0:8000 (23493) [2017-12-11 23:19:40 +1100] [23493] [INFO] Using worker: sync [2017-12-11 23:19:40 +1100] [23496] [INFO] Booting worker with pid: 23496 $ curl http://localhost:8000/users [, , , , , , , , , , , , , , , , , , , ]
Тестируем API
Оценим производительность нашего API с помощью Taurus. По возможности необходимо развернуть Taurus на отдельной машине.
Устанавливаем Taurus в нашем виртуальном окружении:
$ pip install bzt
Теперь мы можем создать сценарий для нашего теста. Создаем файл bzt-config.yml следующего содержания (не забудьте указать верный IP адрес):
execution: concurrency: 100 hold-for: 2m30s ramp-up: 1m scenario: requests: — url: http://ip-addr:8000/users/ method: GET label: api timeout: 3s
Этот тест будет симулировать веб трафик от 100 пользователей, с нарастанием их числа в течение минуты, и держать нагрузку 2 минуты 30 секунд.
Запустим API с одним воркером:
$ gunicorn —workers 1 app:api -b 0.0.0.0:8000
Теперь мы можем запустить Taurus. При первом запуске он скачает нужные зависимости:
$ bzt bzt-config.yml -report
После установки зависимостей отобразится наша консоль с ходом исполнения теста:
Опцию -report мы используем для загрузки результатов в BlazeMeter и генерации веб-отчета.
Наше API отлично справляется со 100 пользователями. Мы достигли пропускной способности в ~1000 запросов/секунду, без ошибок и со средним временем ответом 0.1с.
Отлично, а что если пользователей будет 500? Изменим параметр concurrency на 500 в нашем файле bzt-config.yml и снова запустим Taurus.
Хм. Похоже наш одинокий воркер не справился с нагрузкой. 40% ошибок — это не дело.
Попробуем увеличить количество воркеров.
gunicorn —workers 20 app:api -b 0.0.0.0:8000
Выглядит лучше. Ошибки еще есть, но пропускная способность увеличилась до ~1500 запросов/секунду, и среднее время отклика уменьшилось до ~270 мс. Такое API уже можно использовать.
Дальнейшая оптимизация производительности
Можно настроить PostgreSQL под железо с помощью PgTune.
На сегодня все. Спасибо, что читали!
Источник: habr.com
FalconX — тулза для центрирования иконок панели задач в Windows 10
Если верить слухам, в облегченной редакции Windows 10, анонс которой должен состояться в ближайшие месяцы, иконки панели задач будут размещены по центру как в MacOS. Возможно, в Microsoft действительно реализуют эту фишку, как говориться, поживем — увидим, те же, кто не хочет ждать, могут воспользоваться FalconX — маленькой портативной утилитой для центрирования иконок панели задач.
FalconX не единственная утилита в своем роде, но от других аналогичных инструментов ее отличает возможность настройки анимации блока иконок, перемещающихся в центр задач при запуске исполняемого файла. В настройках программки вы можете ускорить начальную или конечную скорость ускорения движения блока иконок, изменить общее время воспроизведения анимации и смещение относительно левой или правой границы.
Всего тулзой поддерживается пять типов анимации, добавление в автозагрузку Windows и быстрый перезапуск. FalconX работает с большой и маленькой, закрепленной и открепленной панелью задач, а также панелью, прикрепленной к верхней границе экрана. Исключение составляет только вертикальное положение панели, при которой иконки оказываются свернутыми. Кнопка меню Пуск, кнопка поиска и элементы системного трея не центрируются.
Желающие скачать утилиту найдут ее на сайте разработчика chrisandriessen.nl/web/FalconX.html. Там же имеется ссылка на установку программы из Магазина Windows, однако магазинная версия предъявляет повышенные требования — 64-разрядную Windows 10 не ниже 17763 . Кроме того, версия из Windows Store платная, тогда как портативная десктопная редакция распространяется бесплатно и с открытым исходным кодом.
Источник: www.white-windows.ru
FalconX
FalconX – уникальная утилита, с помощью которой вы сможете передвинуть закрепленные иконки приложений на панели задач, с привычной левой части рабочего экрана, в любую удобную вам сторону, самостоятельно задав положение значков с помощью настройки приложения.
Преимущества программы:
- Обновленный интерфейс панели задач
- Возможность выбора позиций, размещения значков приложений
- Анимированные иконки
Как установить и использовать:
Процесс установки не занимает длительного времени. Кликаем на скаченный архив и выбираем задачу «extract more», после появившегося окна, вводим пароль – «CA», без кавычек и на латинском. На рабочем столе появится иконка установленного приложения.
Чтобы внести изменения, вам необходимо открыть область уведомлений, закрепленную на панели задач, кликнуть на задачу «position» и ввести трехзначное число – определяющее положение значков на панели. Также, в программе задана анимация для закреплённых иконок. Кликаем по задаче «animations» и выбираем один из предложенных вариантов.
![]() ![]() ![]() |
Ссылка на Microsoft Store: https://www.microsoft.com/p/falconx-center-taskbar/9pcmz6bxk8gh
Источник: vsthemes.org
FalconX — размещаем иконки по центру панели задач
По слухам, в новой легковесной операционной системе Microsoft кнопки панели задач размещаются по центру, а не жмутся к её краям. FalconX поможет подвинуть их и в текущей версии Windows 10.
Приложения и программы
| 31 июля 2019 в 14:36
FalconX служит для размещения кнопок приложений по центру панели задач с возможностью тонкой настройки положения и анимации их движения. Программа поддерживает работу с большой и маленькой, закреплённой и откреплённой панелью задач, с группируемыми и отдельными кнопками. Нельзя ею воспользоваться только при вертикальном расположении панели на экране.
В настройках программы можно выбрать один из пяти видов анимации иконок (кнопок), задать её скорость в миллисекундах. По желанию пользователя, кнопки могут центрироваться между панелями инструментов, есть возможность их сдвинуть влево или вправо с точностью до пикселя.
Распространяется FalconX на бесплатной основе, через Microsoft Store и официальный сайт . Исходные коды программы открыты, язык интерфейса в текущей версии доступен один — английский.
Источник: www.wincore.ru