In order to keep you informed about the changes and new features that are implemented in Shopsys Framework, we have decided to start publishing a short article to follow each new release, starting with the latest one — v7.0.0-alpha5. For the complete list of changes that have been made in the last release, you can check our changelog.
Our main focus recently has been divided between experimenting with microservices architecture, improving the framework performance, and verifying the framework extensibility abilities by implementing our own demoshop based on the latest Shopsys Framework version.
Shopsys Framework development highlights
Implementation of Elasticsearch as a Microservice
As one of Shopsys Framework’s important goals is streamlining user experience, integrating Elasticsearch into the framework’s technology stack was vital for us. As a result, the performance of the product search increased by more than 80%.
The feature itself is implemented in the standalone microservice. As a result, from now on the product search functionality can be deployed, and even scaled separately, as it is independent of the rest of the framework.
The microservice has its own technology stack and this approach enables developers to more easily overcome technological debt. Since there were no restrictions on what sorts of technologies we could use for the microservice, we happily based it on the Symfony Skeleton and used Symfony Flex, as it is the recommended way of creating Symfony applications nowadays. We were able to do that despite the fact the rest of the framework is dependent on the somewhat more obsolete Symfony 3.4 version.
Implementation of the microservice was done in three steps. You can check the details in the corresponding pull requests:
- The first prototype of the microservice architecture (pull request #368)
- Product searching via Elasticsearch (pull request #354)
- Integrating Elasticsearch functionality into the microservice (pull request #401)
As this is our first real experience with the microservice architecture, we predicted that it would take some additional work on our end to achieve the desired results. There are a few issues that we are going to address in subsequent sprints. For example, the framework is still responsible for updating data in Elasticsearch so we would like to create yet another microservice to handle that task, thereby allowing the Elasticsearch functionality to exist independently of the framework. Additionally, the method in place for running the microservice is currently quite cumbersome, so we are already working on our own ready-to-use docker image to help make the installation process as simple as possible.
The ability to add new advert position
As adding custom advert positions is a common feature request, we focused on making it as easy as possible. Now, there are three simple steps that are described in the new cookbook in our documentation. For more information, see the pull request #395.
Upgrade to Postgres 10
We are always trying to reduce technical debt, so upgrading to Postgres 10 was something we were really excited about. There are lots of new and interesting features in the latest latest version of Postgres; for example, adding ICU Collation Support means that product sorting is now consistent across the platforms. The upgrade itself was very easy to implement. See the pull request that includes instructions on how to perform the upgrade without losing your data.
Demoshop development highlights
Twig templates caching
We improved the performance of demoshop by roughly 15% by adding a simple Twig templates cache for categories panel, horizontal menu, and the e-shop footer. The templates cache is now stored in Redis. For detailed information see the pull request #9.
Zásilkovna Pickup Points
More than 18,000 e-commerce sites in 6 countries of Central Europe use Zásilkovna as one of the offered personal collection transport types. Even lots of e-shops based on the previous versions of Shopsys provide this functionality and now we can help you with implementing it on Shopsys Framework as well, you can get inspired by the pull request #6.
Čtěte také