Pep Guardiola's side stamped their authority on the game right from the start, pinning Villa down in their own half for the majority of the first 20 minutes. Despite the early domination, Manchester City struggled to find an opener. However, that soon changed as Ruben Dias slotted a stunning left-footed strike past Emiliano Martinez in the 27th minute.
It was a wondrous goal and no less than what the Cityzens deserved for their dominance in the game. The visitors then doubled their lead just before the break through Bernardo Silva. The Portuguese netted a thumping volley after a brilliant counter-attacking move that left the Villa defense alarmingly flat-footed.
However, the hosts came back roaring after the break and Ollie Watkins struck a sweet volley off the post to cut the deficit to just one goal. Villa ramped up the pressure but Manchester City withstood the late Villa pressure. The 2-1 win kept them within a point of Chelsea at the summit of the table.
On that note, here's a look at the Manchester City player ratings from the game:
Ederson Moraes - 7/10
Ederson had an excellent game after a long while. The Brazilian had little to no chance of saving Watkins' strike, but managed to make two good saves during the game. His second-half save to parry away Carney Chukwuemeka's stinging effort proved crucial for the Cityzens.
Joao Cancelo - 7/10
Cancelo put in a dilligent performance tonight. Deployed at right-back for the game, he looked to provide overlapping runs to Riyad Mahrez all night. However, his influence on the game was unusually limited. Cancelo ended the game with one key pass and a shot on target.
Ruben Dias - 8.5/10
Flawless in defense as he often is, Ruben Dias scored a stunning first-half goal as well to give Manchester City an all-important breakthrough in the game. The centre-back dealt with pretty much everything Villa threw at his side's defense and helped his side claim all three points.
Dias recorded a tackle, won a foul, and completed 92% of his passes.
Nathan Ake - 7.5/10
Much like his partner in defense, Nathan Ake had a pretty solid game as well. He showcased a good reading of the game, making a couple of crucial interventions and recoveries throughout the game. Ake also completed all of his attempted passes on the night.
Oleksander Zinchenko - 7/10
Often dropping into the left-midfield role, Zinchenko provided efficient cover to the defense at times as well. He was also involved in a great deal of City's build-up play, combining well with Raheem Sterling on the left flank for much of the first half.
Zinchenko completed two accurate long balls and managed 95% passing accuracy. He also registered a key pass, a shot on target and three tackles.
Rodri - 8/10
Rodri enjoyed yet another phenomenal performance at the heart of City's midfield. He was influential in dictating the flow of the game going forward and crucial in breaking Villa's attacks at times. The Spaniard made four successful tackles and nine ball recoveries throughout the game while also completing 85% of his passes.
Fernandinho - 7/10
Fernandinho showed every bit of his experience in breaking Villa's attacks and disrupting the flow of the game with smart fouls throughout the 90 minutes. However, the Brazilian did look a bit shaky in the second-half as he mistimed a couple of challenges under pressure.
Bernardo Silva - 9/10
By far the best player on the pitch, Bernardo Silva played his role to perfection. He often seemed to just glide across the pitch and set up waves of Manchester City attacks with his movement. Silva capped off a scintillating performance with a thumping first-time volley past Martinez.
Riyad Mahrez - 6.5/10
Mahrez had a fairly quiet evening at the office. His first touches and dribbles were as good as ever but given the tight nature of Villa's defense, he struggled to stamp his dominance in the game. Mahrez did manage three key passes on the night and completed 87.2% of his passes.
Gabriel Jesus - 7.5/10
Jesus caused all sorts of problems for the Villa defense with his movement and work-rate. His link-up play was on-point throughout the game and he even racked up an assist, supplying a pin-point cross for Bernardo Silva on the break.
Raheem Sterling - 8/10
Sterling has been looking like himself lately, and tonight was no different as Matty Cash struggled to deal with him throughout the game. He was lucky to get an assist for Dias' goal, but that was the least he deserved in a game in which he was an attacking threat throughout.
Sterling managed five key passes and won a foul for Manchester City despite not managing a single shot the entire night.
Manchester City substitutes
Jack Grealish - N/A
Also ReadArticle Continues below
Booed on his return to Villa Park, Grealish joined in on the action as a substitute in the 87th minute, replacing Gabriel Jesus. He simply didn't have enough time to make an impact on the game as Manchester City saw out the win.