简体中文
Turms adalah mesin pesan instan sumber terbuka tercanggih untuk 100K~10M pengguna bersamaan di dunia. Silakan merujuk ke Dokumentasi Turms untuk detailnya.
(Versi server demo: ghcr.io/turms-im/turms-admin:latest
, ghcr.io/turms-im/turms-gateway:latest
, ghcr.io/turms-im/turms-service:latest
)
turms-admin: http://playground.turms.im:6510
Akun dan kata sandinya adalah: guest
. (Akun diperbolehkan untuk menanyakan dan menambahkan data, namun tidak diperbolehkan untuk memperbarui dan menghapus data.)
turms-gateway: http://playground.turms.im:10510 (port untuk akses WebSocket) dan http://playground.turms.im:11510 (port untuk akses TCP)
turms-service (API Admin di lingkungan pengembang dengan data palsu didukung): http://playground.turms.im:8510
Prometheus: http://playground.turms.im:9090; Grafana: http://playground.turms.im:3000
Anda dapat menggunakan implementasi turms-client-(java/js/swift) apa pun untuk mengirim permintaan ke turms-gateway dan berinteraksi dengan pengguna lain.
Selain itu, Playground diatur secara otomatis hanya dengan satu perintah: ENV=dev,demo docker compose -f docker-compose.standalone.yml --profile monitoring up --force-recreate -d
Menjalankan perintah berikut untuk menyiapkan klaster minimum yang layak (termasuk turms-gateway, turms-service, dan turms-admin) dan server dependennya (klaster sharded MongoDB dan Redis) secara otomatis:
git clone --depth 1 https://github.com/turms-im/turms.git
cd turms
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
docker compose -f docker-compose.standalone.yml up --force-recreate
Setelah cluster diatur, Anda dapat mengunjungi turms-admin di http://localhost:6510, dan memasukkan akun dan kata sandi ( turms
secara default). Jika Anda berhasil login, berarti cluster Turms telah berhasil di-setup.
Anda juga dapat menerapkan modul Terraform yang disediakan oleh Turms untuk membeli layanan cloud dengan cepat dan menyiapkan cluster turms (menggunakan instans spot secara default). Setelah menjalankan terraform apply
, tunggu sekitar 3~15 menit (Alibaba Cloud ECS lambat dalam menarik gambar ghcr), lalu kunjungi http://<public IP>:6510
, jika Anda dapat mengakses turms-admin, itu berarti cluster turms telah berhasil diatur.
(Catatan: Perintah berikut akan secara otomatis membeli layanan cloud dan memotong biaya terkait dari akun Anda)
git clone --depth 1 https://github.com/turms-im/turms.git
cd turms/terraform/alicloud/playground
export ALICLOUD_ACCESS_KEY= < your_access_key >
export ALICLOUD_SECRET_KEY= < your_secret_key >
terraform init
terraform apply
Arsitektur Turms bergantung pada desain baca fanout untuk membuat kotak masuk (atau garis waktu pesan), dan Turms mendukung model dorong, model tarik, dan model dorong-tarik untuk menyadari perubahan data bisnis (Untuk detailnya, Kesadaran Perubahan Data Bisnis ). Sebagian besar detail desain lainnya juga berasal dari proyek IM komersial.
Dan dibandingkan dengan banyak proyek dengan tumpukan teknologi yang sudah ketinggalan zaman, Turms juga merupakan satu-satunya solusi IM open source yang didasarkan pada arsitektur modern dan teknologi modern serta cocok untuk aplikasi skala menengah hingga besar.
Selain itu, desain arsitektur merupakan seni trade-off. Beberapa produk IM menggunakan fitur yang kaya sebagai slogannya tanpa memerlukan dukungan untuk aplikasi skala menengah hingga besar (produk ini hanya cocok untuk komunikasi tim). Namun, Turms menjadikan kinerja ekstrem sebagai prioritas pertama dan mendukung fitur IM yang lengkap (bukan kaya) untuk mendukung aplikasi skala menengah dan besar. Silakan merujuk ke Desain dan Observabilitas Skema Turms untuk detailnya.
Saat Anda perlu membandingkan Turms dengan proyek IM sumber terbuka lainnya untuk mendapatkan fitur, Anda dapat terlebih dahulu membandingkan Turms dengan proyek IM sumber terbuka lainnya berdasarkan fitur Turms berikut. Biasanya, Anda dapat menemukan perbedaan antara proyek IM profesional dan proyek IM amatir. Selain itu, di bawah bab Product Comparison
, kami juga menyebutkan kekurangan proyek Turms untuk referensi Anda.
Catatan: Kerugian utama dari proyek Turms saat ini adalah tidak menyediakan dukungan untuk ruang tamu/ruang obrolan. Implementasi teknis ruang tamu/obrolan tidak sulit, tetapi persyaratan produk, persyaratan atribut kualitas, dan kondisi pembatasan sangat berbeda dari skenario aplikasi sosial pada umumnya, sehingga Turms versi pertama tidak memberikan dukungan untuk itu. Selain itu, Turms juga tidak cocok untuk skenario komunikasi perusahaan skala kecil. Menggunakan Turms untuk skenario komunikasi perusahaan sama saja dengan menggunakan palu godam, karena komunikasi perusahaan menekankan kinerja yang kaya fitur dan bukan kinerja ekstrem, yang tidak sejalan dengan tujuan Turms, sehingga desainnya juga berbeda. Jika Anda ingin mendukung skenario komunikasi perusahaan, Anda perlu mengembangkannya sendiri berdasarkan Turms.
Sistem yang dapat diamati (Silakan lihat Observabilitas untuk detailnya)
Log (untuk acara): Turms menyediakan tiga jenis log: log pemantauan, log bisnis, dan log statistik
Metrik (untuk data gabungan). Ini mencerminkan status sistem dan data bisnis secara real-time
Pelacakan
Perhatikan bahwa server Turms akan menyediakan lebih banyak fitur pemantauan yang dapat diterapkan seefisien mungkin, tetapi tidak akan menyediakan beberapa fitur umum yang berdampak besar pada kinerja dan lebih cocok untuk disediakan oleh layanan pihak ketiga (seperti DAU) . Untuk fitur tambahan semacam ini, Anda dapat menerapkannya dengan analisis log atau metrik server Turms secara offline atau real-time.
Performa ekstrem Kami selalu berusaha mengarsipkan performa ekstrem dalam penerapan seluruh alur kerja bisnis. Silakan merujuk ke kode sumber untuk detailnya.
Nama | Ringkasan |
---|---|
gerbang turms | Gerbang (server push) yang berinteraksi dengan klien, dan bertanggung jawab atas otentikasi pengguna, manajemen sesi, pemberitahuan push, dan penyeimbangan beban untuk server layanan turms |
layanan turms | Menerapkan logika bisnis IM, dan memberi admin manajemen data bisnis, RBAC, manajemen cluster |
turms-admin | Menyediakan fitur seperti manajemen data bisnis dan manajemen cluster untuk cluster server Turms |
turms-client-js | Mengekspos API untuk berinteraksi dengan server Turms untuk mengimplementasikan fitur IM, logika driver yang mendasari (seperti detak jantung) dan berbagi koneksi WebSocket antar tab. Anda tidak perlu mengetahui implementasinya karena transparan bagi pengembang |
ternyata-klien-kotlin | Mengekspos API untuk berinteraksi dengan server Turms guna mengimplementasikan fitur IM dan logika driver yang mendasarinya (seperti detak jantung). Anda tidak perlu mengetahui implementasinya karena transparan bagi pengembang |
ternyata-klien-cepat | dito |
ternyata-klien-panah | dito |
plugin turms | Ketika peristiwa (seperti pengguna online/offline, penerimaan dan penerusan pesan, dll) diaktifkan, turms-gateway dan turms-service akan memicu plugin khusus yang sesuai untuk memfasilitasi pengembang menerapkan fitur khusus |
turms-plugin-antispam | Sebuah plugin berdasarkan turms-plugin untuk perlindungan anti-spam menggunakan Aho-Corasick automaton dengan double array trie (Kompleksitas waktu deteksi adalah O(n), dan n adalah panjang titik kode string target) |
turms-plugin-minio | Sebuah plugin berdasarkan turms-plugin untuk layanan penyimpanan, dan digunakan untuk berinteraksi dengan server MinIO |
turms-plugin-rasa | Sebuah plugin berdasarkan plugin turms untuk chatbot, dan digunakan untuk berinteraksi dengan server Rasa |
data turm (TODO) | Belum dipublikasikan. Sistem analisis data independen berdasarkan ekosistem Flink bertanggung jawab atas analisis data bisnis, dan menyediakan dukungan data mendasar untuk API statistik turms untuk admin dan laporan operasional turms-admin |
Desain arsitektur Turms berasal dari arsitektur pesan instan komersial. Gambar berikut menunjukkan arsitektur referensi Turms. Layanan yang dibingkai dengan garis putus-putus adalah layanan opsional, sedangkan layanan yang dibingkai dengan garis padat adalah layanan wajib. Silakan merujuk ke Desain Arsitektur Turms untuk detailnya.
Meskipun ada banyak proyek IM open source di dunia, hanya ada satu proyek IM open source yang dirancang untuk skenario aplikasi IM menengah dan besar: Turms.
Roket.Obrolan | Cloud IM sumber tertutup | Turm | |
---|---|---|---|
Skenario aplikasi | Komunikasi tim | Skenario IM umum | Skenario umum IM skala menengah hingga besar (Memungkinkan pembangunan kembali Turm) (Catatan: Turms versi pertama tidak menyediakan dukungan untuk ruang tamu/ruang obrolan) |
Keuntungan | 1. Menyediakan layanan cloud hanya dengan mengklik mouse untuk memulai cluster dan menyediakan layanan 2. Implementasi klien bersifat lintas platform dan out-of-the-box bagi pengguna 3. Mendukung rangkaian UI yang lengkap dan terpadu 4. Mendukung fitur pesan instan canggih yang kaya, seperti konferensi audio dan video, berbagi file, berbagi layar 5. Memberikan dukungan teknis kepada pengguna komersial | 1. Menyediakan layanan cloud hanya dengan mengklik mouse untuk memulai cluster dan menyediakan layanan 2. Implementasi klien bersifat lintas platform dan out-of-the-box bagi pengguna 3. Mendukung rangkaian UI yang lengkap dan terpadu 4. Mendukung fitur pesan instan canggih yang kaya, seperti konferensi audio dan video, berbagi file, berbagi layar 5. Memberikan dukungan teknis kepada pengguna komersial | Kelebihannya adalah fitur-fitur yang dijelaskan di atas |
Kekurangan | 1. Hanya cocok untuk aplikasi skala kecil 2. Skenario aplikasi yang sempit dan sulit untuk disesuaikan | 1. Ini adalah sumber tertutup dan tidak dapat dikustomisasi. Setiap proyek pasti akan memiliki persyaratan bisnis baru setelah pertumbuhan bisnis, yang perlu disesuaikan. Namun, cloud IM tidak menyediakan layanan khusus atau memerlukan biaya penyesuaian yang tinggi, dan mereka mungkin salah memahami kebutuhan Anda, sehingga menghasilkan fitur khusus yang tidak dapat memenuhi kebutuhan bisnis Anda dengan baik. Dibutuhkan kerja sama jangka panjang agar dapat bekerja dengan baik dengan mereka. Namun berdasarkan Turms, kebutuhan Anda dapat diterapkan dan disediakan dengan cepat, dan biayanya rendah. Catatan: Untuk detail kompleksitas IM, Anda dapat merujuk ke Desain Skema 2. Privasi Data. Semua informasi pengguna dan data pesan Anda disimpan di cloud IM, yang dapat mengintip dan menggunakan data Anda. Khusus untuk beberapa perusahaan IM kecil, keamanan datanya tidak terjamin sama sekali, bahkan Anda harus menanggung risiko kehilangan data yang tidak dapat dipulihkan. 3. Semakin sering Anda menggunakan cloud IM, semakin Anda mengandalkannya, semakin mahal harganya. Sebagian besar cloud IM memberikan kuota gratis atau masa uji coba tertentu, namun setelah skala pengguna produk Anda bertambah, Anda harus membayar biaya penggunaan yang tinggi atau menghentikan penggunaan untuk mulai mengembangkan server IM Anda sendiri 4. Dukungan teknis tidak tepat waktu. Cloud IM perlu memberikan dukungan teknis kepada banyak pelanggan pada saat yang sama, dan dukungan untuk produk Anda mungkin tertinggal | 1. Hanya memenuhi kebutuhan pesan instan umum, dan tidak menyediakan beberapa fitur lanjutan (misalnya, tidak ada dukungan untuk konferensi audio dan video) 2. Turms versi pertama tidak mendukung ruang tamu/ruang obrolan 3. Server Turms hanya menyediakan data mentah berupa metrik/log, dan tidak menyediakan fungsi seperti analisis dan alarm 4. Sistem administrasi turms-admin berbasis web tidak menyediakan fitur operasi lanjutan saat ini5. Tidak ada dukungan untuk logika bisnis dan UI tertentu 6. Server bersifat reaktif, yang merupakan tantangan bagi sebagian pengembang |
Komentar | Sangat disarankan untuk menggunakan Rocket.Chat untuk komunikasi tim | Jika skenario bisnis IM di produk Anda sangat umum, dan tidak ada persyaratan khusus, dan bisnis IM bukan bisnis utama produk Anda, disarankan untuk menggunakan cloud IM. Namun jika tidak ada persyaratan khusus, usahakan untuk tidak menggunakan IM cloud yang disediakan oleh perusahaan kecil, jika tidak keamanan data Anda tidak akan terjamin | Meskipun keduanya merupakan proyek IM open source, keduanya memiliki skenario aplikasi yang sangat berbeda. Turms adalah mesin pesan instan umum untuk aplikasi pesan instan skala menengah hingga besar. Anda tidak bisa begitu saja menyerahkan Turms kepada pelanggan Anda (sama seperti sebagian besar produk tidak mengizinkan pelanggan menulis pernyataan SQL untuk menanyakan data bisnis di database). Namun, berdasarkan Turms, Anda dapat mengimplementasikan semua proyek perpesanan instan sumber terbuka di GitHub dengan lebih efisien, komprehensif, dan ekstensif |
Mengingat posisi Turms, kami tidak berencana untuk menyediakan demo klien dengan UI dan logika bisnis tertentu dalam waktu dekat karena.
Mudah bagi pengembang untuk memverifikasi fitur bisnis yang didukung oleh Turms. Jika Anda hanya ingin menguji fitur bisnis Turms, Anda dapat menjalankan server Turms bahkan tanpa mengetikkan satu baris kode pun. Hanya sepuluh baris kode yang dapat mewujudkan login, mengirim pesan, mengirim permintaan pertemanan dan fitur bisnis lainnya, atau memodifikasi properti untuk menyesuaikan berbagai kebutuhan.
Desain dan implementasi demo terkait erat dengan skenario bisnis spesifik, bahasa pemrograman spesifik, arsitektur teknis spesifik, dan OS spesifik, sementara Turms telah berkomitmen untuk secara efisien memenuhi berbagai skenario pesan instan yang kompleks dan menantang, dan kami tidak ingin melakukannya mempublikasikan demo yang membatasi imajinasi pengembang. Dan mengembangkan serta memelihara demo juga sangat memakan waktu dan akan memperlambat kemajuan pengembangan Turms.
Saat ini, Anda hanya perlu "mengobrol" dengan GPT-3.5 dan GPT-4 untuk mewujudkan solusi teknis khusus dan desain UI. Ambil teks sebagai contoh masukan (selain itu, GPT-4 mendukung masukan gambar, dan Anda juga dapat menggambar wireframe UI untuk menyarankan cara mendesain UI).
Harap terapkan jendela obrolan layanan pelanggan yang berjalan di ujung web berdasarkan Vue3, Vite, Eslint, dan teknologi lainnya. Persyaratan khusus.
- Gaya desain UI perlu mengacu pada: Ant Design
- Jendela obrolan harus dibagi menjadi tiga bagian: di bagian atas, nama layanan pelanggan harus ditampilkan; di tengah, pesan obrolan antara pengguna dan layanan pelanggan harus ditampilkan; dan di bagian bawah, kotak input teks dan tombol kirim harus disediakan untuk memungkinkan pengguna memasukkan teks dan mengirim pesan.
- Jendela obrolan harus selalu ditampilkan di sudut kanan atas halaman
- Anda perlu berasumsi bahwa jendela obrolan didasarkan pada protokol WebSocket untuk berkomunikasi dengan server backend untuk masuk, mengirim pesan, menerima pesan, dll.
- Anda perlu memberikan struktur proyek dan semua implementasi kode spesifik dalam proyek berdasarkan solusi desain komponen UI
GPT dapat segera menyediakan implementasi kode yang sesuai, dan Anda dapat terus "mengobrol" dengannya berdasarkan berbagai skenario (Anda dapat membiarkan GPT menyediakan dan membandingkan beberapa skenario) untuk menyempurnakan desain UI dan implementasi kodenya agar implementasi akhir dapat diselesaikan. untuk ide Anda.
Proyek Turms dilisensikan di bawah lisensi Apache License 2.0
, jadi kami tidak peduli apakah pengguna berencana mendapatkan keuntungan dari proyek Turms. Kami hanya mewajibkan pengguna untuk mematuhi lisensi Apache License 2.0
dalam karya Anda, seperti dokumen, video, kode, dll., untuk menyebutkan informasi proyek Turms, seperti:
Original Project Name:turms-im/turms
Original Project:https://github.com/turms-im/turms
Original Project Documentation:https://turms-im.github.io/docs
Bagaimana proyek Turms menguntungkan?
Kita tidak perlu untung saat ini. Tentu saja, kami tidak mengecualikan keuntungan, namun kami tidak akan dengan sengaja menulis dokumen yang buruk atau melakukan pekerjaan yang buruk demi mendapatkan konsultasi, pelatihan, dan biaya lainnya. Hal lain yang perlu disebutkan adalah memang banyak proyek open source (tertutup) yang mendapatkan biaya dukungan layanan dengan sengaja menulis dokumen yang buruk dan melakukan pekerjaan yang buruk.
Jika organisasi pencari keuntungan, seperti lembaga pelatihan atau perusahaan, mengutip dokumen Turms, atau bahkan menjual proyek Turms sebagai layanan SaaS, apakah organisasi pencari keuntungan ini perlu memperhatikan sesuatu?
Kami tidak peduli apakah tim Anda berencana mendapat untung dari proyek Turms. Tim Anda hanya perlu mematuhi lisensi Apache License 2.0
dan menyebutkan informasi proyek Turms seperti yang disebutkan di atas.
Proyek Turms cocok untuk membuat layanan SaaS, lalu mengapa proyek Turms tidak mengadopsi lisensi AGPL atau SSPL?
Saat ini kami tidak perlu mendapat untung, dan kami tidak berencana mendapat untung. Kami hanya mewajibkan pengguna untuk mematuhi lisensi Apache License 2.0
.
Jika proyek Turms tidak menguntungkan, bagaimana kualitas proyeknya?
Dokumentasi dan kode sumber kami telah menjawab pertanyaan ini untuk kami, dan dalam komunitas open source, tidak ada proyek IM open source yang dapat bersaing dengan proyek Turms dalam skenario aplikasi IM menengah dan besar. Hal lain yang perlu disebutkan adalah bahwa proyek komersial tidak berarti berkualitas tinggi, dan bahkan kualitas dokumentasi dan kode untuk banyak proyek komersial sangat mengejutkan.
Apakah Turms menggunakan perjanjian lisensi ganda atau memiliki biaya tersembunyi?
Tidak. Beberapa proyek gratis untuk penggunaan pribadi dan dikenakan biaya untuk penggunaan komersial, menggunakan perjanjian lisensi ganda, atau memiliki banyak biaya tersembunyi. Proyek Turms dilisensikan di bawah lisensi Apache License 2.0
, dan tidak dikenakan biaya. Beberapa proyek mengklaim sebagai perangkat lunak sumber terbuka, padahal sebenarnya tidak. Untuk detailnya, silakan lihat Definisi Open Source.
Terutama dikembangkan di IntelliJ IDEA dan CLion.
Lisensi disediakan oleh Tim Dukungan Komunitas JetBrains.