LINUX.ORG.RU

3
Всего сообщений: 65

job сервер

Есть задача организовать отложенную запись данных(чтобы endpoint’ы не захлёбывались.

Как пример: Есть chat-data, который имеет апи записи и чтения сообщений. Есть entrypoint chat, который предоставляет клиенту возможность писать другому пользователю сообщения и читать сообщения, которые адресованы этому пользователю.

Если писать и читать сообщения напрямую, есть несколько узких мест:

  1. при большой нагрузке chat-data и chat могут захлёбываться
  2. при отключении chat и\или chat-data сообщения не будут записаны в базу

Это просто пример, это касается всех действий пользователей, которые выполняют какие-то действия(события). Как это пофиксить? Скорей всего, необходим какой-то job-сервер, в который будут прилетать job’ы. Эндпоинт или entrypoint(?) подписывается на rabbitmq очередь, в которой он будет получать события «есть задача». Далее эндпоинт или энтрипоинт идет на job-сервер, блокирует записи, над которыми работает и начинает выполнять job’ы. Допустим в 8 потоков(настраиваемо должно быть). И выполняет их до тех пор, пока их не будет ноль. После выполнения - производится удаление job’ов.

Т.е получается, что chat chat-data могут быть отключены. При этом сообщения падают в job-сервер. Как только chat chat-data включаются, они заходят на job-сервер и начинают оттуда брать job’ы. Это правильно архитектурно? Или как-то по-другому надо делать?

Вопрос по job-серверу. Rabbitmq позволяет изменять messag’и? Т.е я делаю queue, туда прилетают job’ы. В отдельном queue прилетают нотификации о наличие job’ов. Эндпоинт или энтрипоинт выбирает несколько сообщений, блокирует их и начинает выполнять. По окончанию - удаляет их из queue. Rabbitmq позволит так делать? Или делать отдельный job-сервер с апи добавления задач и записи их, скажем, в postgresql?

 , , ,

bryak ()

Помогите с написанием скриптов на Bash

Пишу bootstrap-скрипты на Bash, которые

1) из дистрибутива делают chroot [CRUXSTRAP: в мире полезных утилит прибыло, оцените]

2) из chroot делают образ типа squashfs или любой другой, хоть tar-архив

3) скрипт который создаёт initramfs образ, опционально рядом кладёт образ с системой [Загрузка любого дистрибутива в RAM]

4) и скрипт, который всё это упаковывает в ISO, который могёт в BIOS/UEFI загрузку

такой инструментарий, с которым любой подпивасный васян в одну комангду может собрать свою загрузочную бубунту с голыми тачками на обоях. вот.

всё это оттестировано на железках и виртуалках, работает, и мне хотелось бы как-то теперь всё упорядочить, но не знаю как, поэтому взываю к помощи ухо-горло-носа. чтобы не стыдно было поделиться с вами.

поделитесь, какими вы вообще видите названия и метод использования этих скриптов?

ну потому что, можно сделать так, чтобы вообще было типа

dd if=$(mkbootable $(mkinitramfs $(mkchroot $(mktemp -d)))) of=/dev/sdb

забано, но сомнительно. не? а может через bash pipe? а может стандартные mk... --arg --arg --arg?

поделитесь мнением, какие вы вообще желали бы видеть опции использования в таких вот скриптах.

спасибо.

 , ,

Spoofing ()

Борьба со сложностью в программировании.

Подскажите пожалуйста, какие вообще бывают способы для борьбы со сложностью разрабатываемой системы?

  • ООП?
  • Шаблоны проектирования?
  • Декларативный подход?
  • Когда стоит применять конечные автоматы?
  • Когда стоит применять метапрограммирование?
  • Когда стоит применят композицию?
  • и т.д.

Я просто запутался если честно, в программировании есть столько интересных методов, но я не нашёл пока книги, где бы мне рассказали, какой метод лучше выбрать и как построить простую архитектуру программы, чтобы потом она меня не сожрала свой сложностью.

 , , ,

mag1ck ()

Перенос Debian на комп с другой архитектурой процессора

У меня есть ноут с 64 битным процессором Intel на который я когда то установил Debian и расставатся с этой ОС пока не намерен. Хочу сменить ноутбук и перенести на новый ноут свой Debian со старого ноутбука. Но вот вспомнил такие вещи как архитектура процессора. На сайте Debian есть куча ISO образов для разных архитектур, а я в этом деле не силен, гуглирование этого вопроса не дало полного просветления. Например я ранее скачал и установил себе образ для архитектуры AMD64 который без проблем работает на моем процессоре от Intel. Собственно хотел бы задать несколько вопросов: Правильно ли вообще устанавливать образ Debian AMD64 на комп с процессором Intel или лучше было другой образ устанавливать? Что будет если я перенесу свою ОС на комп с другой архитектурой процессора? Будет ли она вообще работать, загружаться, глючить и т.д.? Какие могут быть подводные камни при переносе системы на другой комп?

 , , , ,

MRX256 ()

Анлицизм или Translit в именах переменных?

Как вы считаете как правильнее задавать названия для переменных, функций, классов, интерфейсов и т.д.? Очень часто вижу людей которые пишут например так:

Вместо:

coming = 1205
consumption = 654

Пишут:

# приход
prihod = 1205

# расход
rashod = 654

Или

class Animal:
  def habitat(self):
      speak_str = 'Hello from Animal'
      print(speak_str)

class Dog(Animal):
    pass


bark = Dog()
print(bark.habitat())
class Zhivotnye:
  def mesto_obitania(self):
      speak_str = 'Hello from Animal'
      print(speak_str)

class Sobaki(Zhivotnye):
    pass


layka = Sobaki()
print(layka.mesto_obitania())

Вы так пишите иногда, когда не находите в своем словарном запасе английские слова? Мне кажется это общая проблема для не англоговорящих стран.

 , ,

Deleted ()

Перспективы для б.аналитика или архитектора

Привет, камрады!

Устраивался в одну компанию помощником архитектора. Но старший товарищ свинтил, пришлось занять его место. Прошёл год, проект поднят, документация написана, требования не забыты, бэкенд и клиентов переписывать не пришлось.

Наверное, я молодец, хотя никто достаточно опытный мою работу не оценивал :)

Мне хочется роста. Что можно делать дальше, в пятилетней перспективе?

Есть идейка пойти в новое место, где настоящие архитекторы научат работать.

Есть идейка постепенно брать на себя организаторские функции.

Или же поехать в условную Германию учиться инжинирингу и там будет видно.

 ,

lochness ()

Архитектура (правильно ли я делаю)

Есть XML-файлы, которые парсятся и превращаются в DOM-объекты. Есть «модельки», которые умеют работать, каждая со своей частью DOMа и перестраивать его.

Иерархия (не наследования) управляющих объектов такова («сверху» в глубину по порядку):

1) App — загружает/сохраняет XML документы (можно открывать несколько).
2) XmlDocument — чтение и сохранение, содержит объекты DomDocument, rootElement и все основные(!) «модельки» (вне зависимости от глубины вложенности обслуживаемых ими данных).
3) Все эти «модельки» — добавляют, удаляют, модифицируют DOM-узлы.

Это выглядит сносно.

Такой кухней нужно как-то управлять с кнопочек и менюшек. Мой вопрос заключается в следующем:

По вашему, КТО должен ловить команды прилетающие с гуя?

а) App/XmlDocument (дёргая затем нужные модельки)?

б) Сами модельки?

в) Всё херня — переделывай. Надо так: ...

Сейчас наговнокодил смешанно, дёргаются все почуть и по всякому. И мне это не нравится, если продолжу в таком же духе, чую — запутается всё.

Аргументируйте, пожалуйста, свой ответ. Или можно, например, рассказать историю успеха (у нас было так, сделали вот эдак и оно хорошо встало).

annulen, i-rinat, EXL, RazrFalcon и, конечно же, многоуважаемый анонимус.

 , ,

deep-purple ()

Проблемы при установке программ

когда пытаюсь через терминал скачать что-то, или обновить репозиторий то выдает: Пропускается получение настроенного файла «main/binary-l386/Packages», так как репозиторий «https://dl.winehq.org/wine-builds/ubuntu cosmic InRelease» не поддерживает архитектуру «l386»

help! Я новичок!

 , ,

GamagerLi ()

Как мне написать SAAS?

Есть программа которая работает как SPA (Single Page Web Application). Бекенд - java servlet, который запускается с помощью jetty и пишет результаты своей работы с помощью hibernate в базу данных. Теперь стоит задача сделать из этого SAAS - т.е. сайт где клиент заводит личный кабинет, проплачивает, и получает доступ к этому приложению. На чем это проще всего написать? Нужно чтобы если приложение падает у одного клиента, другие этого не замечали. Как сделать? Пускать по одному jetty на каждого клиента или есть какие-то более другие решения? Помогите, первый раз такое делаю не в зуб ногой во всем этом

 , ,

mio ()

Архитектурообразующие принципы для категории кейзов

Допустим, у нас есть приложение, логика которого очень завязана на вызовы самых разнообразных сервисов (бд, очереди, API всех сортов, etc). Завязана настолько, что кажется, будто не надо выделять в приложении ядро — собственной доменной логики почти нет. Ограничивается кейзами `взял — проверил — взял где-то ещё, и ещё — проверил — отправил`.

Т.е. можно это рассматривать как умный брокер сообщений с вкраплениями логики.
Или лучше даже как https://ru.wikipedia.org/wiki/Манифольд

И получается такая инверсия — доменная логика зависит от всех апи-биндингов, а они, собственно, не зависят от ядра.

И это никак не укладывается в моей головушке, ощущение что я делаю что-то не так.

Может есть какие-то подходы для сего? Возможно, мне нужен этот ваш data driven development, но я что-то не очень понимаю без примера что это такое.

Собственно, преследуемые цели:

  • Разработка должна хорошо распараллеливаться
  • Структура должна по максимум сокращать время понимания кода и помогать интуитивно находить где какая логика находится
  • Удобное тестирование доменной логики

* под термином `ядро` подразумевается код, содержащий только доменную-логику, который требует на вход реализации интерфейсов, которые защищают его от внешнего отвратительного мира

 ,

oxo ()

Как достучаться до инстанса производного класса QGuiApplication? (qApp/qGuiApp не работают)

Для того, чтобы не таскать по всему приложению вытаскивание через extern глобальных объектов (всякие синглтоны с наборами конфигурирующих данных):

extern GlobalParameters globalParameters;
extern FixedParameters fixedParameters;
extern AppConfig appConfig;

... я решил сделать один объект (назовем его ядро) и все эти синглтоны поместить в него как включение.

Но это решение все равно будет требовать extern ядра в тех файлах, где нужны данные:
extern Core core;

Я решил сделать более правильно: надеясь на макрос qApp, я написал вот такой класс:
class App : public QGuiApplication
{
public:
    App(int &argc, char **argv);

    Core core; // Дополнительное поле, содержит ядро
};

И создаю приложение уже на основе такого класса:
App app(argc, argv);

Я думал, что к объекту core смогу обращаться в любом месте программы вот так:
qApp->core

Но нет, выяснилось, что макрос qApp возвращает тип QGuiApplication *, а у этого типа, естественно, нет поля core.

Вопрос: каким методом можно таскать по всему Qt-коду ссылку на ядро (не передавая его во все методы), и не помещая ядро в глобальную область видимости с последующим extern?

 , ,

Xintrea ()

Архитектура предприятия на серверах linux

Добрый день. Подскажите по опыту как правильно планировать архитектуру предприятия. Понятно, что все индивидуально и зависит от требований и железа итд. Как правильно разносить сервисы по железкам, может быть для каких сервисов поднимать отдельную железку...Что желательно предусмотреть. Допустим предприятие небольшое и требуются вот такие сервисы: 1)1С+PostgreSQL 2) Mail(Zimbra) 3) VPN 4) FileServer 5) FTP 6) VoIP (Asterisk) 7) Proxy 8) DHCP 9) DNS 10) Backup системы или отдельных сервисов Пробовал поискать инфу, но особо ничего не нашел. Может просто укажите где почитать и подчерпнуть информацию.

Заранее благодарен.

 

vadim55_242 ()

Помогите найти книгу по Архитектуре компьютера

Помогите найти книгу по Архитектуре компьютера. Может кто знает, она не очень популярна, автор, если не ошибаюсь, Пасечник. Может кто знает, подскажите пожалуйста. Я искала в инете, но этого автора не нашла, может похожая фамилия, но мне запомнилось как Пасечник.

 

Olesya2000 ()

Теория архитектуры приложения на практике

Делаю приложение на pyqt + бд, в первой версии столкнулся со сложностью системы. Сейчас стараюсь переписать по правилам low cohesion high coupling и другим правилам хорошей архитектуры. Проблем уменьшилось, только всеравно некоторые правила нарушаю. В pyqt при событии(нажатии на кнопку) появляется список где должны отобразиться данные из бд, и так получается что в любом случае в файлах интерфейса приходится обращаться к бд хоть и через обертки. Плюс чем дальше тем больше будут обращений куда интерфейсу лазить по правилам хорошего кода влазить не стоит. Вопрос, как построить архитектуру более правильно?

Пример:

class Window(QMainWindow):
    def __init__(self):
       var = None
       self.button.triggered.connect(self.action)

     def action(self):
         self.accessDb() #????

 , ,

ferz ()

Архитектура database API класса

Есть приложение на питоне, использует psycopg.

Есть класс для работы с базой, который инкапсулирует весь SQL код и предоставляет API. В частности, там есть метод для создания схемы, есть методы для чтения и записи определённых данных в/из базу. Условно это выглядит как-то так:

class Database:
    def __init__(self, dsn):
        self.db = psycopg2.connect(dsn)

    def CreateSchema(self):
        self.db.cursor().execute("CREATE TABLE foo ...")
        ...

    def GetFoo(self, id):
        cur = self.db.cursor()
        cur.execute("SELECT...JOIN...JOIN...FROM SELECT(...)...GROUP BY...ORDER BY)

        return [ MyFooObject(a=row[0], b=row[1], c=row[2] for row in cur.fetchall() ]

Этот класс уже разросся на несколько тысяч строк, поскольку методов API накопилось много, посему вопрос: какие best practices есть по разбивке его на небольшие части? Навскидку придумывается только что-то такое:

class FooAPI:
    def __init__(self, db):
        self.db = db

    def Get(self, id):
        self.db.cursor()
        cur.execute("SELECT...JOIN...JOIN...FROM SELECT(...)...GROUP BY...ORDER BY")

        return [ MyFooObject(a=row[0], b=row[1], c=row[2] for row in cur.fetchall() ]

class Database:
    def __init__(self, dsn):
        self.db = psycopg2.connect(dsn)

    def GetFooAPI(self):
        return FooAPI(db)

но как-то это топорно.

PS. ORM, естественно, не предлагать.

 , ,

slovazap ()

Хранить кучу террабайт - архитектура.

Есть несколько серверов которые эффективно обрабатывают данные (видеопотоки).

Результат нужно куда-то записывать (за месяц набегает 750ТБ)

Вариант 1. На каждый сервер воткнуть максимум HDD и писать прямо на него. Есть ли ограничения на серверы, можно ли на сервер втыкать много жестких дисков? Какой провайдер хостинга это позволяет? Кто будет менять эти диски если они будут выходить из строя?

Вариант 2. Иметь какое-то отдельное хранилище с множеством жестких дисков в которое будут писать сервера-обработчики. При этом достаточно иметь 4 сервера-обработчика, а хранилище уже пусть само разбирается как куда что писать.

Как делают обычно люди, какую архитектуру строят? У меня нет админского опыта.

Идеально сделать как предлагает Amazon - несколько тачек EC2 и одно большое умное S3. Но Amazon получается дорого, хотим повторить это в колокейшн и платить админам, а не амазону.

 , , ,

JANB ()

Дайте мануал по client-side сайтам на JavaScript

Желательно на JQuery

Привет. Делаю сейчас одно приложение с гуйнёй на вебе. Начал делать на Джанге, да вот беда, понял что не хочется возиться с джанговкой идеологией форм и ввода данных. Захотелось вот написать прикладуху на яваскрипте а на сервере только простейший бэкенд оставить, вынеся всю логику на клиента.

Но опыта такой работы, даже приблизительного,у меня нету.

Всвязи с этим вопрос - что почитать про JS Client-Side сайты? Общая концепция, экземплы, туториалы?

 , , , ,

pup_kin ()

слово есть, а опы нет. Или наоборот

После прогулки по Ростову-на-Дону в поезде мне плохо спалось - не так легко спать на боковушке, если ты не помещаешься в неё по длине, да ещё и чемодан с ноутбуком надо сторожить.

И вот мне в полусне явился такой образ. Город. В нём улицы. Если ехать по улице, то асфальт, с точки зрения реализации, лежит безшовно. А ведь город разбит на районы и это, своего рода, архитектура.

О чём учит нас этот пример? Мне тогда показалось, что он нас чему-то учит, например, тому, что архитектура может существовать на логическом уровне, а на физическом всё устроено без швов. Скажем, интерфейсы (в смысле Явы) - это видимый шов. Интерефейс - это запись с указателями на функции. А вот в городе, есть же интерфейс между соседними районами. Как он выглядит в случае асфальта? Видимо, он заключается лишь в допустимых процедурах перекладки асфальта (согласование с соседями и т.п.)

Сейчас мне это не кажется значимым, но может быть, у вас возникнут какие-то мысли на эту тему. Пишу сейчас, потому что скоро уже совсем забудется.

Перемещено leave из development

 ,

den73 ()

ARM DynamicIQ

Новость вот: http://pcworld.com/article/3183150/mobile/arms-dynamiq-is-key-to-catching-up-...

Технология ARM DynamIQ позволит создавать вычислительные кластеры, состоящие из совершенно разных процессорных ядер

Компания ARM сегодня представила технологию DynamIQ. По словам самой ARM, DynamIQ — монументальный сдвиг в многоядерной архитектуре для отрасли. Также это основа будущих процессоров Cortex-A. Проще говоря, в ближайшем будущем эта технология станет столь же распространённой, сколь распространены однокристальные системы архитектуры ARM.

Если точнее и проще, DynamIQ — это развитие технологии big.LITTLE. Напомним, технология big.LITTLE, появившаяся в 2011 году, позволила разработчикам однокристальных систем создавать процессоры из нескольких кластеров. Часть из них могла состоять из энергоэффективных ядер (к примеру, Cortex-A53), а часть включать высокопроизводительные (к примеру, Cortex-A73).

Технология DynamIQ позволяет создавать кластеры, включающие совершенно разные процессорные ядра. То есть процессор может включать один, два или более кластеров, которые будут содержать определённое количество различных процессорных ядер. К примеру, один кластер будет включать два ядра Cortex-A73, пять ядер Cortex-A53 и ещё какое-нибудь дополнительное ядро Cortex-M0. Гибкость технологии позволит разработчикам создавать кластеры, которые будут наилучшим образом оптимизированы для тех или иных задач. Всего в один кластер могут входить восемь различных ядер. ARM называет этот подход «правильный процессор для правильных задач».

ARM отмечает преимущества такой технологии при создании решений для автомобильного сегмента, для работы с системами искусственного интеллекта и так далее. К примеру, ARM утверждает, что новая технология поспособствует повышению производительности вычислительных возможностей ИИ до 50 раз в ближайшие три-пять лет. Но на самом деле гибкость, которую обеспечивает DynamIQ, пригодится при практически любых задачах.

К сожалению, пока неизвестно, когда DynamIQ будет реализована в серийных однокристальных системах.

 ,

OyyO ()

Помощь в рефакторинге java-кода

Есть приложение. Написано собственноручно, ГУИ на Swing, по кнопкам в отдельных потоках запускаются задачки, которые после выполнения выдают в окошки результаты своего выполнения. После написания функционал и интерфейс несколько раз изменялись/расширялись, многие вещи сделаны заплатками, неоптимально, и изначальное отсутствие стройной архитектуры этому только способствовало. Что хочется - на данном конкретном примере продумать и реализовать удобную для масштабирования архитектуру, чтобы потом без особых сверхусилий оставив без изменения классы логики заменить интерфейс на FX например, или вообще прикрутить вэб-интерфейс сначала для локального приложения, а впоследствии сделать полноценное вэб-приложение с публикацией на сайте.

Если есть желающие поменторить и направить в нужном направлении, прошу отписаться в теме или в личке (если она на ЛОРе вообще есть :) ).

 , ,

Ivana ()