Seri artikel menyoroti upaya untuk menciptakan sistem reaktif oleh satu orang dengan anggaran minimum dan dalam waktu sesingkat mungkin.
Tujuan percobaan:
- Pemahaman yang lebih mendalam tentang bidang subjek dan peningkatan keahlian teknis
- Identifikasi kekuatan dan kelemahan penggunaan bahasa fungsional dan proyek sumber terbuka dalam pengembangan sistem perdagangan
Artikel ini menyajikan bagian motivasi proyek dan penguraian tugas.
Saya berencana untuk memulai percobaan pada musim semi 2019, tetapi keadaan mengubah tenggat waktu. Karena itu, saya meminta maaf kepada beberapa pelanggan yang sedang menunggu artikel tentang topik ini.
Bagaimana saya bisa hidup seperti itu?
Ketika saya menyadari bahwa saya bosan dengan rutinitas proyek yang sedang berjalan, saya ingin melakukan sesuatu yang tidak biasa. Saya mempertimbangkan berbagai topik dan arahan, proses implementasi yang merupakan tantangan bagi saya. Persyaratan utama untuk proyek dirumuskan:
- Suatu bidang pengetahuan yang menarik minat saya;
- Sifat aplikasi yang terdistribusi dan mudah diakses;
- Kapasitas informasi tinggi dan volume besar karakteristik data yang tersimpan dari aplikasi intensif data;
- Manfaatkan proyek-proyek sumber terbuka.
Karena sudah ada beberapa pengalaman dalam mengembangkan gudang data objek, maka lahirlah ide untuk mengembangkan tema dan menulis implementasi baru dari penyimpanan yang kompatibel dengan s3 dengan menggunakan redundant coding dan fungsi hash yang cepat. Tetapi saya menginginkan sesuatu yang lebih menarik. Dari sudut pandang pengembang, sistem keuangan ingin tahu tentang pekerjaan mereka dalam mode waktu nyata dekat, sejumlah besar pembaruan dan jumlah data yang disimpan. Jadi saya memutuskan untuk menerapkan sistem pertukaran saya.
Tentang pertukaran
Dalam arti luas, pertukaran (dari Bursa lat - dompet) adalah pasar di mana penjual dan pembeli melakukan transaksi. Bergantung pada apa yang merupakan aset (instrumen) yang diperdagangkan, spesifikasi bursa ditentukan:
- komoditas, termasuk pertukaran tenaga kerja
- stok
- mata uang
- masa depan
Secara historis, pertukaran memang merupakan tempat di mana pembeli, penjual dan broker (perantara) berkumpul pada waktu yang ditentukan melalui mana transaksi dilakukan.
Fungsi utama pertukaran meliputi:
- Organisasi proses perdagangan pertukaran:
- Definisi aturan perdagangan sesuai dengan hukum yang berlaku
- Menetapkan standar produk
- Bahan dan kepegawaian
- Kegiatan informasi. Memberikan informasi tentang harga instrumen, pasar dan perusahaan;
- Pengembangan kontrak model;
- Penyelesaian perselisihan (arbitrase);
- Memberikan jaminan tertentu untuk pelaksanaan transaksi.
Pertukaran modern adalah lantai perdagangan terorganisir yang beroperasi sesuai dengan aturan khusus dan memusatkan penawaran dan permintaan. Ekonomi pertukaran juga sangat jelas, semakin banyak transaksi di bursa, semakin tinggi imbalan pertukaran untuk layanan yang diberikan.
Jadi, fitur-fitur umum dari solusi dapat dimengerti, sekarang perlu untuk membatasi jumlah pekerjaan sehingga implementasi ide dapat bertemu dalam waktu yang wajar.
MVP
Dari sumber daya terbatas mengikuti fungsi terbatas prototipe. Tetapi hal-hal vital dan mendasar perlu diimplementasikan sepenuhnya.
Dekomposisi masalah dan pemilihan arsitektur
Di sisi teknis, pertukaran adalah sistem antrian di mana peserta menghasilkan aliran panggilan - pesanan, dan sistem, menurut aturan yang diketahui sebelumnya, melakukan tindakan pada mereka.
Melayani pesanan harus dilakukan dengan jumlah waktu paling sedikit. Pertukaran harus toleran terhadap kesalahan dan sangat mudah diakses.
Kami membagi proyek menjadi bagian-bagian layanan dan publik. Bagian internal akan memungkinkan Anda untuk mengelola komponen platform dan proses perdagangan pertukaran. Bagian publik termasuk antarmuka interaksi pelanggan: API Web, API Perdagangan, subsistem pemberitahuan. Kedua bagian akan didasarkan pada platform aplikasi terdistribusi yang bertanggung jawab untuk skalabilitas dan keandalan sistem secara keseluruhan.
Karena kami dibatasi oleh anggaran, kami hanya akan menggunakan solusi open source yang telah terbukti untuk mengatur penyimpanan data. Untuk data sistem panas, Tarantool berlaku, dan untuk PostgreSQL dingin.
Kami akan menggambarkan komposisi sistem yang direncanakan (gambar dapat diklik):
Orang mendapat perasaan bahwa arsitektur dan desain tidak berbeda dari sistem konvensional. Di mana tantangannya? Untuk menjawab, pertimbangkan proses membuat pesanan dan menutup transaksi untuk pertukaran mata uang.
Pesanan pembuatan
- Periksa otorisasi
- Pastikan bahwa pengguna saat ini memiliki cukup dana untuk membuat pesanan.
- Buat pesanan
- Beri tahu pengguna tentang kreasi atau kesalahan yang berhasil
Kesepakatan penutupan
- Temukan pesanan berpasangan
- Periksa kecukupan dana pada neraca para pihak untuk menutup transaksi
- Perbaiki transaksi: transfer antar akun + transfer komisi pertukaran ke akun komisi pertukaran.
- Simpan riwayat pesanan yang dieksekusi.
- Perbarui data informasi: data perdagangan mentah dan data gabungan untuk grafik.
- Beri tahu semua pihak yang berkepentingan atas transaksi ini.
Kesulitan dimulai ketika kita berpindah dari monolit yang berjalan pada mesin yang sama ke sistem toleransi kesalahan yang disebarkan yang digunakan pada sebuah cluster. Saya meletakkan kinerja sistem minimum pada level 5-7k transaksi tertutup per detik untuk setiap pasar. Ini memberlakukan batasan tambahan pada arsitektur dan bekerja dengan data.
Mengikuti prinsip KISS, setiap aplikasi harus melakukan hanya fungsi-fungsi yang diperlukan untuk memproses entitas yang diterapkan di dalamnya: pasar, akun, otorisasi, dan sebagainya.
VTrade dibangun berdasarkan prinsip penskalaan horizontal. Setiap aplikasi dapat dijalankan dalam bentuk jamak. Ini memungkinkan Anda untuk mencapai toleransi kesalahan dan tingkat kinerja yang diperlukan.
Tumpukan teknologi
Agar tidak melipatgandakan entropi, kami membatasi bahasa dan teknologi yang digunakan.
Untuk server, set ini akan mencakup:
- Erlang Menurut saya, bahasa ideal untuk membangun infrastruktur.
- Karat. Sangat bagus untuk masalah sistem dan optimasi.
- PostgreSQL Sebagai basis utama untuk penyimpanan data jangka panjang
- Tarantool. Sebagai penyimpanan data panas (hanya untuk saat MVP)
- Clickhouse. Untuk menganalisis log dan kemampuan analitik yang mendalam.
- Linux Sistem harus mendukung distribusi modern.
Perangkat lunak klien diimplementasikan menggunakan kerangka Vue menggunakan Vuex.
Karena proyek pada awalnya melibatkan sejumlah besar komponen, untuk memastikan tingkat kualitas yang tepat dari solusi akhir, kami akan menulis sejumlah besar tes berbasis properti dan tes integrasi.
Tentang rencana
Dalam waktu dekat saya berencana untuk menganalisis dasar-dasar teori dan mempelajari dalam bidang-bidang berikut:
- Surat Perintah. Jenis, fitur pemrosesan. Aspek menyimpan informasi perdagangan.
- Buku waran. Representasi visual dari pasar.
- Riwayat tawaran. Cetakan, grafik, riwayat pribadi.
Seperti yang mereka katakan ... Jika tertarik, seperti, berlangganan)