Berbagi teknologi

Awan Musim Semi

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Apa itu layanan mikro?

1. Konsep dasar

Layanan mikro adalah agaya arsitektur(Berbeda dari arsitektur monolitik, arsitektur vertikal, arsitektur terdistribusi, dan arsitektur SOA), aplikasi dibagi menjadi layanan yang lebih kecil dan digerakkan oleh proses.

2. Karakteristik layanan mikro

  1. Ringan: Membagi sistem atau layanan yang kompleks secara vertikal, dan setiap layanan mikro berfokus pada penyelesaian masalah khusus.
  2. Kopling rendah: Setiap layanan terpisah tidak bergantung satu sama lain dalam hal kode, sumber daya, dan lingkungan, dan dapat dikembangkan, diuji, diterapkan, dan dipelihara secara independen, yang bermanfaat bagi stabilitas sistem (dampaknya berkurang ketika ada masalah terjadi) dan perluasan (memperluas sumber daya) penilaian sumber daya lebih mudah dan kurang berisiko).
  3. Lintas platform: Layanan mikro yang berbeda dapat menggunakan bahasa pengembangan yang berbeda dan berjalan di lingkungan yang berbeda.

2. Apa itu SpringCloud?

1. Konsep dasar:

Awan Musim Semi adalah aKerangka kerja layanan mikro , yang menyediakan berbagai solusi sistem terdistribusi. Memberikan kemampuan seperti pengembangan dan penerapan layanan mikro, pendaftaran dan penemuan layanan, tata kelola layanan, serta pengoperasian dan pemeliharaan layanan melalui komponenisasi.

2. Komponen yang umum digunakan:

1)Awan Musim Semi Netflix:

Eureka: pusat pendaftaran

Pita: penyeimbangan beban

Berpura-pura: panggilan jarak jauh

Hystrix: pemutus sirkuit servis

Zuul/Gerbang:Gerbang

2)Spring Cloud Config: Alat manajemen konfigurasi terpusat, penyimpanan eksternal konfigurasi aplikasi, dapat digunakan untuk aplikasi Spring atau non-Spring.

3)Spring Cloud Bus: bus peristiwa dan pesan, digunakan untuk menyebarkan perubahan status atau peristiwa perubahan konfigurasi di cluster.

4)Spring Cloud Consul: Alat penemuan dan konfigurasi layanan, terintegrasi secara mulus dengan container Docker.

5)Spring Cloud Security: Perangkat keamanan yang menyediakan dukungan untuk keamanan dan autentikasi aplikasi.

6)Spring Cloud Sleuth: penelusuran rantai panggilan terdistribusi, kompatibel dengan penelusuran Zipkin, HTrace, dan ELK.

7)Spring Cloud Cluster: Pemilihan pemimpin, dilaksanakan melalui abstraksi Zookeeper, Redis, dan Consul.

8)Aliran Data Spring Cloud: Orkestrasi layanan mikro, mudah digunakan melalui antarmuka drag-and-drop atau REST API.

9)Spring Cloud Stream: Kerangka kerja layanan mikro berbasis peristiwa yang ringan untuk membangun aplikasi yang terhubung ke sistem eksternal dengan cepat.

10)Spring Cloud Task: Kerangka kerja layanan mikro jangka pendek untuk membangun aplikasi dengan cepat yang menyelesaikan tugas pemrosesan data batch.

3. Langkah-langkah menggunakan komponen SpringCloud

tutorial springcloud--3. Mekanisme pemutus sirkuit layanan mikro, penjelasan rinci tentang penggunaan pemutus sirkuit hystrix_Cara mengkonfigurasi pemutus sirkuit java-blog CSDN

tutorial springcloud--4. Penjelasan detail tentang penggunaan gateway zuul_zuul tutorial penggunaan-blog CSDN

1. Hystrix (sekering, downgrade, pembatas arus)

1) Apa fungsinya?

adadalam sistem terdistribusi , jika node layanan gagal atau terjadi kelainan pada jaringan, pemanggil mungkin diblokir dan menunggu. Jika batas waktu diatur ke waktu yang lama, sumber daya pemanggil mungkin habis.Hal ini pada gilirannya menyebabkan habisnya sumber daya di sistem hulu pemanggil, yang pada akhirnya mengakibatkanlongsoran sistem . Pemutus sirkuit dapat secara efektif mencegah longsoran servis.

Jika Anda mengalami peningkatan lalu lintas secara tiba-tiba, pendekatan umumnya adalah melakukan hal tersebutFungsi bisnis non-intiLangkah-langkah degradasi layanan diadopsi untuk melindungi layanan normal dari fungsi bisnis inti, sedangkan untuk layanan fungsional inti, langkah-langkah pembatasan yang ada perlu diambil.

2) Apakah ini terjadi di sisi klien atau di sisi server?

Pemutus sirkuit servis:umumnya Ini terjadi di sisi server (tujuannya adalah agar pemanggil gagal dengan cepat). Ketika layanan habis atau tidak normal, hal ini menyebabkan sekring, mirip dengan sekring di kehidupan nyata. (Terkadang juga dapat dikonfigurasi pada klien agar gagal dengan cepat ketika pengecualian ditemukan saat memanggil layanan tertentu);
Degradasi layanan: umumnya terjadi di sisi klien. Mengingat beban permintaan situs web secara keseluruhan, ketika layanan terputus atau dimatikan, layanan tidak akan dipanggil lagi (terkadang juga dapat dikonfigurasi di sisi server, ketika sistem memilikinya lalu lintas tiba-tiba, fungsi inti akan diturunkan versinya untuk melindungi fungsi inti);

Pembatasan saat ini: biasanya terjadi di sisi server;

3) Cara menggunakan

  • kehancuran:

@EnableCircuitBreaker: diaktifkan pada aplikasisekering

@HistrixCommand(fallbackMethod="xxxFallback",propertiperintah = {
}): Anotasi fusi ditambahkan ke anotasi penurunan versi. Isi kondisi fusi di commandProperties = {}. Klik untuk kondisi fusi tertentu.Manajer Properti HystrixMemeriksa.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • Turunkan versi:

Buat kelas xxxFallbackFactory baru untuk mengimplementasikan FallbackFactory dan ganti metode pembuatan.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix terintegrasi ke Feign

Atau tentukan metode fallback langsung pada metode: @HistrixCommand(fallbackMethod="xxxFallback")

  • Membatasi:

        1、Strategi pembatasan saat ini:

1), batas arus semaphore

Semaphore digunakan untuk mengontrol jumlah thread secara bersamaan. Tentukan jumlah lisensi virtual internal melalui konstruktor.

Jika teknologi isolasi semaphore digunakan, setiap kali permintaan diterima, thread layanan itu sendiri langsung memanggil layanan dependen. Semaphore setara dengan pos pemeriksaan. Setelah setiap thread melewati pos pemeriksaan, jumlah semaphore berkurang 1. Ketika itu adalah 0, tidak lagi Thread diizinkan untuk lewat, tetapi logika fallback langsung dieksekusi dan dikembalikan.

Semafor dapat diartikan sebagai amenangkal, penghitung menghitung jumlah permintaan yang sedang diproses ketika nilai penghitung mencapai nilai yang ditetapkan, permintaan berikutnya tidak akan diterima (atau diturunkan versinya) dan Anda harus menunggu hingga nilai penghitung kurang dari nilai yang ditetapkan sebelum permintaan berikutnya dapat. diproses.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2), batas arus kumpulan thread

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

Catatan di sini: dijavaDi kumpulan thread, jika jumlah thread melebihicoreSize, permintaan pembuatan thread akan masuk ke antrian terlebih dahulu. Jika antrian sudah penuh, thread akan terus dibuat hingga jumlah thread mencapaimaximumSize , dan kemudian mengadopsi strategi penolakan.Namun ada parameter tambahan di kumpulan thread yang dikonfigurasi oleh hystrixqueueSizeRejectionThreshold,jikaqueueSizeRejectionThreshold < maxQueueSize, jumlah antrian mencapaiqueueSizeRejectionThresholdakan mengadopsi strategi penolakan, jadimaximumSize gagal.jikaqueueSizeRejectionThreshold > maxQueueSize, jumlah antrian mencapaimaxQueueSizejam,maximumSizevalid, sistem akan terus membuat thread hingga jumlahnya mencapaimaximumSize

      2. Perbedaan antara pembatasan arus semaphore dan pembatasan arus kumpulan thread:

1) Tingkat kinerja: Semaphore menggunakan thread asli dan memiliki konsumsi kinerja yang rendah;

2) Tingkat stabilitas sistem: Kumpulan thread diisolasi, dan masalahnya sendiri tidak akan memengaruhi kumpulan thread lainnya;

3) Sinkron dan asinkron: Karena semaphore adalah thread asli yang digunakan, maka semaphore bersifat sinkron dan memblokir.

        3. Skenario penggunaan strategi pembatas saat ini:

Ketika volume permintaan sangat intensif dan overhead isolasi thread relatif tinggi, disarankan untuk menggunakan semaphore untuk mengurangi beban. Situasi ini biasanya digunakan untuk menangani permintaan non-jaringan (tanpa memanggil layanan eksternal). Disarankan untuk menggunakan metode kumpulan thread dalam skenario lain.

4) Apa perbedaan ketiganya?

Pembatasan arus hanyalah pembatasan arus. Selama batas lalu lintas tidak terlampaui, layanan tetap tersedia (berbeda dengan pemutus sirkuit) dan tidak harus diturunkan (pengecualian melebihi batas lalu lintas juga dapat diberikan untuk ditangani oleh penelepon). dengan dirinya sendiri). Jadi mari kita bahas perbedaan antara pemutus sirkuit dan downgrade:

  • konsep yang berbeda

Pemutus sirkuit berarti layanan secara keseluruhan tidak tersedia (berfokus pada perlindungan diri), penurunan peringkat berarti mengambil opsi terbaik berikutnya (berfokus pada melindungi keuntungan), dan pembatasan saat ini mengacu pada jumlah lalu lintas yang tidak dapat dilampaui.

  • Mekanisme pemicu yang berbeda

Secara default, jika hystrix mendeteksi bahwa tingkat kegagalan permintaan melebihi 50% dalam waktu 10 detik, mekanisme pemutus sirkuit akan dipicu. Setelah itu, permintaan ke layanan mikro dicoba ulang setiap 5 detik. Jika layanan mikro tidak dapat merespons, mekanisme pemutus sirkuit akan dilanjutkan. Jika layanan mikro dapat dijangkau, mekanisme pemutus sirkuit dimatikan dan permintaan normal dipulihkan.

Secara default, hystrix akan memicu mekanisme downgrade dalam 4 kondisi berikut:

  1. Metode menampilkan HystrixBadRequestException
  2. Batas waktu panggilan metode
  3. Nyalakan pemutus arus untuk mencegat panggilan
  4. Kumpulan thread atau antrian atau semaphore sudah penuh
  • Hubungan kepemilikan yang berbeda

Mekanisme downgrade dapat dipanggil saat pemutus sirkuit, namun mekanisme pemutus sirkuit biasanya tidak dipanggil saat downgrade.Karena pemutus sirkuit dimulai dari perspektif keseluruhan dan menonaktifkan layanan untuk memastikan stabilitas sistem, sedangkan penurunan versi adalah hal terbaik berikutnya dan memberikan solusi yang terjamin, sehingga hubungan kepemilikannya berbeda (pemutus sirkuit &gt; penurunan versi).

2. Templat Berpura-pura dan Istirahat

Ringkasan konten tautan:

  1. Tambahkan ketergantungan starter;
  2. Tambahkan anotasi: @EnableFeignClients;
  3. Buat antarmuka Feign:

@FeignClient(nama="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

tutorial springcloud-- 1. Buat demo tingkat pemula dengan cepat, cukup baca artikel ini_Komunitas sumber terbuka Juyan-GitCodeTanpa basa-basi lagi, ikuti saya dan mulai pengalaman Spring Cloud pertama Anda. Pertama, tinjau komponen dasar layanan mikro: [Gambar di sini] Produsen: Menyediakan layanan Konsumen: Mengkonsumsi layanan Pusat pendaftaran/penemuan layanan: Pendaftaran layanan, penemuan, pemantauan Jadi, pertama-tama. memahami fondasi arsitektur layanan mikro springcloud: produsen (klien), konsumen (klien), pusat pendaftaran/penemuan layanan (server) Komunitas sumber terbuka Ye Juyan GitCodeikon-default.png?t=N7T8https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDritekjIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Penggunaan Zuul

mengacu pada:

Implementasi praktis arsitektur proyek SpringBoot "Konstruksi Gateway zuul"-Blog CSDN

4. Penggunaan pusat pendaftaran Eureka

mengacu pada:

Arsitektur proyek SpringBoot pertarungan sebenarnya "konstruksi proyek induk dan konstruksi pusat pendaftaran"_java konstruksi startup proyek induk springboot-blog CSDN

4. Cara kerja SpringCloud

1. Prinsip kerja Eureka:

  1. Registrasi layanan: Saat penyedia layanan memulai, ia akan mengirimkan permintaan registrasi ke server Eureka, termasuk alamat IP layanan, nomor port, nama layanan, dan informasi lainnya. Setelah menerima permintaan registrasi, server Eureka akan menyimpan informasi layanan ke dalam memori dan menyediakan fungsi permintaan informasi registrasi layanan eksternal.

  2. Penemuan layanan: Ketika konsumen layanan perlu memanggil layanan lain, ia akan mengirimkan permintaan penemuan layanan ke server Eureka untuk mendapatkan daftar contoh layanan yang diperlukan. Setelah menerima permintaan, server Eureka akan mengembalikan daftar contoh layanan terkait, termasuk alamat IP, nomor port, dan informasi layanan lainnya. Konsumen layanan memilih salah satu contoh layanan untuk dipanggil (penyeimbangan beban) berdasarkan daftar contoh yang dikembalikan.

  3. Pemeriksaan kesehatan detak jantung: Penyedia layanan akan mengirimkan paket detak jantung secara berkala ke server Eureka untuk membuktikan bahwa layanannya beroperasi normal. Jika server Eureka tidak menerima paket detak jantung dari instans layanan dalam jangka waktu tertentu, server tersebut akan menganggap instans layanan tersebut tidak aktif dan menghapusnya dari daftar layanan.

5. Kode sumber yang mendasari SpringCloud

1. Kode sumber Gerbang Zuul

Implementasi praktis arsitektur proyek SpringBoot "Konstruksi Gateway zuul"-Blog CSDN Artikel tersebut telah dilihat dan dibaca 227 kali. Bab 3 Konstruksi Gerbang Zuul Kata Pengantar: 1. Fungsi utama Zuul terutama menyediakan perutean dinamis (implementasi pita bawaan) dan pemfilteran (dapat digunakan sebagai filter autentikasi terpadu, filter penerbitan skala abu-abu, filter IP daftar hitam putih, filter pembatas arus layanan) (Dapat diimplementasikan dengan Sentinel)) fungsi; 2. Perbedaan dari spring cloud GateWay adalah solusi gateway yang disediakan oleh dua organisasi sumber terbuka yang berbeda. spring cloud GateWay menggunakan API non-pemblokiran, filter pembatas arus bawaan, mendukung koneksi panjang (seperti soket web), dan lebih baik daripada Zuul dalam skenario konkurensi tinggi dan respons layanan back-end yang lambat...https://blog.csdn.net/qq_19952029/artikel/detail/124285479

2. Pusat registrasi kode sumber Eureka

3. Kode sumber pemutus sirkuit Histrix

4. Pusat konfigurasi Kode sumber konfigurasi

5. Kode sumber pita penyeimbang beban

6. Layanan mikro memanggil kode sumber Feign

6. Bagaimana SpringCloud mengimplementasikan transaksi terdistribusi

Latihan mode Seata TCC (Bagian 2) -Komunitas Pengembang Cloud AlibabaPertarungan aktual mode Seata TCC (Bagian 2)ikon-default.png?t=N7T8https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9Postingan blog di atas tidak menyelesaikan masalah penangguhan, yang dapat dinilai berdasarkan indikator status yang berbeda.

https://www.cnblogs.com/lilpig/p/16613226.htmlikon-default.png?t=N7T8https://www.cnblogs.com/lilpig/p/16613226.html

1. Peran mode TCC

TM: Manajer transaksi, dibuat dengan anotasi @GlobalTransaction.

TC: Koordinator

RM: Peserta

Seluruh prosesnya adalah:

TM memproksi transaksi global Anda dan mendaftar ke TC sebelum memulai eksekusi
TM mulai mengeksekusi setiap transaksi cabang dalam transaksi global, dan RM mendaftarkan dan melaporkan transaksi cabang dan status eksekusi ke TC
Setelah eksekusi transaksi cabang selesai, TM memulai permintaan ke TC untuk melakukan atau mengembalikan transaksi global.

2. Arti reservasi, penyerahan, dan pengembalian sumber daya TCC.

Reservasi berarti mengunci dan memperbarui sumber daya database ke status perantara, lalu mengubahnya ke status efektif ketika penerapan tahap kedua dilakukan setelah konfirmasi.Jadi fase reservasi dan fase rollback commitSemua melibatkan database operasi, jadi mungkin juga ada kegagalan konfirmasi dan rollback yang memerlukan pemrosesan manual, yang dapat diselesaikan dengan mencatat log, mengkompensasi percobaan ulang, dll.

3. Kelebihan dan kekurangan TCC

Keuntungan dari mode TCC

  1. Pengiriman langsung dalam satu tahap, tidak ada kunci DB, tidak ada kunci lain, kinerja bagus
  2. Logika reservasi dan pemulihan ditulis sendiri dan tidak bergantung pada database. Ini dapat digunakan dalam database non-transaksional.

Kekurangan mode TCC

  1. Pengkodean itu rumit
  2. Konsisten lemah
  3. KarenaConfirmDanCancelIni mungkin juga gagal dan Anda harus menangani proses ini
  4. Beberapa bisnis tidak cocok untuk model TCC. Misalnya, melakukan pemesanan adalah proses penambahan baris baru.

4. Modus XA

Konsistensi yang kuat, dengan mengoordinasikan kapan transaksi lokal masing-masing peserta dilakukan dan dibatalkan.

Keuntungan mode XA

  1. Mudah diimplementasikan, karena sebagian besar database sudah mendukung transaksi XA, Seata hanya perlu melakukan pengemasan sederhana
  2. konsistensi yang kuat

Kekurangan mode XA

  1. Setiap transaksi harus menunggu hingga semua pemrosesan transaksi selesai, sehingga menempati kunci basis data, sehingga menghasilkan kinerja yang buruk dan ketersediaan yang rendah.
  2. Tidak dapat digunakan jika database tidak mendukung transaksi XA

5. Modus AT

konsistensi lemah