Dengan perkembangan pesat pengkomputeran awan dan teknologi data besar, reka bentuk seni bina dan kaedah pembangunan sistem perusahaan juga sentiasa berubah. Seni bina perkhidmatan mikro adalah salah satu perubahan penting Ia adalah model seni bina yang membahagikan satu aplikasi kepada satu set perkhidmatan kecil Setiap perkhidmatan bekerjasama antara satu sama lain berdasarkan mekanisme komunikasi yang ringan, dengan itu mencapai sistem yang lebih Fleksibel, berskala dan boleh diselenggara. .
Sebagai salah satu rangka kerja perkhidmatan mikro yang paling popular pada masa ini, Spring Cloud menyediakan set lengkap penyelesaian pembangunan perkhidmatan mikro, termasuk penemuan perkhidmatan mikro, konfigurasi, komunikasi, pengimbangan beban, pemutus litar, get laluan API, dsb. Artikel ini akan memperkenalkan amalan pembangunan keupayaan perkhidmatan mikro berdasarkan Spring Cloud, serta beberapa masalah dan penyelesaian yang dihadapi dalam amalan.
1. Prinsip asas seni bina perkhidmatan mikro
Seni bina perkhidmatan mikro ialah corak seni bina yang membahagikan satu aplikasi kepada satu set perkhidmatan kecil Setiap perkhidmatan adalah berdasarkan ringan Mekanisme komunikasi bekerjasama antara satu sama lain untuk mencapai sistem yang lebih fleksibel, berskala dan boleh diselenggara. Prinsip asas seni bina perkhidmatan mikro termasuk:
1 Pemisahan perkhidmatan: Bahagikan satu aplikasi kepada satu set perkhidmatan kecil mengikut kawasan perniagaan atau modul berfungsi, dan setiap perkhidmatan berjalan dan naik taraf secara bebas.
2 Komunikasi perkhidmatan: Perkhidmatan bekerjasama antara satu sama lain berdasarkan mekanisme komunikasi ringan termasuk API RESTful, baris gilir mesej, RPC, dsb.
3. Penemuan dan pendaftaran perkhidmatan: pengurusan kitaran hayat perkhidmatan, termasuk pendaftaran perkhidmatan ke pusat pendaftaran perkhidmatan, penemuan perkhidmatan dan pengimbangan beban, dsb.
4 Pembahagian data: Pisahkan data kepada perkhidmatan yang berbeza melalui pembahagian data untuk memastikan pengasingan data antara perkhidmatan.
5 Operasi dan penyelenggaraan automatik: Realisasikan penggunaan automatik, pemantauan dan penyelenggaraan perkhidmatan melalui alat automatik, meningkatkan kebolehpercayaan dan kebolehselenggaraan sistem.
2. Spring Cloud Microservice Framework
Spring Cloud ialah rangka kerja mikroperkhidmatan berdasarkan Spring Boot, menyediakan satu set lengkap penyelesaian pembangunan perkhidmatan mikro. Spring Cloud termasuk komponen teras berikut:
1 Penemuan dan pendaftaran perkhidmatan: Eureka, Konsul, Penjaga Zoo, dsb.
2. Pengimbangan beban pelanggan: Reben.
3. Pemutus Litar: Hystrix.
4. Gerbang perkhidmatan: Zuul2.
5. Pusat konfigurasi teragih: Spring Cloud Config.
6. Bas mesej: Bas Awan Musim Bunga.
3. Amalan pembangunan mikroperkhidmatan Spring Cloud
Berikut mengambil aplikasi perkhidmatan mikro ringkas sebagai contoh untuk memperkenalkan amalan pembangunan mikroperkhidmatan berdasarkan Spring Cloud.
1. Buat pusat pendaftaran Eureka
Pertama, buat pusat pendaftaran Eureka untuk merealisasikan penemuan perkhidmatan dan pendaftaran melalui Eureka.
Dalam projek Spring Boot, integrasikan Eureka dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
Tambah anotasi @EnableEurekaServer dalam kelas permulaan:
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
Selepas memulakan pusat pendaftaran Eureka , anda boleh Lawati http://localhost:8761 dalam penyemak imbas untuk melihat antara muka pengurusan pusat pendaftaran.
2. Cipta penyedia perkhidmatan
Buat pembekal perkhidmatan ringkas yang menyediakan antara muka helo untuk mengembalikan rentetan.
Dalam projek Spring Boot, integrasikan Eureka dan Ribbon dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
Dalam penyedia perkhidmatan, dayakan klien Eureka dengan menambahkan anotasi @EnableDiscoveryClient:
@SpringBootApplication @EnableDiscoveryClient public class ServiceProviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } }
Buat RestController untuk menyediakan antara muka hello:
@RestController public class HelloController { @RequestMapping("/hello") public String hello() { return "Hello World!"; } }
3 Cipta pengguna perkhidmatan
Buat pengguna perkhidmatan, hubungi antara muka yang disediakan oleh penyedia perkhidmatan dan capai pengimbangan beban melalui Ribbon.
Dalam projek Spring Boot, integrasikan Eureka dan Ribbon dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
Dalam pengguna perkhidmatan, dayakan klien Eureka dengan menambahkan anotasi @EnableDiscoveryClient dan anotasi @LoadBalanced Kepada dayakan pengimbangan beban klien Ribbon:
@SpringBootApplication @EnableDiscoveryClient public class ServiceConsumerApplication { public static void main(String[] args) { SpringApplication.run(ServiceConsumerApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
Buat RestController untuk memanggil antara muka helo penyedia perkhidmatan:
@RestController public class HelloController { @Autowired private RestTemplate restTemplate; @RequestMapping("/hello") public String hello() { String url = "http://service-provider/hello"; return restTemplate.getForObject(url, String.class); } }
4. Buat get laluan perkhidmatan
Buat get laluan perkhidmatan, Dedahkan semua antara muka perkhidmatan mikro kepada luar dan laksanakan penghalaan, pemajuan dan penapisan melalui Zuul.
Dalam projek Spring Boot, integrasikan Eureka dan Zuul dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
Dalam get laluan perkhidmatan, dayakan Zuul dengan menambahkan anotasi @EnableZuulProxy:
@SpringBootApplication @EnableZuulProxy public class ApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(ApiGatewayApplication.class, args); } }
Konfigurasikan maklumat penghalaan get laluan dan tambahkan konfigurasi berikut dalam application.yml:
zuul: routes: service-provider: path: /api/** serviceId: service-provider
5 Cipta pusat konfigurasi
Buat pusat konfigurasi dan urus konfigurasi melalui repositori Git untuk mencapai pengurusan berpusat. dan konfigurasi konfigurasi.
Dalam projek Spring Boot, sepadukan Pelayan Config dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
Dalam pusat konfigurasi, dayakan pusat konfigurasi dengan menambahkan anotasi @EnableConfigServer:
@SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
Konfigurasikan maklumat gudang Git dan baca peraturan dalam aplikasi.yml:
spring: cloud: config: server: git: uri: git://http://gitlab.example.com/abc/config-repo.git search-paths: '{application}' profiles: active: native paths: config.path: /usr/local/config-repo
6 Laksanakan pemutus litar perkhidmatan
Buat pemutus litar untuk mengendalikan kemerosotan perkhidmatan apabila pengecualian. atau kegagalan berlaku beroperasi.
Dalam projek Spring Boot, integrasikan Hystrix dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
Dalam penyedia perkhidmatan, laksanakan pemutus litar dengan menambahkan anotasi @HystrixCommand:
@RestController public class HelloController { @RequestMapping("/hello") @HystrixCommand(fallbackMethod = "fallback") public String hello() { ... } public String fallback() { return "Fallback"; } }
7. Laksanakan pemantauan perkhidmatan
Wujudkan pusat pemantauan untuk pemantauan dan analisis data antara muka yang disediakan oleh perkhidmatan mikro untuk mencapai pemantauan masa nyata status perkhidmatan.
Dalam projek Spring Boot, sepadukan Hystrix Dashboard dan Turbine dengan menambahkan kebergantungan berikut:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-turbine</artifactId> </dependency>
在监控中心中,通过添加@EnableHystrixDashboard注解来启用Hystrix Dashboard:
@SpringBootApplication @EnableHystrixDashboard public class MonitorCenterApplication { public static void main(String[] args) { SpringApplication.run(MonitorCenterApplication.class, args); } }
在turbine服务提供者中,通过添加@EnableTurbine注解来启用Turbine:
@SpringBootApplication @EnableTurbine public class TurbineServerApplication { public static void main(String[] args) { SpringApplication.run(TurbineServerApplication.class, args); } }
在application.yml中配置Turbine的信息:
turbine: aggregator: clusterConfig: service-consumer appConfig: service-consumer,service-provider clusterNameExpression: new String("default")
四、总结
Spring Cloud是一套完备的微服务开发解决方案,通过其提供的一系列组件和架构设计原则,开发者可以轻松构建出高可用、高扩展和易维护的微服务应用。在实践中,我们发现Spring Cloud不但提供了完备的技术支持,同时还提供了很好的学习资源和社区支持,为微服务的发展贡献了不少力量。但是,在实践中也会遇到不少问题和挑战,包括配置管理、调用链跟踪、数据一致性等方面,需要我们不断地进行探索和实践,以解决这些难题。
Atas ialah kandungan terperinci Amalan pembangunan keupayaan perkhidmatan mikro berdasarkan Spring Cloud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!