ermouth: (ang)
[personal profile] ermouth
В javascript ES6 появилась новая волшебная фича – прокси-объекты. К фиче не существует вменяемого polyfill-а в ES5, поэтому мы её до последнего времени не юзали. Её нет, например, в IE 11– и node.js 6–.

Фича работает примерно как в Java: выставляет перед объектом перехватчик, который позволяет реализовывать абстрактный интерфейс к объекту. Очень полезный функционал – lazy partial constructors там, контроль доступа к объектам в памяти, когда заранее неизвестно, какой код будет объекты обрабатывать, и всякое такое.

В общем, в конце прошлого года я решил, что время пришло.

Сейчас у нас в стадии поздней беты большой серверный компонент, который в существенной степени построен именно на прокси-объектах. То-есть там много однопоточных процессов, в каждом процессе выводок виртуальных машинок, а в каждой машинке по одному инстансу лямбды.

Собственно, вся эта кухня нагорожена для изоляции лямбд и их горячей замены. Код лямбд хранится в БД и распространяется по узлам в одном потоке репликации с данными, которые он должен обрабатывать. По приходу обновлений лямбд их надо а) заменять по-горячему, б) иметь pre-compiled образ для быстрого старта нескольких инстансов одной лямбды. Erlang inspired architecture.

Контекст (объект this) каждого вызова лямбды состоит из трёх частей, две из них приходят из БД, а третья – lazy плагины с файловой системы. Контекст между лямбдами частично shared. Целиком пересобирать здоровый объект перед каждым вызовом лямбды или дорого, или получается unsafe. Тут и пригодились Proxy-объекты.

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

Жаль, IE портит всю малину на клиенте. 

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 13th, 2025 03:35 pm
Powered by Dreamwidth Studios