FreeSWITCH; 2006’da Anthony Minessale tarafından başlatılan, modüler / multi-threaded mimari ile yazılmış açık-kaynak yumuşak switch (softswitch) ve ses uygulama platformudur. Asterisk’in modüler olmayan dialplan-driven yapısının aksine, FreeSWITCH olay tabanlı çalışır ve çekirdek + modül yaklaşımıyla istenen özellikler kütüphane gibi yüklenir.
FreeSWITCH’in güçlü olduğu alanlar: yüksek konkürans (10K+ eşzamanlı çağrı tek node’da), media-heavy işlemler (transcoding, conferencing, IVR’da TTS/ASR), WebRTC (mod_verto + native SIP-WSS) ve carrier-grade routing (Kamailio + FreeSWITCH klasik telekom mimarisi). Saf PBX iş yükü için Asterisk olgunluk + ekosistem avantajı sürdürür.
Mono’nun yaklaşımı
FreeSWITCH’i Mono ekibi özellikle kurumsal contact-center, WebRTC tabanlı iş uygulamaları ve carrier-grade ses projelerinde kullanır. Standart kurulum kararlarımız:
- Versiyon: FreeSWITCH 1.10.x stable; deneysel sürümler kullanılmaz.
- Modül seçimi: mod_pjsip (sip stack), mod_conference, mod_verto/mod_av (WebRTC + video), mod_event_socket (ESL).
- Dialplan: XML + mod_lua karışık; karmaşık iş kurallarında ESL ile Python uygulama.
- Storage: Recording → S3 uyumlu (Garage); CDR → MariaDB/PostgreSQL.
- HA: Aktif-pasif (Pacemaker + DRBD) veya Kamailio + dispatcher ile aktif-aktif.
- Security: TLS + SRTP zorunlu; SBC önünde (Kamailio + iptables).
- Observability: OpenSIPs/Kamailio metric’leri Prometheus, FreeSWITCH log → Loki, çağrı kalitesi (MOS) ölçümleri.
Tipik mimari (carrier-grade)
- SIP Trunk → Edge SBC (Kamailio) → routing/policy → FreeSWITCH cluster.
- FreeSWITCH instance’lar arasında mod_event_socket ile state replication (gerekli ise).
- Recording (mod_record_session) → local SSD → S3 archive.
- CDR/CDR-CSV/mod_cdr_pg_csv → PostgreSQL → BI dashboard.
- WebRTC client → HAProxy WebSocket sticky → FreeSWITCH WSS → conference room.
Yaygın sorunlar ve çözümler
- Yüksek CPU transcoding’de: Codec uyumsuzluğu (Opus ↔ G.729). Mümkün olduğunca uçtan uca aynı codec; transcoding’i yatay ölçeklendir.
- Yetersiz file descriptor:
ulimit -n 1048576; sysctlfs.file-max. - WebRTC ICE başarısızlık: STUN/TURN konfigürasyonu; firewall UDP port aralığı; symmetric NAT’ta TURN zorunlu.
- Conference audio bozulması: Codec ayarı (
conference-rate); jitter buffer; düşük QoS network’te 8000Hz’e düş. - ESL bağlantı kopması: Auth token rotation; retry with backoff; long-running connection’da heartbeat.