Anything works to setup an MMO and there are plenty of frameworks out, even for those engines like Unity found in their Asset Store. I also met someone who was presenting his barebone MMO on a meetup so anything is possible.
As for an MMO you first need to write your engine as for every other game but plan and focus on a larger scale in for example Multithreading, Network communication and most important your workflow on managing and building the project. Trust me, when I started 6 years ago to get the (general) game engine of my dreams to life, any slowdown occuring was because the project and building environment was not well organized. Today I invested lots of time into management tools I wrote by myself and it was worth it because everything I need is just a command line away.
A general advice I can give for network communication is to really really think well about what you want to achieve and then rethink it twice. For an MMO, performance is anything; you don't want to write network code that runs like a rabbit through a tube, so it works well when you are alone on the server but gets into trouble when the normal workload of clients are connected.
Linux and Windows have different network stacks, you best start with the windows IOCP model and then mimic the behavior with Unix Poll technology. The other way round is very difficult to achieve.
Using IOCP is necessary to get arround the socket connection limit and drive your server with less resources than the usual blocking socket approach could offer.
Mixing different network protocols is also something to make some performance. TCP is a request response protocol so every package send via network requires the sender to send a response on the socket layer otherwise the package isn't dequeued from the sender. Network traffic can slow down this process and at least when your packages leave the private and enter the world wide public network, there is enougth traffic that can block your TCP packages from arriving. I use TCP and a proper endpoint encryption for example to send authentication data or important account data.
UDP is the fire-and-forgett protocol you put a package to the network queue and don't expect an answer. This is usefull for small fast data like player is moving, player is fighting, player is talking kind of messages. You however need to detect connection-loss by yourself in this scenario