Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
from fastapi.concurrency import run_in_threadpool
async def execute(data: DataRequest) -> DataResponse:
try:
result = await run_in_threadpool(sync_function, data)
return DataResponse(data=result)
except Exception as e:
return DataResponse(
error=str(e),
success=False,
)
В общем работает нормально. Для всех вызовов под капотом используется общий тредпул, всё работает предсказуемо.
Но потребовалось изменить количество запускаемых в пуле потоков (по умолчанию создается 40 воркеров).
Так как дело происходит с FastAPI, делается это через lifespan используя настройки anyio:
import anyio
@asynccontextmanager
async def lifespan(app: FastAPI):
limiter = anyio.to_thread.current_default_thread_limiter()
limiter.total_tokens = 100
yield
# если вдруг нужно вернуть обратно
limiter.total_tokens = 40
Зачем менять количество воркеров?
- уменьшить, если оперативки мало (один тред занимает ~8мб)
- увеличить чтобы выдержать нагрузку
Если есть предложения получше при тех же вводных - предлагайте😉
#async
👨💻 Attacking MongoDB.
• MongoDB — это кроссплатформенная документо-ориентированная система управления базами данных. Относясь к категории NoSQL, MongoDB отказывается от традиционной таблично-ориентированной структуры реляционных баз данных в пользу JSON-документов с динамическими схемами, что делает интеграцию данных в приложениях более быстрой и простой.
• Поговорим о защищенности MongoDB. На самом деле MongoDB безопасна в использовании, если вы знаете, что искать и как это настраивать.
• Enumeration:
➡Nmap MongoDB Brute Force Attack;
➡Metasploit MongoDB Login Scanner;
➡Shodan Search for MongoDB Instances;
➡Manual MongoDB Interaction via PyMongo;
➡Common MongoDB Commands;
➡Automating MongoDB Enumeration with Nmap.
• Brute Force:
➡MongoDB Login Methods;
➡Checking for MongoDB Authentication Using Nmap;
➡Manual Brute Forcing;
➡Lack of Authentication in MongoDB Instance.
• Disable Unused Network Interfaces;
• Enable Access Control (Authentication);
• Enable SSL/TLS Encryption;
• Disable HTTP Interface;
• Enable Audit Logging:
➡Set Appropriate File Permissions;
➡Disable Unused MongoDB Features;
➡Enable Firewalls and Limit Access to MongoDB Ports.
• Exploiting Default Admin Users;
• Exploiting Misconfigured Role-Based Access Control (RBAC);
• Leveraging File System Access via MongoDB;
• Leveraging MongoDB API and Insecure Bindings;
• Misconfigured Backup Systems.
#MongoDB#devsecops
https://github.com/MongoEngine/django-mongoengine
THIS IS UNSTABLE PROJECT, IF YOU WANT TO USE IT - FIX WHAT YOU NEED
Right now we're targeting to get things working on #Django 1.9
#mongodb
#databases#MongoDB
💼
Learning MongoDB
Get started with MongoDB. Learn how to use this popular nonrelational database to power your full-stack development workflow.
⏳2h 44m
🗣Justin Jenkins
🔗Link
-----
Main channel:@repo_science
Coupons: @freecoupons_reposcience
-----
Awesome MongoDB, a curated list of resources, libraries, tools and applications.
#resources#list#mongodb#database
@thedevs
https://kutt.it/awesome-mongodb
http://mongoengine.readthedocs.io/en/latest/index.html
#MongoEngine is an Object-Document Mapper, written in #Python for working with #MongoDB. To install it, simply run
#Django