Gcore named a Leader in the GigaOm Radar for AI Infrastructure!Get the report
  1. Home
  2. Blog
  3. How We Migrate Our Applications to Micro Frontend Architecture at Gcore
Expert insights

How We Migrate Our Applications to Micro Frontend Architecture at Gcore

  • June 8, 2023
  • 6 min read
How We Migrate Our Applications to Micro Frontend Architecture at Gcore

At Gcore, we’re tech evolution and adaptability are our bread and butter. Recently, we embarked on a new project: migrating our largely Angular-based applications to a Micro Frontend Architecture. We opted for Module Federation as our strategy for this transition, given our extensive use of Angular.

Our Goals

As we started our migration journey, we established clear-cut goals. Our ambitions were not limited to modernizing our technology stack, but also included tangibly improving both the user experience and our development process.

  • Reduce loading time: Our first priority was to enhance our applications’ performance by reducing their loading time. Faster load times translate directly into improved user satisfaction and engagement.
  • Reuse modules: We aimed to establish a more efficient development process by reusing modules across different applications. Not only does this minimize redundancy, but it also accelerates the development cycle and enhances maintainability.
  • Abandon subdomains in favor of pathnames: We wanted to move away from using subdomains (not completely, of course,) instead opting for pathnames. This shift gives us finer control over routing and delivers a more seamless user experience.
  • Optimize widget script initialization: Lastly, we had a widget script that initializes with every application. We decided this needed to change. Rather than have it load with each app individually, wasting precious time, we wanted this process to occur just once during the loading of our shell application.

These objectives guided our migration to the Micro Frontend Architecture. Our story is not just about a technological upgrade, but also about the pursuit of a more efficient, user-friendly digital environment.

Module Federation

Before we delve deeper into our journey, let’s shed some light on the crucial tool we employed: Module Federation. A feature introduced in Webpack 5, Module Federation allows for separate builds to form various “micro frontends,” which can work together seamlessly.

Module Federation enables different JavaScript applications to dynamically run code from another build, essentially sharing libraries or components between them. This architecture fosters code reuse, optimizes load times, and significantly boosts application scalability.

Now, with a better understanding of Module Federation, we can explore how it played a pivotal role in our migration process.

ngx-build-plus

In the Angular ecosystem, ngx-build-plus has been a game-changer for implementing Module Federation. It’s an extension for the Angular CLI that allows us to tweak the build configuration without ejecting the entire Webpack config.

We can define shared dependencies, making sure they’re only included once in the final bundle. Below is an example of a configuration where we’ve shared Angular libraries, rxjs, and some custom Gcore libraries:

Plaintext
hared: share({ '@angular/core': { singleton: true, requiredVersion: '^14.0.0' }, '@angular/common': { singleton: true, requiredVersion: '^14.0.0' }, '@angular/router': { singleton: true, requiredVersion: '^14.0.0' }, rxjs: { singleton: true, requiredVersion: '>=7.1.0' }, '@gcore/my-messages': { singleton: true, strictVersion: false, packageName: '@gcore/my-messages', }, '@gcore/my-modules': { singleton: true, strictVersion: true, requiredVersion: '^1.0.0', packageName: '@gcore/my-modules', }, '@gcore/ui-kit': { singleton: true, requiredVersion: '^10.2.0' }, }),

So there you have it, folks! Get ngx-build-plus, set up Module Federation, configure your shared dependencies and voila, you’re a micro frontend maestro. Congratulations!

Oh, wait…

Communication Between Applications

As our applications’ complexity grew, so did the need for efficient communication between them. Initially, we had a widget script loaded on each application page, and communication between the application and widget was orchestrated via the window object. While this worked, we realized we could optimize this even further.

Enter @gcore/my-messages, our very own knight in shining armor. It’s a shareable service. It’s more akin to a message bus—except it’s not a bus, it’s a service, powered by rxjs.

But before we get carried away with metaphors, let’s clarify one thing: this service is blissfully unaware of widgets and applications. It only deals with interfaces of messages and the logic of sending them. Basically, these interfaces are conventions. This keeps the service lean, efficient, and unprejudiced, making it a perfect mediator for our applications’ chatter.

There’s more.

Where Am I? Statics’ Lack of Self-Awareness

Statics are blissfully unaware of their surroundings, and this lack of self-awareness can cause some real headaches.

To solve this existential crisis, we created a mechanism that could inform each micro frontend app about its own origin. Various solutions could have been adopted, but we decided to build my-modules.

Think of @gcore/my-modules as the travel guide. It’s injected into the shell application and carries all the essential information about the micro frontend apps. This module, crafted to be environment-aware, is configured during the shell CI/CD processes. As such, it’s dynamic yet reliable, and filled while shell initialization. This means you can configure it as you wish.

Through Module Federation, my-modules is shared, allowing other apps to access this essential information if and when they need it. Note that every time you add a new micro frontend application which should be served through your shell, you should update my-modules and configure it properly. No more lost applications, everyone knows where they are.

Local Development: Module Federation App as Standalone)

Now, let’s talk about something you’ve not seen yet – @gcore/my-panel. You may not have encountered it in the Module Federation webpack config, but it’s been there all along, working tirelessly behind the scenes.

The role of @gcore/my-panel is to help us initialize the widget. It processes widget-messages, sends them out via widget-messages, and does the reverse as well. And that’s not all; @gcore/my-panel serves another significant role during local development by enabling us to run our micro frontend application as a standalone application.

So, how does it work? Well, in a micro frontend application, similar to in the shell application, you should initialize it during the initialization process. Here’s how we do that in our app.init.ts:

Plaintext
export async function initApp( appConfigService: AppConfigService, myModulesService: MyModulesService, myPanelService: MyPanelService, ): Promise<unknown> { await appConfigService.loadConfig(); fillMyModulesService(myModulesService, appConfigService); return myPanelService.init(appConfigService.config.widgetUrl); }

This is how we’ve managed to integrate @gcore/my-panel and utilize it effectively in our applications, making it an indispensable part of our migration to a micro frontend architecture.

If you look closely, you will see another key operation taking place in our initApp function. We fill up our myModulesService with settings from our appConfigService. This step is essential in making sure our widgets are properly equipped with the necessary configuration to function optimally in our applications. In your MF application the app.module level, you can provide APP_INITIALIZER:

Plaintext
export function initApp(myPanelService: myPanelService): any { return async (): Promise<void> => { await myPanelService.init(); }; }

You might be wondering, “Where’s the extensive configuration we can usually see in initApp from init.app.ts?” You’re not alone! The approach has indeed changed; let’s dissect this.

Micro Frontend Application Initialization

When we serve our application on a domain like localhost:4001, it behaves just like a standard Angular application, thanks to the magic of myPanelService.init(). This function allows developers to work with their application in a familiar environment. Let’s consider this application as Mfe1App hosted on localhost:4001.

However, things get interesting when we attempt to load our micro frontend application into our shell application. Webpack visits localhost:4001/remoteEntry.js to fetch the micro frontend module. This is defined in our shell’s app-routing.module.ts:

Plaintext
{ path: 'mfe1App', loadChildren: () => loadRemoteModule({ type: 'manifest', remoteName: 'mfe1App', exposedModule: './Module', }).then((m) => m.Mfe1AppModule), },

And also in our mfe.manifest.json:

Plaintext
{ "mfe1App": "<http://localhost:4001/remoteEntry.js>" }

Our webpack configuration of Mfe1App only exposes one module:

Plaintext
new webpack.container.ModuleFederationPlugin({ name: 'mfe1App', filename: 'remoteEntry.js', exposes: { './Module': './src/app/mfe1App/mfe1App.module.ts', }, library: { type: 'module', }, }),

This configuration exposes the mfe1App module, with the mfe1App.module.ts file as its entry point, and the remoteEntry.js file as the file used to load the module. The type property is set to module to indicate that the module uses ES modules. And this is why our Mfe1App’s initApp is so succinct: we’re initializing everything within this module. For that, we use guards.

Consider initMfe1App.guard.ts:

Plaintext
// imports @Injectable() export class InitMfe1AppGuard implements CanActivate { constructor( private myMessagesService: myMessagesService, private configService: AppConfigService, private authService: AuthService, private widgetServive: WidgetService, private mfe1AppService: mfe1AppService, //... @Optional() private myModulesService: myModulesService, ) {} public canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot, ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree { this.mfe1AppService.createPrimaryUrlFromRouteSnapshot(route); if (this.widgetServive.loaded) { return true; } return this.myMessagesService.messages$.pipe( filter((message: WMessage): message is WMessageWidgetLoaded | WGlobalConfigChanged => { if ( checkMyMessageType(message, W_MESSAGE_TYPE.GLOBAL_CONFIG_CHANGED) || checkMyMessageType(message, W_MESSAGE_TYPE.WIDGET_LOADED) ) { return true; } else { this.myMessagesService.sendMessage({ type: W_MESSAGE_TYPE.GLOBAL_CONFIG_REQUEST }); return false; } }), take(1), tap((message) => this.widgetService.load(message.data)), //... mapTo(true), timeout(1000 * 10), ); }

This guard replaces the APP_INITIALIZER token you are used to, providing a new home for all initialization logic.

You did it! You can now start using your micro frontend applications. For your mf app, APP_INITIALIZER is for standalone initialization and init.guard is for MF modules. This new approach streamlines the initialization process, offering developers a more familiar, Angular-like experience. The more things change, the more they stay the same, right?

But what about when something goes wrong?

providedIn: ’root’ Is Not So Friendly Anymore

As you embark on your micro frontend journey, you might experience some turbulence, especially when your application doesn’t start smoothly due to injection conflicts. This can occur because most of your providers were provided in ’root’, a popular technique widely used in the Angular realm.

While this approach is still generally good practice, it can become less suitable for your micro frontend apps in certain cases. Specifically, if some of your services depend on other services and configurations that are now initialized in the app init guard, you should provide them at the micro frontend application level.

That being said, providedIn: ’root’ can still be a viable choice for global, non-configurable, or genuinely global services. However, you should harness your analytical prowess to provide services where they’re truly required.

Perhaps it’s time for a little restructuring; consider making some of those global helper services local and injecting them directly into components where they’re needed. This shift can enhance the modularity and maintainability of your application, making it more robust and easier to navigate.

Conclusion

The journey to a micro frontend architecture at Gcore was a worthwhile one, yet laden with unique challenges. Throughout the process, we’ve been building a stronger and more flexible foundation that empowers teams to concentrate on creating the best applications possible.

In a world of micro frontends, teams only need to adopt changes from shared libraries when it directly benefits their applications. This results in fewer interruptions and more time for innovation. But the resulting freedom calls for a clear and agreed-upon integration strategy to maintain coherence across different applications and to manage the frequency of updates.

Our experience is a testament that the transition to a micro frontend architecture is not just about overcoming technical hurdles. It’s a leap towards a more modular, efficient, and scalable way of building frontends.

It’s important to note that while the micro frontend architecture is gaining popularity, it isn’t a one-size-fits-all solution. You should consider the specific needs of your situation, like we did at Gcore, weighing the pros and cons before making the jump. Just because it’s the new trend doesn’t necessarily mean it’s the right fit for your project or organization.

Good luck!

Related articles

How we engineered a single pipeline for LL-HLS and LL-DASH

Viewers in sports, gaming, and interactive events expect real-time, low-latency streaming experiences. To deliver this, the industry has rallied around two powerful protocols: Low-Latency HLS (LL-HLS) and Low-Latency DASH (LL-DASH).While they share a goal, their methods are fundamentally different. LL-HLS delivers video in a sequence of tiny, discrete files. LL-DASH delivers it as a continuous, chunked download of a larger file. This isn't just a minor difference in syntax; it implies completely different behaviors for the packager, the CDN, and the player.This duality presents a major architectural challenge: How do you build a single, efficient, and cost-effective pipeline that can serve both protocols simultaneously from one source?At Gcore, we took on this unification problem. The result is a robust, single-source pipeline that delivers streams with a glass-to-glass latency of approximately 2.0 seconds for LL-DASH and 3.0 seconds for LL-HLS. This is the story of how we designed it.Understanding the dualityTo build a unified system, we first had to deeply understand the differences in how each protocol operates at the delivery level.LL-DASH: the continuous feedMPEG-DASH has always been flexible, using a single manifest file to define media segments by their timing. Low-Latency DASH builds on this by using Chunked CMAF segments.Imagine a file that is still being written to on the server. Instead of waiting for the whole file to be finished, the player can request it, and the server can send it piece by piece using Chunked Transfer Encoding. The player receives a continuous stream of bytes and can start playback as soon as it has enough data.Single, long-lived files: A segment might be 2–6 seconds long, but it’s delivered as it’s being generated.Timing-based requests: The player knows when a segment should be available and requests it. The server uses chunked transfer to send what it has so far.Player-driven latency: The manifest contains a targetLatency attribute, giving the player a strong hint about how close to the live edge it should play.LL-HLS: the rapid-fire deliveryLL-HLS takes a different approach. It extends the traditional playlist-based HLS by breaking segments into even smaller chunks called Parts.Think of it like getting breaking news updates. The server pre-announces upcoming Parts in the manifest before they are fully available. The player then requests a Part, but the server holds that request open until the Part is ready to be delivered at full speed. This is called a Blocking Playlist Reload.Many tiny files (Parts): A 2-second segment might be broken into four 0.5-second Parts, each requested individually.Manifest-driven updates: The server constantly updates the manifest with new Parts, and uses special tags like #EXT-X-PART-INF and #EXT-X-SERVER-CONTROL to manage delivery.Server-enforced timing: The server controls when the player receives data by holding onto requests, which helps synchronize all viewers.A simplified diagram visually comparing the LL-HLS delivery of many small parts versus the LL-DASH chunked transfer of a single, larger segment over the same time period.These two philosophies demand different things from a CDN. LL-DASH requires the CDN to intelligently cache and serve partially complete files. LL-HLS requires the CDN to handle a massive volume of short, bursty requests and hold connections open for manifest updates. A traditional CDN is optimized for neither.Forging a unified strategyWith two different delivery models, where do you start? You find the one thing they both depend on: the keyframe.Playback can only start from a keyframe (or I-frame). Therefore, the placement of keyframes, which defines the Group of Pictures (GOP), is the foundational layer that both protocols must respect. By enforcing a consistent keyframe interval on the source stream, we could create a predictable media timeline. This timeline can then be described in two different “languages” in the manifests for LL-HLS and LL-DASH.A single timeline with consistent GOPs being packaged for both protocols.This realization led us to a baseline configuration, but each parameter involved a critical engineering trade-off:GOP: 1 second. We chose a frequent, 1-second GOP. The primary benefit is extremely fast stream acquisition; a player never has to wait more than a second for a keyframe to begin playback. The trade-off is a higher bitrate. A 1-second GOP can increase bitrate by 10–15% compared to a more standard 2-second GOP because you're storing more full-frame data. For real-time, interactive use cases, we prioritized startup speed over bitrate savings.Segment Size: 2 seconds. A 2-second segment duration provides a sweet spot. For LL-DASH and modern HLS players, it's short enough to keep manifest sizes manageable. For older, standard HLS clients, it prevents them from falling too far behind the live edge, keeping latency reduced even on legacy players.Part Size: 0.5 seconds. For LL-HLS, this means we deliver four updates per segment. This frequency is aggressive enough to achieve sub-3-second latency while being coarse enough to avoid overwhelming networks with excessive request overhead, which can happen with part durations in the 100–200ms range.Cascading challenges through the pipeline1. Ingest: predictability is paramountTo produce a clean, synchronized output, you need a clean, predictable input. We found that the encoder settings of the source stream are critical. An unstable source with a variable bitrate or erratic keyframe placement will wreck any attempt at low-latency delivery.For our users, we recommend settings that prioritize speed and predictability over compression efficiency:Rate control: Constant Bitrate (CBR)Keyframe interval: A fixed interval (e.g., every 30 frames for 30 FPS, to match our 1s GOP).Encoder tune: zerolatencyAdvanced options: Disable B-frames (bframes=0) and scene-cut detection (scenecut=0) to ensure keyframes are placed exactly where you command them to be.Here is an example ffmpeg command in Bash that encapsulates these principles:ffmpeg -re -i "source.mp4" -c:a aac -c:v libx264 \ -profile:v baseline -tune zerolatency -preset veryfast \ -x264opts "bframes=0:scenecut=0:keyint=30" \ -f flv "rtmp://your-ingest-url"2. Transcoding and packagingOur transcoding and Just-In-Time Packaging (JITP) layer is where the unification truly happens. This component does more than just convert codecs; it has to operate on a stream that is fundamentally incomplete.The primary challenge is that the packager must generate manifests and parts from media files that are still being written by the transcoder. This requires a tightly-coupled architecture where the packager can safely read from the transcoder's buffer.To handle the unpredictable nature of live sources, especially user-generated content via WebRTC, we use a hybrid workflow:GPU Workers (Nvidia/Intel): These handle the heavy lifting of decoding and encoding. Offloading to GPU hardware is crucial for minimizing processing latency and preserving advanced color formats like HDR+.Software Workers and Filters: These provide flexibility. When a live stream from a mobile device suddenly changes resolution or its framerate drops due to a poor connection, a rigid hardware pipeline would crash. Our software layer can handle these context changes gracefully, for instance, by scaling the erratic source and overlaying it on a stable, black-background canvas, meaning the output stream never stops.This makes our JITP a universal packager, creating three synchronized content types from a single, resilient source:LL-DASH (CMAF)LL-HLS (CMAF)Standard HLS (MPEG-TS) for backward compatibility3. CDN delivery: solving two problems at onceThis was the most intensive part of the engineering effort. Our CDN had to be taught how to excel at two completely different, high-performance tasks simultaneously.For LL-DASH, we developed a custom caching module we call chunked-proxy. When the first request for a new .m4s segment arrives, our edge server requests it from the origin. As bytes flow in from the origin, the chunked-proxy immediately forwards them to the client. When a second client requests the same file, our edge server serves all the bytes it has already cached and then appends the new bytes to both clients' streams simultaneously. It’s a multi-client cache for in-flight data.For LL-HLS, the challenges were different:Handling Blocked Requests: Our edge servers needed to be optimized to hold thousands of manifest requests open for hundreds of milliseconds without consuming excessive resources.Intelligent Caching: We needed to correctly handle cache statuses (MISS, EXPIRED) for manifests to ensure only one request goes to the origin per update, preventing a "thundering herd" problem.High Request Volume: LL-HLS generates a storm of requests for tiny part-files. Our infrastructure was scaled and optimized to serve these small files with minimal overhead.The payoff: ultimate flexibility for developersThis engineering effort wasn't just an academic exercise. It provides tangible benefits to developers building with our platform. The primary benefit is simplicity through unification, but the most powerful benefit is the ability to optimize for every platform.Consider the complex landscape of Apple devices. With our unified pipeline, you can create a player logic that does this:On iOS 17.1+: Use LL-DASH with the new Managed Media Source (MMS) API for ~2.0 second latency.On iOS 14.0 - 17.0: Use native LL-HLS for ~3.0 second latency.On older iOS versions: Automatically fall back to standard HLS with a reduced latency of ~9 seconds.This lets you provide the best possible experience on every device, all from a single backend and a single live source, without any extra configuration.Don't fly blind: observability in a low-latency worldA complex system is useless without visibility, and traditional metrics can be misleading for low-latency streaming. Simply looking at response_time from a CDN log is not enough.We had to rethink what to measure. For example:For an LL-HLS manifest, a high response_time (e.g., 500ms) is expected behavior, as it reflects the server correctly holding the request while waiting for the next part. A low response_time could actually indicate a problem. We monitor “Manifest Hold Time” to ensure this blocking mechanism is working as intended.For LL-DASH, a player requesting a chunk that isn't ready yet might receive a 404 Not Found error. While occasional 404s are normal, a spike can indicate origin-to-edge latency issues. This metric, combined with monitoring player liveCatchup behavior, gives a true picture of stream health.Gcore: one pipeline to serve them allThe paths of LL-HLS and LL-DASH may be different, but their destination is the same: real-time interaction with a global audience. By starting with a common foundation—the keyframe—and custom-engineering every component of our pipeline to handle this duality, we successfully solved the unification problem.The result is a single, robust system that gives developers the power of both protocols without the complexity of running two separate infrastructures. It’s how we deliver ±2.0s latency with LL-DASH and ±3.0s with LL-HLS, and it’s the foundation upon which we’ll build to push the boundaries of real-time streaming even further.

Gcore successfully stops 6 Tbps DDoS attack

Gcore recently detected and mitigated one of the most powerful distributed denial-of-service (DDoS) attacks of the year, peaking at 6 Tbps and 5.3 billion packets per second (Bpps).This surge, linked to the AISURU botnet, reflects a growing trend of large-scale attacks. It reminds us how crucial effective protection has become for companies that depend on high availability and low latency. 6 Tbps 5.3 BppsThe attack in numbersPeak traffic: 6 TbpsPacket rate: 5.3 BppsMain protocol: UDP, typical of volumetric floods designed to overwhelm bandwidthGeographic concentration: 51% of sources originated in Brazil and 23.7% in the US, together accounting for nearly 75% of all trafficGeographic sources This regional concentration shows how today’s botnets are expanding across areas with high device connectivity and weaker security measures, creating an ideal environment for mass exploitation.How to strengthen your defensesThe 6 Tbps attack is not an isolated incident. It marks an escalation in DDoS activity across industries where performance and availability are critical to customer satisfaction and company revenue. To protect your business from large-scale DDoS attacks, consider the following key strategies:Adopt an adaptive DDoS protection that detects and mitigates attacks automatically.Leverage edge infrastructure to absorb malicious traffic closer to its source.Prepare for high traffic volumes by upgrading your infrastructure or partnering with a reliable DDoS protection provider that has the global capacity and resources to keep your services online during large-scale attacks.Keeping your business safe with GcoreTo stay ahead of these evolving threats, companies need solutions that deliver real-time detection, intelligent mitigation, and global reach. Gcore’s DDoS Protection was built to do precisely that, leveraging AI-driven traffic analysis and worldwide network capacity to block attacks before they impact your users.As attacks grow larger and more complex, staying resilient means being prepared. With the right protection in place, your customers will never know an attack happened in the first place.Learn more about 2025 cyberattack trends

Gcore CDN updates: Dedicated IP and BYOIP now available

We’re pleased to announce two new premium features for Gcore CDN: Dedicated IP and Bring Your Own IP (BYOIP). These capabilities give customers more control over their CDN configuration, helping you meet strict security, compliance, and branding requirements.Many organizations, especially in finance and other regulated sectors, require full control over their network identity. With these new features, Gcore enables customers to use unique, dedicated IP addresses to meet compliance or security standards; retain ownership and visibility over IP reputation and routing, and deliver content globally while maintaining trusted, verifiable IP associations.Read on for more information about the benefits of both updates.Dedicated IP: exclusive addresses for your CDN resourcesThe Dedicated IP feature enables customers to assign a private IP address to their CDN configuration, rather than using shared ones. This is ideal for:Businesses that are subject to strict security or legal frameworks.Customers who want isolated IP resources to ensure consistent access and reputation.Teams using WAAP or other advanced security solutions where dedicated IPs simplify policy management.BYOIP: bring your own IP range to Gcore CDNWith Bring Your Own IP (BYOIP), customers can use their own public IP address range while leveraging the performance and global reach of Gcore CDN. This option is especially useful for:Resellers who prefer to keep Gcore infrastructure invisible to end clients.Enterprises maintaining brand consistency and control over IP reputation.How to get startedBoth features are currently available as paid add-ons and are configured manually by the Gcore team. To request activation or learn more, please contact Gcore Support or your account manager.We’re working on making these features easier to manage and automate in future releases. As always, we welcome your feedback on both the feature functionality and the request process—your insights help us improve the Gcore CDN experience for everyone.Get in touch for more information

Introducing AI Cloud Stack: turning GPU clusters into revenue-generating AI clouds

Enterprises and cloud providers face major roadblocks when trying to deploy GPU infrastructure at scale: long time-to-market, operational inefficiencies, and difficulty bringing new capacity to market profitably. Establishing AI environments with hyperscaler-grade functionality typically requires years of engineering effort, multiple partner integrations, and complex operational tooling.Not anymore.With Gcore AI Cloud Stack, organizations can transform bare Nvidia GPU clusters into a fully cloud-enabled environment—complete with orchestration, observability, billing, and go-to-market support—all in a fraction of the time it would take to build from scratch, maximizing GPU utilization.This proven solution marks the latest addition to the Gcore AI product suite, enabling enterprises and cloud providers to accelerate AI cloud deployment through better GPU utilization, monetization, reduced complexity, and hyperscaler-grade functionality in their own AI environments. Gcore AI Cloud Stack is already powering leading technology providers, including VAST and Nokia.Why we built AI Cloud StackBuying and efficiently operating GPUs at a large scale requires significant investment, time, and expertise. Most organizations need to hit the ground running, bypassing years of in-house R&D. Without a robust reference architecture, infrastructure and network preparation, 24/7 monitoring, dynamic resource allocation, orchestration abstraction, and clear paths to utilization or commercialization, enterprises can spend years before seeing ROI.“Gcore brings together the key pieces—compute, networking, and storage—into a usable stack. That integration helps service providers stand up AI clouds faster and onboard clients sooner, accelerating time to revenue. Combined with the advanced multi-tenant capabilities of VAST’s AI Operating System, it delivers a reliable, scalable, and futureproof AI infrastructure. Gcore offers operators a valuable option to move quickly without building everything themselves.”— Dan Chester, CSP Director EMEA, VAST DataAt Gcore, we understand that organizations across industries will continue to invest heavily in GPUs to power the next wave of AI innovation—meaning these challenges aren’t going away. AI Cloud Stack solves today’s challenges and anticipates tomorrow’s. It ensures that GPU infrastructure at the core of AI innovation delivers maximum value to enterprises.How AI Cloud Stack worksThis comprehensive solution is structured across three stages.1. Provision and launchGcore handles the complexities of initial deployment, from physical infrastructure setup to orchestration, enabling enterprises to go live quickly with a reliable GPU cloud.2. Operations and managementThe solution includes monitoring, orchestration, ticket management, and ongoing support to keep environments stable, secure, and efficient. This includes automated GPU failure handling and optimized resource management.3. Go-to-market supportUnlike other solutions, AI Cloud Stack goes beyond infrastructure. Building on Gcore’s experience as a trusted NVIDIA Cloud Provider (NCP), it helps customers sell their capacity, including through established reseller channels. This integrated GTM support ensures capacity doesn’t sit idle, losing value and potential.What sets Gcore apartUnlike many providers entering this market, Gcore has operated as a global cloud provider for over a decade and has been an early player in the global AI landscape. Gcore knows what it takes to build, scale, and sell cloud and AI services—because it has done it for customers and partners worldwide. Gcore AI Cloud Stack has already been deployed on thousands of NVIDIA Hopper GPUs across Europe to build a commercial-grade AI cloud with full orchestration, abstraction, and monetization layers. That real-world experience allows Gcore to deliver the infrastructure, operational playbook, and sales enablement customers need to succeed.“We’re pleased to collaborate with Gcore, a strong European ISV, to advance a networking reference architecture for AI clouds. Combining Nokia’s open, programmable, and reliable networking with Gcore’s cloud software accelerates deployable blueprints that customers can adopt across data centers and the edge.”— Mark Vanderhaegen, Head of Business Development, Data Center Networks, NokiaKey features of AI Cloud StackCloudification of GPU clusters: Transform raw infrastructure into cloud-like consumption: Infrastructure as a Service (IaaS), Platform as a Service (PaaS), GPU as a Service (GPUaaS), or Model as a Service (MaaS).Gcore AI suite integration: Enable serverless inference and training capabilities through Gcore’s enterprise AI suite.Hyperscaler functionality: Built-in billing, observability, orchestration, and professional services deliver the tools CSPs and enterprises need to operate—similar to what they’re used to getting on public cloud.White-label options: Deliver capacity under your own brand while relying on Gcore’s proven global cloud backbone.NVIDIA AI Enterprise-ready: Integrate pretrained models, chatbots, and NVIDIA AI blueprints to accelerate time-to-market.The future of AI cloudsWith Gcore AI Cloud Stack, enterprises no longer need to spend years building the operational, technical, and commercial capabilities required to utilize and monetize GPU infrastructure. Instead, they can launch in a few months with a hyperscaler-grade solution designed for today’s AI demands.Whether you’re a cloud service provider, an enterprise investing in AI infrastructure, or a partner looking to accelerate GPU monetization, AI Cloud Stack gives you the speed, scalability, and GTM support you need.Ready to turn your GPU clusters into a fully monetized, production-grade AI cloud? Talk with our AI experts to learn how you can go from bare metal to model-as-a-service in months, not years.Get a customized consultation

Gcore Radar Q1–Q2 2025: three insights into evolving attack trends

Cyberattacks are becoming more frequent, larger in scale, and more sophisticated in execution. For businesses across industries, this means protecting digital resources is more important than ever. Staying ahead of attackers requires not only robust defense solutions but also a clear understanding of how attack patterns are changing.The latest edition of the Gcore Radar report, covering the first half of 2025, highlights important shifts in attack volumes, industry targets, and attacker strategies. Together, these findings show how the DDoS landscape is evolving, and why adaptive defense has never been more important.Here are three key insights from the report, which you can download in full here.#1. DDoS attack volumes continue to riseIn Q1–Q2 2025, the total number of DDoS attacks grew by 21% compared to H2 2024 and 41% year-on-year.The largest single attack peaked at 2.2 Tbps, surpassing the previous record of 2 Tbps in late 2024.The growth is driven by several factors, including the increasing availability of DDoS-for-hire services, the rise of insecure IoT devices feeding into botnets, and heightened geopolitical and economic tensions worldwide. Together, these factors make attacks not only more common but also harder to mitigate.#2. Technology overtakes gaming as the top targetThe distribution of attacks by industry has shifted significantly. Technology now represents 30% of all attacks, overtaking gaming, which dropped from 34% in H2 2024 to 19% in H1 2025. Financial services remain a prime target, accounting for 21% of attacks.This trend reflects attackers’ growing focus on industries with broader downstream impact. Hosting providers, SaaS platforms, and payment systems are attractive targets because a single disruption can affect entire ecosystems of dependent businesses.#3. Attacks are getting smarter and more complexAttackers are increasingly blending high-volume assaults with application-layer exploits aimed at web apps and APIs. These multi-layered tactics target customer-facing systems such as inventory platforms, payment flows, and authentication processes.At the same time, attack durations are shifting. While maximum duration has shortened from five hours to three, mid-range attacks lasting 10–30 minutes have nearly quadrupled. This suggests attackers are testing new strategies designed to bypass automated defenses and maximize disruption.How Gcore helps businesses stay protectedAs attack methods evolve, businesses need equally advanced protection. Gcore DDoS Protection offers over 200 Tbps filtering capacity across 210+ points of presence worldwide, neutralizing threats in real time. Integrated Web Application and API Protection (WAAP) extends defense beyond network perimeters, protecting against sophisticated application-layer and business-logic attacks. To explore the report’s full findings, download the complete Gcore Radar report here.Download Gcore Radar Q1-Q2 2025

Edge AI is your next competitive advantage: highlights from Seva Vayner’s webinar

Edge AI isn’t just a technical milestone. It’s a strategic lever for businesses aiming to gain a competitive advantage with AI.As AI deployments grow more complex and more global, central cloud infrastructure is hitting real-world limits: compliance barriers, latency bottlenecks, and runaway operational costs. The question for businesses isn’t whether they’ll adopt edge AI, but how soon.In a recent webinar with Mobile World Live, Seva Vayner, Gcore’s Product Director of Edge Cloud and AI, made the business case for edge inference as a competitive differentiator. He outlined what it takes to stay ahead in a world where speed, locality, and control define AI success.Scroll on to watch Seva explain why your infrastructure choices now shape your market position later.Location is everything: edge over cloudAI is no longer something globally operating businesses can afford to run from a central location. Regional regulations and growing user expectations mean models must be served as close to the user as possible. This reduces latency, but perhaps more importantly is essential for compliance with local laws.Edge AI also keeps costs down by avoiding costly international traffic routes. When your users are global but your infrastructure isn’t, every request becomes an expensive, high-latency journey across the internet.Edge inference solves three problems at once in an increasingly regionally fragmented AI landscape:Keeps compute near users for low latencyCuts down on international transit for reduced costsHelps companies stay compliant with local lawsPrivate edge: control over convenienceMany businesses started their AI journey by experimenting with public APIs like OpenAI’s. But as companies and their AI use cases mature, that’s not good enough anymore. They need full control over data residency, model access, and deployment architecture, especially in regulated industries or high-sensitivity environments.That’s where private edge deployments come in. Instead of relying on public endpoints and shared infrastructure, organizations can fully isolate their AI environments, keeping data secure and models proprietary.This approach is ideal for healthcare, finance, government, and any sector where data sovereignty and operational security are critical.Optimizing edge AI: precision over powerDeploying AI at the edge requires right-sizing your infrastructure for the models and tasks at hand. That’s both technically smarter and far more cost-effective than throwing maximum power and size at every use case.Making smart trade-offs allows businesses to scale edge AI sustainably by using the right hardware for each use case.AI at the edge helps businesses deliver the experience without the excess. With the control that the edge brings, hardware costs can be cut by using exactly what each device or location requires, reducing financial waste.Final takeawayAs Seva put it, AI infrastructure decisions are no longer just financial; they’re part of serious business strategy. From regulatory compliance to operational cost to long-term scalability, edge inference is already a necessity for businesses that plan to serve AI at scale and get ahead in the market.Gcore offers a full suite of public and private edge deployment options across six continents, integrated with local telco infrastructure and optimized for real-time performance. Learn more about Everywhere Inference, our edge AI solution, or get in touch to see how we can help tailor a deployment model to your needs.Ready to get started? Deploy a model in just three clicks with Gcore Everywhere Inference.Discover Everywhere Inference

Subscribe to our newsletter

Get the latest industry trends, exclusive insights, and Gcore updates delivered straight to your inbox.