SpringCloud(微服务)的几种实现方式

编程入门 行业动态 更新时间:2024-10-27 12:29:43

SpringCloud(微服务)的几种实现方式

写在前面一、SpringCloud Netflix1.1、Eureka1.2、Hystrix1.3、Ribbon1.4、Zuul二、SpringCloud + Consul2.1、代码演示三、SpringCloud Alibaba3.1、Nacos3.2、Sentinel,服务的降级和限流规则配置3.3、代码演示四、SpringCloud Google五、[以上实现代码,地址在此](github./tonels/Microservices)

写在前面

这里说的几种是基于注册中心还有相关组件的区别,有些组件是被广泛应用的,

一、SpringCloud Netflix

这个应该是业界使用最多的架构了

Spring Cloud Netflix通过自动装配集成到SpringBoot和SpringCloud的开发中,自己实现很多组件的封装,包括

1.1、Eureka

注册中心,用于服务的注册和发现

1.2、Hystrix

断路器,用于服务的断路配置

1.3、Ribbon

Client Side Load Balancer,客户端的负载均衡器

1.4、Zuul

路由器和过滤器:Zuul过滤器的自动重新注册,以及用于反向代理创建的简单配置约定

二、SpringCloud + Consul

Consul 是用Go语言写的,对 提供了Java客户端操作

这种微服务架构,基于Consul-config作为服务的注册和发现,基于Consul-discovery作为分布式配置的统一管理。

2.1、代码演示

代码比较多,先略在这里,后面我整理到Github上

三、SpringCloud Alibaba

这种微服务架构,基于Nacos-discovery作为服务的注册和发现,基于Nacos-config作为分布式配置的统一管理。基于Sentinel作为服务监控,包括熔断和降级规则的配置。

3.1、Nacos

是阿里团队封装实现的的用于微服务架构中,用于服务注册和发现,以及分布式的配置管理的Nacos Server。

集成 Jar,包括Spring Web,SpringSecurity,Apache基础工具包,Mina和Netty等等用于分布式配置管理的部分,是使用了Derby轻型的可嵌入式的关系型数据库,数据库设计,包括了
CREATE SCHEMA diamond AUTHORIZATION diamond;CREATE TABLE config_info (id bigint NOT NULL generated by default as identity,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,tenant_id varchar(128) default '',app_name varchar(128),content CLOB,md5 varchar(32) DEFAULT NULL,gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',src_user varchar(128) DEFAULT NULL,src_ip varchar(20) DEFAULT NULL,c_desc varchar(256) DEFAULT NULL,c_use varchar(64) DEFAULT NULL,effect varchar(64) DEFAULT NULL,type varchar(64) DEFAULT NULL,c_schema LONG VARCHAR DEFAULT NULL,constraint configinfo_id_key PRIMARY KEY (id),constraint uk_configinfo_datagrouptenant UNIQUE (data_id,group_id,tenant_id));CREATE INDEX configinfo_dataid_key_idx ON config_info(data_id);
CREATE INDEX configinfo_groupid_key_idx ON config_info(group_id);
CREATE INDEX configinfo_dataid_group_key_idx ON config_info(data_id, group_id);CREATE TABLE his_config_info (id bigint NOT NULL,nid bigint NOT NULL generated by default as identity,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,tenant_id varchar(128) default '',app_name varchar(128),content CLOB,md5 varchar(32) DEFAULT NULL,gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000',gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000',src_user varchar(128),src_ip varchar(20) DEFAULT NULL,op_type char(10) DEFAULT NULL,constraint hisconfiginfo_nid_key PRIMARY KEY (nid));CREATE INDEX hisconfiginfo_dataid_key_idx ON his_config_info(data_id);
CREATE INDEX hisconfiginfo_gmt_create_idx ON his_config_info(gmt_create);
CREATE INDEX hisconfiginfo_gmt_modified_idx ON his_config_info(gmt_modified);CREATE TABLE config_info_beta (id bigint NOT NULL generated by default as identity,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,tenant_id varchar(128) default '',app_name varchar(128),content CLOB,beta_ips varchar(1024),md5 varchar(32) DEFAULT NULL,gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',src_user varchar(128),src_ip varchar(20) DEFAULT NULL,constraint configinfobeta_id_key PRIMARY KEY (id),constraint uk_configinfobeta_datagrouptenant UNIQUE (data_id,group_id,tenant_id));CREATE TABLE config_info_tag (id bigint NOT NULL generated by default as identity,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,tenant_id varchar(128) default '',tag_id varchar(128) NOT NULL,app_name varchar(128),content CLOB,md5 varchar(32) DEFAULT NULL,gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',src_user varchar(128),src_ip varchar(20) DEFAULT NULL,constraint configinfotag_id_key PRIMARY KEY (id),constraint uk_configinfotag_datagrouptenanttag UNIQUE (data_id,group_id,tenant_id,tag_id));CREATE TABLE config_info_aggr (id bigint NOT NULL generated by default as identity,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,tenant_id varchar(128) default '',datum_id varchar(255) NOT NULL,app_name varchar(128),content CLOB,gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',constraint configinfoaggr_id_key PRIMARY KEY (id),constraint uk_configinfoaggr_datagrouptenantdatum UNIQUE (data_id,group_id,tenant_id,datum_id));CREATE TABLE app_list (id bigint NOT NULL generated by default as identity,app_name varchar(128) NOT NULL,is_dynamic_collect_disabled smallint DEFAULT 0,last_sub_info_collected_time timestamp DEFAULT '1970-01-01 08:00:00.0',sub_info_lock_owner varchar(128),sub_info_lock_time timestamp DEFAULT '1970-01-01 08:00:00.0',constraint applist_id_key PRIMARY KEY (id),constraint uk_appname UNIQUE (app_name));CREATE TABLE app_configdata_relation_subs (id bigint NOT NULL generated by default as identity,app_name varchar(128) NOT NULL,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',constraint configdatarelationsubs_id_key PRIMARY KEY (id),constraint uk_app_sub_config_datagroup UNIQUE (app_name, data_id, group_id));CREATE TABLE app_configdata_relation_pubs (id bigint NOT NULL generated by default as identity,app_name varchar(128) NOT NULL,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',constraint configdatarelationpubs_id_key PRIMARY KEY (id),constraint uk_app_pub_config_datagroup UNIQUE (app_name, data_id, group_id));CREATE TABLE config_tags_relation (id bigint NOT NULL,tag_name varchar(128) NOT NULL,tag_type varchar(64) DEFAULT NULL,data_id varchar(255) NOT NULL,group_id varchar(128) NOT NULL,tenant_id varchar(128) DEFAULT '',nid bigint NOT NULL generated by default as identity,constraint config_tags_id_key PRIMARY KEY (nid),constraint uk_configtagrelation_configidtag UNIQUE (id, tag_name, tag_type));CREATE INDEX config_tags_tenant_id_idx ON config_tags_relation(tenant_id);CREATE TABLE group_capacity (id bigint NOT NULL generated by default as identity,group_id varchar(128) DEFAULT '',quota int DEFAULT 0,usage int DEFAULT 0,max_size int DEFAULT 0,max_aggr_count int DEFAULT 0,max_aggr_size int DEFAULT 0,max_history_count int DEFAULT 0,gmt_create timestamp DEFAULT '2010-05-05 00:00:00',gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',constraint group_capacity_id_key PRIMARY KEY (id),constraint uk_group_id UNIQUE (group_id));CREATE TABLE tenant_capacity (id bigint NOT NULL generated by default as identity,tenant_id varchar(128) DEFAULT '',quota int DEFAULT 0,usage int DEFAULT 0,max_size int DEFAULT 0,max_aggr_count int DEFAULT 0,max_aggr_size int DEFAULT 0,max_history_count int DEFAULT 0,gmt_create timestamp DEFAULT '2010-05-05 00:00:00',gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',constraint tenant_capacity_id_key PRIMARY KEY (id),constraint uk_tenant_id UNIQUE (tenant_id));CREATE TABLE tenant_info (id bigint NOT NULL generated by default as identity,kp varchar(128) NOT NULL,tenant_id varchar(128)  DEFAULT '',tenant_name varchar(128)  DEFAULT '',tenant_desc varchar(256)  DEFAULT NULL,create_source varchar(32) DEFAULT NULL,gmt_create bigint NOT NULL,gmt_modified bigint NOT NULL,constraint tenant_info_id_key PRIMARY KEY (id),constraint uk_tenant_info_kptenantid UNIQUE (kp,tenant_id));
CREATE INDEX tenant_info_tenant_id_idx ON tenant_info(tenant_id);CREATE TABLE users (username varchar(50) NOT NULL PRIMARY KEY,password varchar(500) NOT NULL,enabled boolean NOT NULL
);CREATE TABLE roles (username varchar(50) NOT NULL,role varchar(50) NOT NULL
);INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

整体设计,还挺复杂的,可以比较下,携程团队实现的分布式配置 Appolo

3.2、Sentinel,服务的降级和限流规则配置

Web页面,可实现在页面上配置服务的降级和限流规则,前端是基于Angular实现

Nacos 和 Sentinel,淘宝团队并没有开源代码,我是通过反编译工具看到的相关信息,这里不做太多深究了

3.3、代码演示

代码比较多,先略在这里,后面我整理到Github上

四、SpringCloud Google

五、以上实现代码,地址在此

更多推荐

几种,方式,SpringCloud

本文发布于:2023-05-20 18:55:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/154801.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:几种   方式   SpringCloud

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!