Статьи

HTTP и масштабируемые программные системы

Если вы думаете о Всемирной паутине, легко представить ее как единую программную систему. Как только вы это сделаете, вы поймете, что это самая большая система программного обеспечения, которую когда-либо создавал мир — возможно, на сотни порядков. Он содержит триллионы строк кода, сотни миллионов серверов и миллиарды клиентов, использующих тысячи различных языков программирования. Тем не менее, он работает более или менее так, как мы ожидаем, что он будет работать. Итак, что позволило людям создать такую ​​огромную программную систему? Ответ прост: HTTP !

Протокол HTTP позволяет нам создавать идеальную инкапсуляцию. Клиенту и серверу не нужно ничего знать друг о друге, кроме URL, HTTP-глагола и параметров, которые нужно передать и ожидать в качестве вывода. Это позволяет миллиардам клиентов взаимодействовать друг с другом, не зная (почти) ничего друг о друге. Если вы сведете его к базовым компонентам, становится очевидным, что следующий рецепт для победы.

  1. Волшебные строки (URL).

  2. Общие и нетипизированные  полезные нагрузки ( JSON ).

  3. DNS- преобразование URL-адресов в физический адрес некоторого клиента / сервера.


Вам также может понравиться:
Серия HTTP (часть 1): обзор основных понятий .

Они лгали тебе!

The funny thing is that this contradicts some 60 years of software development theory, with strong typing, rigid classes, OOP, etc., where everything should be known at compile time. If anything, the Web’s success is based upon completely ignoring every single «best practice» we as software developers have taught ourselves over the last 60+ years.

The paradox is that the above recipe, can also easily be implemented internally within our own systems. Just throw away OOP, forget all about static and strong typing, and invoke your methods as «magic strings.» You’ll never again experience complexity problems, with entangled dependencies, making it impossible to create a software system above some threshold of complexity, without reducing it to a big ball of mud. Imagine the following pseudo-code:

Plain Text