NIC.UA is one of the largest domain name registrar and hosting provider in Ukraine. Previously it was using a monolith server but together with NIC.UA team we have divided this system into back end and front end parts. Now the service is flexible, scalable and has a smart domain search satisfying clients’ needs.
We were required to:
- Transfer website to Symfony PHP framework.
- Change domain search principles.
- Create a custom admin dashboard for managing website content.
- Introduce horizontal scaling and continuous integration.
- Implement websockets for faster search.
To make NIC.UA website easy to scale and support we moved it to Symfony. This PHP framework is used by a number of large-scale websites (BlaBlaCar, Spotify, MeinFernbus) handling tons of data on a daily basis.
We are sure that Symfony PHP framework is a great choice for projects like NIC.UA since:
- It’s an up-to-date framework for web solutions.
- All functions are organized into bundles which are easy to work with.
- It is possible to run console commands for automating certain tasks.
- Web Debug Toolbar provides useful data for profiling website work and database queries.
New admin dashboard
Standard admin dashboards have pretty limited functions so for NIC.UA we have developed a custom flexible dashboard allowing them to:
- Create modules that will be displayed in certain parts of the website.
- Make landing pages (for example, for sales and special offers).
- Customize each and every website page as one sees fit.
With this flexible dashboard website editor can change every page’s structure without touching its code.
Improved domain search
Since domain search is a central part of the service, we were required to improve it so that:
- Users can get the first results right after initiating the search.
- Service won’t send extra requests to registry and slow down the system.
- Users don’t need to repeat search to get the best results.
- several domain names with requirements for registration right next to them (if applicable);
- Cyrillic domain options (одежда.укр, одежда.co.ua);
- domain names using synonyms (outfit, clothes, etc.).
To achieve all of the above we implemented smart caching for requests and added transliteration, synonyms search and translation. For example, when looking for a domain for a shop with dresses (“dress”), one might get:
Horizontal scaling and continuous integration
To interact with the server part we’re using API. We have implemented its logic and introduced continuous integration via GitLab. With this type of integration code from several developers is regularly integrated into a single repository while build creation and its testing are automated. With continuous integration it’s quicker and simpler to make changes.
There’re two types of scaling:
- Vertical — resources are added to one server.
- Horizontal — the system is expanded using additional servers.
Since NIC.UA website should be resistance to drastic changes in traffic and demonstrate the maximum possible uptime, we decided to use horizontal scaling. The system that we created is relying on three servers (more servers can be added when needed). One of the servers is a load balancer that distributes load for all others. In case of failure, the service won’t stop and will continue working since all the tasks will be conducted on a working server. Thus the system has a high level of overall failure safety.
Websockets provide a two-way data transfer with delivery control. Connection between the client and server is established over TCP in real time. In a more practical way, it means that:
- There’s no need to open a new connection with the server for each new request.
- Only one permanent connection is opened that listens for events from the server.
- Data transfer from the server becomes faster and more reliable.
- There’s no empty traffic, data is delivered only when it is required.
On NIC.UA website websockets are used to quickly get data on domains and show them to a user. It is very convenient since the user sees the first results while the search is still conducted in the background.
Back End Developer
Back End Developer
Back End Developer