Max Verstappen held off a late charge from Carlos Sainz to take victory at the Canadian Grand Prix.
The reigning F1 world champion had been in a comfortable position before Yuki Tsunoda triggered a safety car in the last third of the race, allowing Sainz to close up to the back of his Red Bull on fresher hard tyres.
But the Ferrari was unable to make his way past despite the assistance of DRS, allowing Verstappen to extend his championship lead to 46 points over team-mate Sergio Perez, who was forced into retirement.
Lewis Hamilton put Mercedes' improved pace to good use to take his first podium since the season-opening Bahrain Grand Prix.
Dominant Verstappen forced into late fight for victory
Alonso was unable to launch his planned attack on Verstappen into turn one after a slow getaway, with Sainz making his way past his countryman as soon as DRS was made available on lap three.
Kevin Magnussen battled Lewis Hamilton for fourth into turn three but contact left him with a damaged front wing and a black and orange flag from the race stewards, forcing the Haas to pit and drop down the order.
Perez's weekend went from bad to worse when retiring on lap nine and triggering a virtual safety car following a suspected gearbox issue - the Mexican having crashed out of qualifying on Saturday.
Whilst Verstappen and Hamilton pitted for a free stop from first and fourth, Sainz and Alonso stayed out on track to create strategic variation.
Sainz pitted during a second VSC for Mick Schumacher's stricken Haas, making easy work of the continuing Alonso when returning to the track.
Verstappen came close with Hamilton when emerging from this second stop, but was able to instantly clear the Mercedes which pitted at the end of the very next lap.
Safety car sets up thrilling finish
Ferrari kept Sainz out on track and the decision was rewarded when Yuki Tsunoda crashed exiting the pits on lap 49, allowing the Scuderia to switch to a fresher set of tyres to attack the Red Bull.
Sainz pushed and pushed with DRS to boot, but the RB18 was just too slippery in a straight line to allow the Spaniard a chance of a first grand prix victory.
Hamilton secured what ended as a comfortable third ahead of team-mate George Russell, with Charles Leclerc fighting back to finish in the top five after his power unit change.
Esteban Ocon led home Alpine team-mate Alonso, who may rue his team's pit stop strategy, ahead of Alfa Romeo duo Valtteri Bottas and Guanyu Zhou - the Chinese driver capping off a fine weekend with his second points finish in F1.
Home favourite Lance Stroll came from the back of the grid to finish 10th in his home race, dispossessing Daniel Ricciardo of the final points-paying position with seven laps remaining.
Sebastian Vettel finished 12th ahead of Alex Albon and Pierre Gasly, who battled gremlins all race long for AlphaTauri.
Lando Norris' race was ruined by a pit stop mix-up from his McLaren team, with no tyres waiting for the Briton as he double-stacked behind Ricciardo, whilst Latifi and Magnussen rounded out the finishers.
Leclerc limits damage with comeback
Leclerc started on the back row of the grid after taking a new power unit for the weekend and had targeted a top-four finish.
The Monégasque made slow progress through the lower order as DRS trains took effect. By lap 14, Leclerc had only reached 12th after making a move on Norris into the final corner.
But the Ferrari - clearly trimmed on aero in order to scythe his way through the pack - was struggling for traction and Leclerc complained over team radio about his differential settings.
Leclerc opted not to stop during virtual safety car interventions and eventually found himself in eighth, before a brave move with DRS assistance saw him past Bottas.
But his progress stagnated behind Ocon before his first stop and his woes continued with a slow stop, a three-second delay costing him track position to Stroll, Zhou, Tsunoda and Ricciardo.
Medium tyres helped Leclerc get back into the top 10 at the expense of the AlphaTauri and McLaren drivers.
The late safety car gave Leclerc a lifeline and he was able to make the most of his opportunity, taking sixth from Alonso and then fifth from Ocon to limit his championship damage.
Schumacher endures yet more heartbreak
Schumacher could do no wrong in qualifying after finishing sixth-fastest despite the scrutiny that he has been under since his Monaco crash.
The German was holding seventh against Zhou in the opening stages of the race.
But as the Alfa Romeo driver attempted a move into turn eight, the Haas failed and Schumacher pulled to the run-off area to retire and leading to understandable anguish on team radio.