How to correctly replicate firing a weapon

Hello, I working on a multiplayer shooter using dedicated servers.

Right now, I replicate shooting a weapon (full auto) like that:

Client fires → Reliable Call On Server → Server spawns bullet that is set to replicate movement, so everyone sees it

This works fine, except that I am experience a lot of lag/stuttering when shooting weapons with a rate of around 100 rpm, since there are a lot of reliable function calls to the server, but I making them unreliable makes them, well, unreliable and sometimes the weapon doesnt shoot.

What is the best way to replicate full auto shooting? Making an reliable call to server when someone starts firing, and when someone stops firing?

I think that if you are using an semi or full auto weapon you should do fire events with linetrace instead of spawning a new actor in every fire event, this should be used only for single (and slow) weapons like snipers, rpgs, etc