Usman Asar的帖子

Tien, both types of boxes are perfect at their specifications, Fujitsu being older but more powerful, Dells are lesser powerful but are newer so can support Intel Optane memory as well. Only downside is they both are on SAS HDD's while database and webserver requires higher throughput and lower latency for which SSD's are better.

Will you be able to get drives changed/added? if you can add two additional 1TB SSD on RAID-1 on any of the fujitsu machines and put O/S, Web Server, Database, Moodle files and cache/temp files on SSD's and keep moodledata alone on HDD's that will surely handle 1000 users concurrent. if you can get RAM upgraded to 64GB that will be perfect, but 32GB is good enough as long as you allocate at least 12GB to Database server alone.

regarding Linux, I have absolutely no idea but 90%+ of the moodle are running on Linux so better ask community for suggestion of version. You can use any latest version of moodle with that hardware I just mentioned above. as of MariaDB 10.2+ and MySQL 8, I think they are not drop-in replacements anymore, so you'll be choosing either, out of which MariaDB is used by moodle so MariaDB is recommended.

you can even add one DELL machine with drives changed to SSD in RAID-1 to be used as database server alone, for expand-ability, and use memCache to reduce database latency.
Tien, get the information on hardware specifications of all the machines down to chip-set level, (if they are different), else we'll see what upgrades are required on existing ones that can assure handling of 1000 concurrent users.

OK, first thing as Howard mentioned, 100 users? seriously? But because from your first post you are gathering this information for your diploma, so why  not.

A general guideline (some still may disagree) is 20 users per 1GB of RAM(memory), so based on this one can always setup hardware accordingly, this doesn't  means you will only be allocating the required amount of RAM to achieve the desired performance, but then others components will have to be upgraded  accordingly. I will reply as you asked questions and assume that most of will be answered in this post.

You mentioned Horizontal and Vertical scaling, well not just moodle, ANY web application can be scaled in both terms, where vertical scaling (or scaling  UP) is concerned you add/upgrade hardware on one box/server, for example you can add more RAM (Memory), create RAID on Hard Drives or even upgrade  traditional hard drives to SSD drives that not only increase performance but as well as decrease chance of failure (no mechanical parts), either upgrade  CPU or add additional if your box comes with dual/Quad socket configuration. Vertical scaling will definitely provide performance uplift where you can  serve more users out of one server/box, as well provide redundancy in some areas - like a server grade hardware comes with redundant Power supply and disc  drives, but when it comes to other failures like one stick of RAM going bad (though RAM and CPU's are build to last), this will render your server from  AVAILABLE to NOT AVAILABLE. This is when HORIZONTAL (or scaling OUT) expansion steps in, where you add more servers/machines to your server network to  share workload, this will make your system fault tolerant and highly available, as even one server fails other servers on network will step in/continue to  serve.

Now when mentioning vertical scaling, it is recommended (I cannot recall but I did read on moodle's site, whether documentation or discussion), to set up  different components of moodle separately. when I say moodle components/parts, moodle installation is made up of three things, moodle script files together  with web server (that you download from moodle site), moodledata (created while installation, where all files/media is stored) and database. Now when I say  separately, means putting all three on different drives, so essentially you'll be setting up multiple RAID configurations for performance and redundancy.  Which RAID configuration you require depends on if you're setting up for Data Redundancy, performance or both - but remember each configuration comes with  its price. If I keep in mind the modern hardware (3 year old or newer) one box can easily serve 10,000 concurrent users if not more.

When it comes to high availability, you'll be setting up web farm/cluster (horizontal scaling), do not expect a horizontal scaling would speed up your  moodle, but surely can accommodate X more numbers of users, depending upon how many servers you're adding to your network. Now keep in mind, redundancy/high  availability doesn't only comes with server scaling, but you have to consider other parts of whole setup as well, like additional power source, additional  internet source etc. But i'll limit my post to server scaling only as network and power goes beyond the scope of this topic.

Before mentioning how to on windows server platform (as this is what you asked for), I'll quickly mention database, it is achieved by MASTER-SLAVE  replication, just to give you example, Open University UK are running a web-farm of 10 web servers with 2 database servers on MASTER-SLAVE. Now which  database you want to use is dependent upon your skills, as MOST of moodle installations are on MariaDB/MySQL, but when your database gets huge, PostGreSQL  or Microsoft's SQL Server are known to work more efficiently. If you want to know more about database replication or fail over clustering, Ken Task would be ideal person to ask to as he has more Database expertise than I have.

Now coming to setting up webfarm/cluster on windows based systems, there are THREE ways:

1: Using hardware based Load balancer: It's additional hardware that you setup BEFORE servers, and comes with cost of hardware and cost of setting it up,  and as name suggests balances the load of traffic across your web servers, and how it manages load again depends upon configuration. This hardware can be  used with Both Windows and Linux machines.

2: Using NLB (Network Load Balancer): This comes as a part of Windows Server family, making it a free choice. in a simple farm configuration, this is easy  to setup and will provide a fail over so in case one server fails users will automatically be switched to working server, although NLB allocates users  based on which server it gets to fastest, but this does not automatically provides a balanced user allocation to different servers, so essentially your  own server will be hitting the maximum while others remain free. One drawback is on SSL configured sites where end-end encryption is happening, if the  server fails and users are switched to other, because SSL certificates are installed on individual machines, by switching users will have to re-login. One  can setup NLB by installing NLB and NLB manager from server components, an additional IP will be required that will work as a farm/cluster IP, and your DNS  records will be pointing to that cluster IP and not machines, so users will be served by cluster IP and it will allocate users to different servers in your  network. maximum numbers of servers one can add to NLB cluster is 32 (that is true up to Windows Server 2012 R2, unsure about later versions they may have  more).

3: Using ARR (Application Request Routing): Where NLB has limitations, that you cannot monitor performance of your cluster, allocate client assignments,  setup cluster cache's etc (these are found in hardware load balancer), Microsoft has another piece of software that can do all that a hardware load  balancer does, but good thing it comes free as well. It's not part of server O/S, but is installed seperately with some dependencies that gets installed  automatically as when you setup ARR using Web Platform Installer (a script installer for Windows servers), in ARR you can allocate users based on many  different scenarios for example most popular configuration is round robin, where users are assigned to each server as when their requests comes in, so user  1 will be sent to server 1, user 2 will be sent to server 2 and so on..or as well you can set up user assignment by sending ODD numbers to one machine or  even numbers to other or simple sending users to machines dependent on load factor.

Now coming to last point, that being content replication, of course when setting up a server farm, you'll be replicating content (files added to course, or  files uploaded by users etc) across all machines, one way to do this is by setting up a separate file server, that all others web servers on cluster will  be fetching from and writing to, This file server can be replicated on its own, but considering when it comes to content type (like you may have videos)  one single source (one wire from network switch) serving multiple web servers will become bottle neck, even with upgraded network interface there will be penalty of latency. Windows server comes with DFS-R (Distributed File System - Replication), again a built in component, all you need is activating it.  folders like moodle and moodledata will be replicated across all web servers, so when content is added/updated on one, it will reflect across all.

Lastly, you'll be concentrating on vertical expansion in priority to serve more users and performance tuning, as managing multiple servers isn't as easy as  managing one box, I have mentioned above already how you'll be expanding server vertically, and its not just hardware, but software tuning required as well  to get the maximum out of one box solution, where Apache server on Linux or IIS on Windows have different performance tuning options one can make use of  OpCache (recommended by moodle), MemCache etc to soft tune the moodle installation (works on both windows and linux) when the limit of your hardware  reaches to its maximum, then you can always think of horizontal expansion.

I hope I have answered most of your question if not all, still if you need more information ask for it, there are people with core expertise on this forum that will assist you in particular interests.

P.S: Do not copy paste this on your diploma paper, or you'll get F grade 😛