
I give you a brief report on changes in
Impress AS over the past few months. First, we did not go through frameworks, but rushed into the scope
of application servers , providing scaling in two directions: (1) many applications on one server and (2) many servers for one application. The first direction required the development of sandboxing (screening of applications from each other and from the launch environment), and the second direction provided for the transition from cluster to multi-server cloud. Here we need to clarify the terminology, in the node
cluster (cluster) is usually called the method of multi-threaded launch of applications in master / worker mode, therefore, we will call the multi-server infrastructure (with a cluster on each server)
cloud (or
application cloud ). This cloud is neither related to the virtualization of the operating system, as it is usually falsely associated in the understanding of the broad masses. Cloud technologies are not required to be organized on the basis of virtualization technologies, but there is no other simple way to scale for mass consumption.
Cloud virtualization does not guarantee infinite application virtualization , and all developers of large high-load systems know that hundreds of thousands and tens of millions of users need to create special application solutions that provide
application virtualization , spreading tasks across servers and integrating them into a single, distributed, but centralized managed system. It was this task that we set about to solve in Impress, I hope I defended the terminology and I can move on to the details.
Innovations and Versions
Now there are two current versions 0.0.71 and 0.1.2, which can be installed respectively:
npm install impress@0.0.71
All New Year's holidays were cynically spent on the implementation of sandboxing and deep refactoring Impress. Up to 80% of the kernel has been rewritten and version 0.1.2 has been tested on applications written for 0.0.71 with their minimal correction. Functionally, in these versions, everything is the same, except for sandboxing and the features of writing applications. Refactoring from the old style to the new is very simple and comes down to replacing the call to the application server API. One of these days I will release a small porting manual, since there are already enough external developers using Impress, I don’t want to give them such a gift to NG. With the instructions, they will cope with porting in a few minutes, I hope.
So, the functional innovations that are present in both versions:
- The implementation of interprocess communication in the form of message translation between processes through ZeroMQ (inter-server communication) and IPC (within one server). This is necessary so that users glued to their process can interact with each other.
- Support for WebSocket has been added (it has been requested for a long time) and the implementation of Server-Sent Events has been updated. In the demo application there are examples of their use. Moreover, these protocols can be available on the same port (for example, 80), on which applications send their pages, just to a different URL, which eliminates the need for CORS (cross-domain requests, and another port, for some reason is considered to be a different domain) .
- Many dependencies are removed , and modules are used only if they are installed and added to the configuration. This is all thanks to the geoip-lite library, which decided to suddenly leave 120MB of temporary files and heavy database drivers, which are not all needed at once. I already sent the patch for geoip-lite to the author, it isn’t in npm yet, but for whom it's critical - put it through github, here it is already available . UPD : just 2014-01-13 new version hit npm.
- The optimization of caching templates, statics and business logic handlers, including the tracking of the file system and updating the cache when files on the disk are changed, has been optimized. And in the new version, caching is completely rewritten to provide screening applications in sandboxes.
Slide to lure to view the presentation (clickable)

Now, for greater persuasiveness, I'll show you a cool slide from the
presentation . The code examples in the presentation are relevant only for version 0.0.71, and bulshitological pathos texts are also relevant for 0.1.2, so look at it to get an overview of the application server. There is also an
English version of the presentation. I understand that good screencasts, a variety of examples and articles explaining these examples are absolutely necessary for deep acquaintance with Impress, they are being prepared and will be available soon. Regarding support, the intensity of development and release of versions, the activity of correcting detected bugs and suggestions for improvement, you can add up the impression on
Gitkhub . Feel free to send questions and post
issues in Russian or English.
')
Links
On Github:
https://github.com/tshemsedinov/impressIn npm:
https://npmjs.org/package/impress