GloryAdmin adalah kerangka latar belakang berdasarkan springboot2.1.9.RELEASE dan vue-admin-template;
GloryAdmin menggunakan manajemen izin berbasis peran. Pohon peran adalah pohon dengan "Administrator Sistem" sebagai simpul akar, dan pohon izin terdiri dari beberapa pohon sub-izin. "Administrator sistem" memiliki semua izin; peran non-administrator sistem dapat melihat informasi peran saat ini dan peran bawahan langsung, tetapi hanya dapat menambah, menghapus, dan mengubah informasi peran bawahan langsung (bawahan langsung: A adalah bawahan langsung). bawahan dari B, maka A must adalah simpul anak dari B).
Kemuliaan-Admin
proyek | teknologi |
---|---|
Proyek ujung belakang | boot musim semi |
Proyek ujung depan | Elemen UI & Vue.js |
basis data | MySQL |
cache | ulang |
Proyek ini menggunakan database mysql, Anda dapat menggunakan skrip database untuk membuat 2 database multi_module_db multi_module_db_01
Mulai di latar belakang dan gunakan port 28081
Mulai ujung depan dan gunakan port 9523
Buka browser dan kunjungi http://localhost:9523 admin a123456
Inti dari sharding atau sharding adalah kegagalan Hukum Moore. Solusi penyimpanan data terpusat pada satu node data sulit memenuhi skenario data Internet yang sangat besar dalam hal kinerja, ketersediaan, serta biaya pengoperasian dan pemeliharaan.
Sebuah database tunggal tidak dapat mendukung bisnis yang ada, sehingga sub-database dan tabel telah muncul, dan beberapa database digunakan untuk penyimpanan data. Pemahaman sederhana tentang sub-database dan sub-tabel adalah bahwa isi keranjang terbatas, sehingga mempengaruhi efisiensi dan kapasitas pencarian. Isi keranjang dibagi menjadi N bagian dan ditempatkan di keranjang yang berbeda. Hal ini menghilangkan batasan kapasitas dan meningkatkan efisiensi kueri.
Lalu mari kita bicara tentang database terdistribusi. Yang lebih populer di Tiongkok termasuk TDSQL dari Tencent, OceanBase dari Alibaba, PolarDB, GaussDB dari Huawei, dll. Pada dasarnya, mereka dikembangkan secara independen, dengan konsistensi yang kuat dan ketersediaan tinggi, arsitektur penerapan global, terdistribusi ekspansi horizontal tanpa batas, kinerja tinggi, ratusan miliar catatan, dan transaksi lintas baris dan lintas tabel pada ratusan TB data (seperti untuk ibu pertiwi) . Basis data terdistribusi menyembunyikan strategi sharding basis data dan sharding tabel, dengan cerdas memecah data ke dalam basis data dan tabel, dan menggunakannya seperti mengoperasikan basis data.
Karena operasi memori dan operasi disk tidak memiliki urutan besarnya sama sekali, proyek besar memerlukan lapisan buffer tipe memori untuk database tipe disk untuk menyimpan data disk ke dalam memori. Lapisan cache data digunakan untuk menyimpan cache data seluruh lapisan data untuk mempercepat akses situs. Proyek ini menggunakan teknologi AOP dan database dalam memori Redis sebagai lapisan cache data. Silakan periksa kode com/spring/common/aop/CacheDaoAspect.java untuk detailnya.
Proyek ini menggunakan sharding JDBC untuk memproses database dan tabel database. Pisahkan sendiri datanya sesuai dengan skenario bisnis.
Biasanya proyek hanya memiliki satu database, dan druid Alibaba Cloud lebih sering digunakan di Tiongkok sebagai kumpulan koneksi database. Proyek ini menggunakan mysql, druid, dan sharding JDBC. Prinsip sharding data adalah memelihara beberapa kumpulan koneksi database dalam program, dan setiap kumpulan koneksi database berhubungan dengan database. Basis data sharded dan tabel sharded menggunakan pemrosesan transaksi dua fase berdasarkan protokol XA . Jalur konfigurasi com.spring.common.config.shardingJDBC
Pemisahan vertikal: Metode pemisahan bisnis disebut sharding vertikal, juga dikenal sebagai pemisahan vertikal. Distribusikan tabel ke database berbeda menurut bisnis, sehingga mendistribusikan tekanan ke database berbeda.
Pemisahan horizontal: Ini tidak peduli dengan klasifikasi logika bisnis, tetapi menyebarkan data ke beberapa perpustakaan atau tabel sesuai dengan aturan tertentu melalui bidang tertentu (atau beberapa bidang) dari tabel tertentu. Aturan di sini dan algoritma yang terlibat disebut algoritma sharding .
( Konten berikut diambil dari dokumentasi shardingJDBC )
Sesuai dengan PreciseShardingAlgorithm, digunakan untuk menangani skenario =
dan IN
sharding menggunakan satu kunci sebagai kunci sharding. Perlu digunakan dengan StandardShardingStrategy.
Sesuai dengan RangeShardingAlgorithm, yang digunakan untuk menangani skenario sharding menggunakan BETWEEN AND
, >
, <
, >=
, dan <=
menggunakan satu kunci sebagai kunci sharding. Perlu digunakan dengan StandardShardingStrategy.
Sesuai dengan ComplexKeysShardingAlgorithm, yang digunakan untuk menangani skenario ketika beberapa kunci digunakan sebagai kunci sharding untuk sharding. Logika yang berisi beberapa kunci sharding itu rumit, dan pengembang aplikasi harus menangani sendiri kompleksitasnya. Perlu digunakan dengan ComplexShardingStrategy.
Sesuai dengan HintShardingAlgorithm, yang digunakan untuk menangani skenario yang menggunakan sharding baris Hint
. Perlu digunakan dengan HintShardingStrategy.
Pengguna masuk untuk mendapatkan token dan menyimpannya secara lokal (adminLogin)
Pengguna mengirimkan token untuk mendapatkan informasi pengguna dan informasi izin, dan menyimpannya di toko. Karena F5 akan menyebabkan penyimpanan hilang, pencegat ditambahkan ke permintaan front-end. Jika tidak ada informasi pengguna dan informasi izin, informasi pengguna dan izin akan diperoleh kembali (getAdminInfo)
Apa yang dikembalikan di sini adalah semua izin pengguna, bukan peran. Pengguna secara dinamis menghasilkan rute front-end.
asyncRoutes adalah izin yang dibuat secara dinamis. Jika izin pengguna sesuai dengan izin rute, izin tersebut akan ditampilkan;
umum: operasi data, cache data, operasi transaksi
Admin hanya berfungsi sebagai pengontrol, yang digunakan untuk menangani penerusan antara permintaan pengguna dan bisnis back-end. (Mengapa dirancang seperti ini?) Karena beberapa sistem middleware perlu menggunakan kerangka RPC untuk meneruskan permintaan, dan karena beberapa sistem rahasia tidak suka menggunakan springMVC dan memilih vertx untuk mengembangkan lapisan permintaan secara mandiri.
Gunakan warisan Maven untuk mengelola dependensi proyek. Dalam Modul, dependensi diperkenalkan melalui dependencyManagement dan versinya ditentukan. Subproyek mewarisi Modul dan tidak perlu menentukan versi saat memperkenalkan dependensi.
Pemrosesan log global
Log operasi pengguna menggunakan metode anotasi. Jika metode ini perlu mencatat log operasi, cukup tambahkan anotasi **@OperateLog** di atas nama metode.
@ OperateLog
@ ApiOperation ( value = "登出" , notes = "登出" )
@ GetMapping ( Route . Admin . adminLogout )
public ResponseDate adminLogout ( HttpServletRequest httpServletRequest ) {
AdminInfoDTO adminInfoDTO = AdminTool . getAdminUser ( httpServletRequest );
AdminUser adminUser = adminUserMapper . selectByPrimaryKey ( adminInfoDTO . getAdminUk ());
adminUser . setNowToken ( "log-out" );
int result = adminUserService . updateAdminToken ( adminUser );
return ResponseDate . builder ()
. success ( result == 1 )
. build ();
}