酒旅项目总结

酒旅项目总结,第1张

酒旅项目总结 1.架构图流程梳理

1.用户发起请求进行DNS解析,首先经过WAF 、CDN 、防火墙。

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

WAF Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 [1]

防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项 *** 作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。

通过Nginx集群反向代理到Webflux网关,通过SpringCloud Gateway进行动态路由指Predicate(断言)和Filter(过滤器)寻址与Sentinel+Shard进行认证授权和令牌限流,中间还可以整合Redis; 同时与Nacos合作为它提供监控报警和日志,集成服务注册发现功能,Nacos集群在整个架构中都能提供服务注册发现与动态配置和配置管理功能,整合SpringBoot Admin进行服务监控; 同时Gateway可以通过Ribbon进行负载均衡、Sentinel熔断降级和业务集群建立桥梁,形成联系,先是通过SpringSecurity框架与OAuth2认证中心整合JWT进行公钥私钥的颁发授权与相应验签认证功能。 Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。 [12]

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。 [13]

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

GateWay

Spring Cloud GateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflix Zuul,它基于Spring5.0+SpringBoot2.0+WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。

Spring Cloud GateWay不仅提供统⼀的路由⽅式(反向代理)并且基于 Filter(定义过滤器对请求过滤,完成⼀些功能) 链的⽅式提供了⽹关基本的功能,例如:鉴权、流量控制、熔断、路径重写、⽇志监控等。

ribbon

springcloud ribbon是基于Netflix ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflixf发布的开源项目,主要功能是提供醍醐的的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如:连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。我们很容易的使用Ribbon实现自定义的负载均衡算法。

sentinel

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

Spring Security

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

OAuth

OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。

SpringBoot应用在业务集群中通过OpenFeign进行相互调用,中间还整合Redis、Mysql、MQ、ES、OSS、JOB等工具,其中Redis集群可以用来做分布式数据缓存,Mysql主从复制进行数据的持久化,RabbitMQ进行系统解耦削峰填谷异步调用,ES全文搜索引擎整合Kibana、Logstash进行近乎实时搜索、分析和可视化的全文检索,使用阿里云OSS云存储服务进行对象存储、企业数据管理,使用xxl-job进行分布式任务调度。 OpenFeign

OpenFeign 是 Spring Cloud 家族的一个成员, 它最核心的作用是为 HTTP 形式的 Rest API 提供了非常简洁高效的 RPC 调用方式

接口类上:@FeignClient(“被调用的服务器名”)

启动类上:@EnableFeignClients

然后在需要使用的地方@Resource注入

OpenFeign的用途及实现原理
openfeign的用途:服务发现,负载均衡,服务调用

openfeign的实现原理:基于@EnableFeignClients 将所有被@FeignClient注解的类 注册到容器中。当这些被@FeignClient注解的类被调用时会创建一个动态代理的对象为我们创建被调用类的实例,然后都会被统一转发给 Feign 框架所定义的一个 InvocationHandler , 由该 Handler 完成后续的 HTTP 转换, 发送, 接收, 翻译HTTP响应的工作。

业务集群还与分布式相挂钩,有着分布式主键,分布式锁,分布式事务,其中有两个理论,一个是CAP(分别是Consistency一致性、Availability可用性、Partitiontolerance 分区容错性)理论(这三个要素最多只能同时实现两点,不可能三者兼顾),一个是BASE(Basically Available基本可用、Soft State软状态、Eventual Consistency最终一致性)理论(即使无法做到强一致性,CAP的核心就是强一致性,但应用可以采用适合的方式达到最终一致性)

分布式锁

我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!

注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如

日志收集通过Beats、ELK、和Kafka整和完成,具体过程是这样的:Beats用于日志数据采集使用,Logstash收集日志,发送给Kafka进行解耦、异步处理和流量削峰,然后通过Elasticsearch集群存储日志数据,索引日志数据,再通过Kibana视图形式展现日志信息,更加人性化地在客户端进行检索以及相关 *** 作。

Beats 是用于数据采集使用,通常用于 日志文件, 指标,网络数据, windows事件日志,审计数据,运行事件监控,无需服务器的采集器。

ELK日志分析系统是Logstash、Elasticsearch、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示

Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。

数据库遵守阿里巴巴设计规范

  • DROP TABLE IF EXISTS hotel;
    CREATE TABLE hotel (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
    name varchar(64) NOT NULL DEFAULT ‘’ COMMENT ‘酒店名称’,
    brand varchar(32) NOT NULL DEFAULT ‘’ COMMENT ‘酒店品牌’,
    city_name varchar(32) NOT NULL DEFAULT ‘’ COMMENT ‘城市名称’,
    region varchar(32) NOT NULL DEFAULT ‘’ COMMENT ‘区域,比如某某市区’,
    landmark_nearby varchar(32) NOT NULL DEFAULT ‘’ COMMENT ‘附近的地标’,
    longitude varchar(32) NOT NULL DEFAULT ‘0.0’ COMMENT ‘酒店经度’,
    latitude varchar(32) NOT NULL DEFAULT ‘0.0’ COMMENT ‘酒店纬度’,
    address_detail varchar(128) NOT NULL DEFAULT ‘’ COMMENT ‘地址详细信息’,
    entry_departure_time varchar(32) NOT NULL DEFAULT ‘入住时间:14:00以后 离店时间:12:00以前’ COMMENT ‘入离时间’,
    notice varchar(255) NOT NULL DEFAULT ‘’ COMMENT ‘注意事项’,
    hint varchar(255) NOT NULL DEFAULT ‘’ COMMENT ‘酒店提示’,
    open_date datetime NOT NULL DEFAULT ‘2022-04-06 18:28:59’ COMMENT ‘开业时间’,
    decorate_date datetime NOT NULL DEFAULT ‘2022-04-06 18:28:59’ COMMENT ‘装修时间’,
    room_count smallint(5) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘客房数量’,
    introduce varchar(255) NOT NULL DEFAULT ‘’ COMMENT ‘酒店介绍’,
    grade tinyint(3) unsigned NOT NULL DEFAULT ‘3’ COMMENT ‘酒店星级 2:经济型(非星级) 3:舒适型(3星级) 4:高档型(4星级) 5:豪华型(5星级)’,
    evaluate_score int(7) unsigned NOT NULL DEFAULT ‘3’ COMMENT ‘评分’,
    evaluate_count int(6) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘参与评分总人数’,
    sale_count bigint(20) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘销售量’,
    homepage_image_url varchar(255) NOT NULL DEFAULT ‘’ COMMENT ‘首页图片链接’,
    collect_count bigint(20) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘收藏人数’,
    floor_original_price bigint(20) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘原价’,
    floor_special_price bigint(20) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘特价’,
    phone1 varchar(32) NOT NULL DEFAULT ‘’ COMMENT ‘电话1’,
    phone2 varchar(32) NOT NULL DEFAULT ‘’ COMMENT ‘电话2’,
    revision bigint(20) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘乐观锁’,
    deleted tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘禁用启用状态;@values 0|1|2:启用|禁用|暂停营业’,
    create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
    update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更改时间’,
    PRIMARY KEY (id) USING BTREE,
    UNIQUE KEY index_hotel_name (name) USING BTREE,
    KEY index_hotel_latitude_and_longititude (latitude,longitude) USING BTREE,
    KEY index_hotel_evaluate_score (evaluate_score) USING BTREE,
    KEY index_hotel_collect_count (collect_count) USING BTREE,
    KEY index_hotel_brand (brand) USING BTREE,
    KEY index_hotel_address_detail (address_detail) USING BTREE,
    KEY index_hotel_floor_price (floor_original_price) USING BTREE,
    KEY index_hotel_city_name (city_name) USING BTREE,
    KEY index_hotel_grade (grade) USING BTREE,
    KEY index_hotel_evaluate_count (evaluate_count) USING BTREE,
    KEY index_hotel_open_date (open_date) USING BTREE,
    KEY index_hotel_sale_count (sale_count) USING BTREE,
    KEY index_hotel_special_price (floor_special_price) USING BTREE,
    KEY index_hotel_region (region) USING BTREE,
    KEY index_hotel_landmark_nearby (landmark_nearby) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT=‘酒店基本信息表’;

项目中代码多的时候要提取公共方法,用到许多的工具类,判断非空统一用hutool工具包

接口

API文档 1.请求参数

2.响应实例

项目总结

​ 项目中用到了的都是企业最新的技术,也是很好的项目,也有大佬带着做完了也听了许多建议。编程思想也提升了很多!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/794140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存