Как правильно организовать Remote Desktop Services?
При указанном количестве серверов RDSH (20 штук):
1. RD Connection Broker в режиме High Availability (минимум 2 сервера). Потянет за собой использование MS SQL (минимум 2 сервера в Availability Group)
2. RD Gateway (если требуется доступ к RDS снаружи и/или предполагается использовать HTML5 RDWeb), минимум 2 сервера для отказоустойчивости плюс синхронизация настроек (политики CAP и RAP, настройки локального NPS) - можно совместить на серверах RDCB
3. RD Licensing - не принципиально, компонент можно разместить на любом сервере, хоть на КД
4. RD Web - из коробки идет старый клиент (classic RDWeb), который использует ActiveX-компоненты и нормально работает только в IE. Если хотите Remote Desktop в любом браузере - ставьте HTML5 RDWeb (modern RDWeb), для установки требуется клиссический клиент и RD Gateway - можно совместить на серверах RDCB. Здесь есть один минус для modern RDWeb - требуется лицензирование на пользователя (Per User RDS CAL)
5. RD Session Hosts - используя RDCB, создаете нужные коллекции с необходимым доступом и прочими настройками и добавляете в них серверы RDSH
6. Балансировка RDCB, RDWeb, RD Gateway

Роли RDCB, RDWeb, RD Gateway можно совместить на одном сервере, чтобы уменьшить общее количество серверов.
ИМХО. Если нужна отказоустойчивость, я бы сделал так: 2 сервера под gateway, 2 под брокер, остальные в ферму. + 1 под SQL сервер это для брокера, для отказоустойчивости можно и 2 в Always On availability group. Но это если хочется замарочится.