Rumah Java javaTutorial Amalan mikroperkhidmatan Spring Cloud untuk melaksanakan kunci teragih

Amalan mikroperkhidmatan Spring Cloud untuk melaksanakan kunci teragih

Jun 22, 2023 pm 11:28 PM
perkhidmatan mikro spring cloud Kunci yang diedarkan

Dengan populariti seni bina perkhidmatan mikro, semakin banyak pasukan pembangunan perusahaan mula menggunakan Spring Cloud untuk membina sistem perkhidmatan mikro mereka sendiri. Dalam persekitaran teragih, melaksanakan kunci teragih ialah cabaran teknikal yang penting. Artikel ini akan memperkenalkan cara melaksanakan amalan mikroperkhidmatan kunci teragih di bawah rangka kerja Awan Musim Bunga.

Pertama sekali, kita perlu memahami apa itu kunci teragih. Kunci teragih ialah teknologi yang digunakan untuk melindungi akses kepada sumber yang dikongsi. Ia boleh memastikan bahawa berbilang nod tidak akan mengubah suai atau mengakses sumber yang sama pada masa yang sama dalam persekitaran yang diedarkan. Dalam sistem perkhidmatan mikro, kunci yang diedarkan boleh melindungi pembacaan dan penulisan sumber yang dikongsi dan mengelakkan persaingan sumber dan ketidakkonsistenan data.

Seterusnya, kami akan memperkenalkan penyelesaian menggunakan Redis untuk melaksanakan kunci teragih. Redis ialah pangkalan data dalam memori yang popular yang menyokong penguncian teragih dan boleh disepadukan dengan baik dengan rangka kerja Awan Musim Bunga.

Pertama, kita perlu menambah kebergantungan Redis dalam aplikasi Spring Boot. Tambah kebergantungan berikut dalam Gradle:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis'
Salin selepas log masuk

Tambah kebergantungan berikut dalam Maven:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Salin selepas log masuk

Tambah kod berikut dalam aplikasi kami untuk mengkonfigurasi sambungan Redis:

@Configuration
public class RedisConfig {

  @Bean
  JedisConnectionFactory jedisConnectionFactory() {
      RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
      redisStandaloneConfiguration.setHostName("redis");
      redisStandaloneConfiguration.setPort(6379);
      return new JedisConnectionFactory(redisStandaloneConfiguration);
  }

  @Bean
  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
      RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
      redisTemplate.setConnectionFactory(redisConnectionFactory);
      redisTemplate.setDefaultSerializer(new StringRedisSerializer());
      redisTemplate.setEnableTransactionSupport(true);
      redisTemplate.afterPropertiesSet();
      return redisTemplate;
  }
}
Salin selepas log masuk

Seterusnya, kita perlu melaksanakan kaedah untuk mendapatkan kunci yang diedarkan. Kaedah ini perlu memastikan bahawa hanya satu nod boleh mendapatkan kunci pada masa yang sama dalam persekitaran teragih. Berikut ialah pelaksanaan mudah:

@Service
public class DistributedLockService {

    @Autowired
    private RedisTemplate redisTemplate;

    public boolean acquireLock(String lockKey, String requestId, int expireTime) {

        String result = (String) redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                JedisCommands commands = (JedisCommands) connection.getNativeConnection();
                return commands.set(lockKey, requestId, "NX", "PX", expireTime);
            }
        });

        return result != null && result.equals("OK");
    }

    public boolean releaseLock(String lockKey, String requestId) {
        String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
        Boolean result = (Boolean) redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                Object nativeConnection = connection.getNativeConnection();
                Long execute = (Long) ((Jedis) nativeConnection).eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));
                return execute.equals(1L);
            }
        });
        return result;
    }
}
Salin selepas log masuk

Dalam kod di atas, arahan set Redis dilaksanakan melalui kaedah laksana redisTemplate untuk menetapkan pasangan nilai kunci Parameter NX bermakna ia hanya ditetapkan apabila kunci tidak wujud, mengelakkan keperluan untuk dua Keadaan apabila dua benang memperoleh kunci pada masa yang sama. Parameter PX menunjukkan masa tamat tempoh kunci yang ditetapkan. Hasil pemulangan adalah OK, menunjukkan bahawa kunci berjaya diperoleh. Apabila melepaskan kunci, gunakan pelaksanaan skrip Lua Redis untuk memastikan bahawa hanya benang yang memiliki kunci boleh melepaskan kunci.

Akhir sekali, kita perlu menggunakan kunci teragih dalam perkhidmatan mikro. Sebagai contoh, dengan mengandaikan kami mempunyai titik akhir perkhidmatan mikro yang perlu melindungi akses sumber, kami boleh menggunakan DistributedLockService dalam pengawal Spring MVC untuk mendapatkan kunci teragih bagi memastikan hanya satu permintaan boleh mengakses sumber pada masa yang sama.

@RestController
public class ResourceController {

  private static final String LOCK_KEY = "lock";
  private static final String LOCK_REQUEST_ID = UUID.randomUUID().toString();
  private static final int EXPIRE_TIME = 5000;

  @Autowired
  private DistributedLockService distributedLockService;

  @Autowired
  private ResourceService resourceService;

  @RequestMapping("/resource")
  public ResponseEntity<String> accessResource() {

      boolean lockAcquired = distributedLockService.acquireLock(LOCK_KEY, LOCK_REQUEST_ID, EXPIRE_TIME);

      if (lockAcquired) {
          try {
              // 访问资源
              String result = resourceService.accessResource();
              return ResponseEntity.ok(result);
          } finally {
              distributedLockService.releaseLock(LOCK_KEY, LOCK_REQUEST_ID);
          }
      } else {
          return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body("Resource is busy, please try again later.");
      }
  }
}
Salin selepas log masuk

Kod di atas memperoleh kunci melalui DistributedLockService, mengakses sumber selepas mendapatkan kunci dan melepaskan kunci selepas akses sumber selesai, mengelakkan masalah berbilang permintaan yang mengakses sumber pada masa yang sama.

Dalam contoh di atas, kami melaksanakan skema kunci teragih dalam perkhidmatan mikro Spring Cloud. Penyelesaian ini boleh melindungi akses kepada sumber yang dikongsi dan memastikan ketepatan dan ketekalan data sistem. Dalam penggunaan sebenar, kami boleh melaraskan dan mengoptimumkan pelaksanaan kunci yang diedarkan mengikut senario dan keperluan perniagaan tertentu.

Ringkasnya, kunci teragih adalah bahagian yang sangat penting dalam melaksanakan sistem teragih, yang boleh memastikan ketepatan dan ketekalan data sistem. Gabungan Spring Cloud dan Redis boleh melaksanakan fungsi kunci teragih dengan baik. Melalui pengenalan artikel ini, saya berharap ia dapat memberikan sedikit bantuan untuk semua orang memahami dan menggunakan teknologi kunci teragih.

Atas ialah kandungan terperinci Amalan mikroperkhidmatan Spring Cloud untuk melaksanakan kunci teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka Kerja PHP dan Perkhidmatan Mikro: Penerapan dan Pengkontenaan Asli Awan Rangka Kerja PHP dan Perkhidmatan Mikro: Penerapan dan Pengkontenaan Asli Awan Jun 04, 2024 pm 12:48 PM

Faedah menggabungkan rangka kerja PHP dengan perkhidmatan mikro: Kebolehskalaan: Memanjangkan aplikasi dengan mudah, menambah ciri baharu atau mengendalikan lebih banyak beban. Fleksibiliti: Perkhidmatan mikro digunakan dan diselenggara secara bebas, menjadikannya lebih mudah untuk membuat perubahan dan kemas kini. Ketersediaan tinggi: Kegagalan satu perkhidmatan mikro tidak menjejaskan bahagian lain, memastikan ketersediaan yang lebih tinggi. Kes praktikal: Menggunakan perkhidmatan mikro menggunakan Laravel dan Kubernetes Langkah: Buat projek Laravel. Tentukan pengawal perkhidmatan mikro. Buat fail Docker. Buat manifes Kubernetes. Sebarkan perkhidmatan mikro. Uji perkhidmatan mikro.

Bagaimanakah rangka kerja Java menyokong penskalaan mendatar perkhidmatan mikro? Bagaimanakah rangka kerja Java menyokong penskalaan mendatar perkhidmatan mikro? Jun 04, 2024 pm 04:34 PM

Rangka kerja Java menyokong pengembangan mendatar perkhidmatan mikro Kaedah khusus termasuk: Spring Cloud menyediakan Ribbon dan Feign untuk pengimbangan beban sisi pelayan dan klien. NetflixOSS menyediakan Eureka dan Zuul untuk melaksanakan penemuan perkhidmatan, pengimbangan beban dan failover. Kubernetes memudahkan penskalaan mendatar dengan penskalaan automatik, pemeriksaan kesihatan dan mulakan semula automatik.

Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang Cipta sistem teragih menggunakan rangka kerja perkhidmatan mikro Golang Jun 05, 2024 pm 06:36 PM

Cipta sistem teragih menggunakan rangka kerja mikro perkhidmatan Golang: Pasang Golang, pilih rangka kerja mikroperkhidmatan (seperti Gin), cipta perkhidmatan mikro Gin, tambah titik akhir untuk menggunakan perkhidmatan mikro, bina dan jalankan aplikasi, buat pesanan dan inventori perkhidmatan mikro, gunakan titik akhir untuk memproses pesanan dan inventori Gunakan sistem pemesejan seperti Kafka untuk menyambung perkhidmatan mikro Gunakan perpustakaan sarama untuk menghasilkan dan menggunakan maklumat pesanan

Pemantauan seni bina perkhidmatan mikro dan membimbangkan dalam rangka kerja Java Pemantauan seni bina perkhidmatan mikro dan membimbangkan dalam rangka kerja Java Jun 02, 2024 pm 12:39 PM

Pemantauan dan amaran seni bina mikroperkhidmatan dalam rangka kerja Java Dalam seni bina perkhidmatan mikro, pemantauan dan amaran adalah penting untuk memastikan kesihatan sistem dan operasi yang boleh dipercayai. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Java untuk melaksanakan pemantauan dan membimbangkan seni bina perkhidmatan mikro. Kes praktikal: Gunakan SpringBoot+Prometheus+Alertmanager1. Integrasikan Prometheus@ConfigurationpublicclassPrometheusConfig{@BeanpublicSpringBootMetricsCollectorsspringBootMetric.

Apakah cabaran dalam membina seni bina perkhidmatan mikro menggunakan rangka kerja Java? Apakah cabaran dalam membina seni bina perkhidmatan mikro menggunakan rangka kerja Java? Jun 02, 2024 pm 03:22 PM

Membina seni bina perkhidmatan mikro menggunakan rangka kerja Java melibatkan cabaran berikut: Komunikasi antara perkhidmatan: Pilih mekanisme komunikasi yang sesuai seperti REST API, HTTP, gRPC atau baris gilir mesej. Pengurusan data teragih: Kekalkan konsistensi data dan elakkan transaksi teragih. Penemuan dan pendaftaran perkhidmatan: Sepadukan mekanisme seperti SpringCloudEureka atau HashiCorpConsul. Pengurusan konfigurasi: Gunakan SpringCloudConfigServer atau HashiCorpVault untuk mengurus konfigurasi secara berpusat. Pemantauan dan pemerhatian: Integrasikan Prometheus dan Grafana untuk pemantauan penunjuk, dan gunakan SpringBootActuator untuk menyediakan penunjuk operasi.

Rangka kerja PHP dan perkhidmatan mikro: ketekalan data dan pengurusan transaksi Rangka kerja PHP dan perkhidmatan mikro: ketekalan data dan pengurusan transaksi Jun 02, 2024 pm 04:59 PM

Dalam seni bina perkhidmatan mikro PHP, ketekalan data dan pengurusan transaksi adalah penting. Rangka kerja PHP menyediakan mekanisme untuk melaksanakan keperluan ini: gunakan kelas transaksi, seperti DB::transaction dalam Laravel, untuk menentukan sempadan transaksi. Gunakan rangka kerja ORM, seperti Doktrin, untuk menyediakan operasi atom seperti kaedah lock() untuk mengelakkan ralat konkurensi. Untuk urus niaga teragih, pertimbangkan untuk menggunakan pengurus transaksi teragih seperti Saga atau 2PC. Sebagai contoh, urus niaga digunakan dalam senario kedai dalam talian untuk memastikan konsistensi data apabila menambah pada troli beli-belah. Melalui mekanisme ini, rangka kerja PHP mengurus urus niaga dan konsistensi data dengan berkesan, meningkatkan keteguhan aplikasi.

Jaminan ketekalan data seni bina microservice rangka kerja Java Jaminan ketekalan data seni bina microservice rangka kerja Java Jun 02, 2024 am 10:00 AM

Jaminan ketekalan data dalam seni bina perkhidmatan mikro menghadapi cabaran transaksi yang diedarkan, ketekalan akhirnya dan kemas kini yang hilang. Strategi termasuk: 1. Pengurusan transaksi yang diedarkan, menyelaraskan urus niaga silang perkhidmatan; 2. Kekonsistenan akhirnya, membenarkan kemas kini bebas dan penyegerakan melalui baris gilir mesej 3. Kawalan versi data, menggunakan penguncian optimistik untuk menyemak kemas kini serentak;

Amalan Terbaik untuk Seni Bina Perkhidmatan Mikro Java Amalan Terbaik untuk Seni Bina Perkhidmatan Mikro Java Jun 01, 2024 pm 06:58 PM

Amalan seni bina perkhidmatan mikro Java terbaik: Gunakan rangka kerja perkhidmatan mikro: Sediakan struktur dan alatan, seperti SpringBoot, Quarkus, Micronaut. Gunakan RESTfulAPI: Menyediakan antara muka yang konsisten dan standard untuk komunikasi silang perkhidmatan. Laksanakan mekanisme pemutus litar: menangani kegagalan perkhidmatan dengan anggun dan mencegah ralat berlatarkan. Gunakan pengesanan teragih: Pantau permintaan dan kebergantungan merentas perkhidmatan untuk memudahkan penyahpepijatan dan penyelesaian masalah. Ujian automatik: memastikan keteguhan dan kebolehpercayaan sistem, seperti menggunakan JUnit. Pengkontenaan dan orkestrasi: Gunakan alatan seperti Docker dan Kubernetes untuk memudahkan penggunaan dan pengurusan.

See all articles