网站建设所有软件清单,南京网页设计招聘,响应式布局怎么实现,类似天书奇谈的网页游戏一、Nacos安装
1.1 Nacos概述 Nacos是Alibaba微服务生态组件中的重要组件之一#xff0c;主要用它实现应用的动态服务发现、配置管理、 服务管理。Nacos discovery alibaba/spring-cloud-alibaba Wiki GitHub Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简…一、Nacos安装
1.1 Nacos概述 Nacos是Alibaba微服务生态组件中的重要组件之一主要用它实现应用的动态服务发现、配置管理、 服务管理。Nacos discovery · alibaba/spring-cloud-alibaba Wiki · GitHub Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理 1.Kubernetes Service 2.gRPC Dubbo RPC Service 3.Spring Cloud RESTful Service Nacos 的关键特性包括:
服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后服务消费者可以使用DNS TODO 或HTTPAPI查找和发现服务。 Nacos 提供对服务的实时的健康检查阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义的健康检查。 对于复杂的云环境和网络拓扑环境中如 VPC、边缘网络等服务的健康检查Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘帮助您根据健康状态管理服务的可用性及流量。
动态配置服务 动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 动态配置消除了配置变更时重新部署应用和服务的需要让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单让服务按需弹性扩展变得更容易。 Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
动态 DNS 服务 动态 DNS 服务支持权重路由让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现以帮助您消除耦合到厂商私有服务发现 API 上的风险。
服务及其元数据管理 Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
1.2 Nacos地图 特性大图要从功能特性非功能特性全面介绍我们要解的问题域的特性诉求架构大图通过清晰架构让您快速进入 Nacos 世界业务大图利用当前特性可以支持的业务场景及其最佳实践生态大图系统梳理 Nacos 和主流技术生态的关系优势大图展示 Nacos 核心竞争力战略大图要从战略到战术层面讲 Nacos 的宏观优势
1.3 Nacos生态图
1.4 Nacos安装 关于Nacos安装可以直接参考官网安装 Nacos 快速开始 我们接下来 学习基于Docker实现Nacos单机安装和基于Docker实现Nacos集群安装。 采用Docker-Compose安装Nacos要更方便所以大家可以先学习一下Docker-Compose。
1.4.1 Nacos安装 nacos安装模式有很多种 单机模式 Derby:这种模式是极简模式数据没法持久化存储适合开发环境。 单机模式 MySQL:(支持MySQL5.7和MySQL5.8我们这里学习MySQL5.7安装模式因为当前主流还是 MySQL5.7)这种模式支持数据持久化数据会存储到MySQL中适合生产环境。 集群模式:这种模式适合生产环境并且服务节点个数较多不存在单点故障问题。 安装如下
#克隆项目
git clone https://github.com/nacos-group/nacos-docker.git#进入nacos-docker目录
cd nacos-docker#查看文件列表
cd example
ll 文件列表如下 1.4.1.1 Nacos Derby安装 安装Nacos生产环境会结合prometheus和grafana实现对Nacos的监控我们这里不做它们的监控操作需要将docker-compose的配置注释掉修改 example/standalone-derby.yaml 配置如下 安装命令如下
docker-compose -f example/standalone-derby.yaml up 安装完成后我们可以直接访问它的控制台 http://localhost:8848/nacos 账号密码都是 nacos 效果如下 1.4.1.2docker 安装nacos 我们也可以直接采用Docker的方式安装Nacos这样安装不要克隆项目也不需要修改配置文件会更方 便安装命令如下 clone项目
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker 运行命令如下
docker run -d \
-e MODEstandalone \
-e SPRING_DATASOURCE_PLATFORMmysql \
-e MYSQL_SERVICE_HOST192.168.211.145 \
-e MYSQL_SERVICE_PORT3306 \
-e MYSQL_SERVICE_USERroot \
-e MYSQL_SERVICE_PASSWORD123456 \
-e MYSQL_SERVICE_DB_NAMEnacos_config \
-p 8848:8848 \
--restartalways \
--name nacos nacos/nacos-server 访问 http://localhost:8848/nacos/#/login 效果如下 二、Nacos功能应用 2.1 Nacos服务注册与发现 服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所 有服务提供者的服务列表是一件非常困难的事而且也不利于 服务的动态扩缩容。Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外Nacos Discovery Starter 也将服务实例自身的一些元数据信息-例如 host port,健康检 查URL主页等-注册到 Nacos 。 接下来我们学习一下如何使用Nacos作为服务的注册中心并实现服务注册和服务发现。当前项目开发 主流技术是SpringBoot我们就讲解基于SpringBoot如何使用Nacos实现服务注册与发现。 如上图我们以打车项目为例当用户打车成功的时候会调用 hailtaxi-order hailtaxi-order 会下订单同时修改司机状态修改状态需要调用 hailtaxi-driver 我们把 hailtaxi-order 服务 和 hailtaxi-driver 服务都注册到Nacos中并实现服务调用如果整个调用都没有问题就说明服务 注册发现没问题。 关于SpringCloud Alibaba和SpringBoot的版本我们可以通过以下链接查 看。https://start.spring.io/actuator/infohttps://start.spring.io/actuator/info bootstrap.yml bootstrap.properties 用来在程序引导时执行应用于更加早期配置信息读 取如可以使用来配置 application.yml 中使用到参数等。 application.yml application.properties) 应用程序特有配置信息可以用来配置后续各个模 块中需使用的公共参数等。 bootstrap.yml 先于 application.yml 加载。 项目中如果使用Nacos需要使用 bootstrap.yml 因此我们需要将项目中的 application.yml换成 bootstrap.yml 。 我们修改 hailtaxi-driver 的 application.yml 改名为 bootstrap.yml 注释掉consul并且添加 如下配置
server:port: 18081
#Nacos配置
spring:profiles:active: devapplication:name: hailtaxi-drivercloud:nacos:discovery:#Nacos服务地址server-addr: 192.168.211.145:8848config:#Nacos服务地址server-addr: 192.168.211.145:8848 相同另外一个项目也加上面的配置此时我们运行2个项目可以发现在Nacos中已经注册了相关服务如下图 此时用Postman访问打车下单效果如下 发现服务正常调用没有问题说明nacos正常注册。
2.2 负载均衡 如上图如果此时用户打车成功会调用订单服务订单服务会修改司机状态此时会调用
hailtaxi- driver如果是生产环境每个节点一定是集群状态比如有2个 hailtaxi-driver节点此时如何 实现负载均衡 我们可以发现服务注册到Nacos中有一个权重属性这个权重属性就是Nacos的负载均衡机制此时 需要用到Nacos的负载均衡策略 NacosRule 我们可以在程序中先初始化负载均衡算法再到bootstrap.yml中配置权重。 /**** Nacos负载均衡算法* return*/BeanScope(valueprototype)public IRule loadBalanceRule(){return new NacosRule();} 然后再在配置文件中指定每个启动实例的权重便可以实现根据权重不同的负载均衡。 2.3 配置中心 2.3.1 配置管理 我们可以在Nacos控制台配置项目的配置数据先打开Nacos控制台在命名空间 中新建命名空 间 如下图 在配置管理中添加配置文件 再将项目中的配置内容拷贝到如下表单中比如我们可以把 hailtaxi-driver原来在apollo中的配置填 写到下面表单中如下图 需要注意的是DATA ID和服务名保持一致作为程序默认加载配置。 项目中需要先引入依赖包我们以 hailtaxi-driver 为例在 pom.xml 中引入如下依赖 !--nacos-discovery--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2.2.5.RELEASE/version/dependency!--nacos-config--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactIdversion2.2.5.RELEASE/version/dependency 配置文件中添加配置中心地址在 hailtaxi-driver 的 bootstrap.yml 中添加如下配置 上图配置和属性说明如下 我们启动 hailtaxi-driver 服务默认加载 ${spring.application.name}.${file-extension:properties} 配置加载完成后配置数据会生效并访问 http://localhost:18081/driver/info/1 测试效果如下 如果此时配置文件名字如果和当前服务名字不一致可以使用 name 属性来指定配置文件名字 2.3.2 多环境切换 spring-cloud-starter-alibaba-nacos-config 在加载配置的时候不仅仅加载了以 dataid 为
${spring.application.name}.${file-extension:properties} 为前缀的基础配置还加载了dataid为 ${spring.application.name}- ${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置可以通过Spring 提供的${spring.profiles.active} 这个配置项来配置。 比如开发环境我们可以在nacos中创建 hailtaxi-driver-dev.yaml 测试环境可以在配置中创建 hailtaxi-driver-test.yaml 创建如下 hailtaxi-driver-test.yaml hailtaxi-driver-dev.yaml 修改 hailtaxi-driver 的 bootstrap.yml 配置文件如下 测试 http://localhost:18081/trip/message 效果如下 将 active 换成test,效果如下 2.3.3 共享配置 在实际的业务场景中应用和共享配置间的关系可能 Spring Cloud Alibaba Nacos Config 从 0.2.1版本后可支持自定义 Data Id 的配置通过它可以解决配置共享问题。 我们可以先创建一个配置 datasource.yaml 用于配置数据库连接如下图 我们把之前的 hailtaxi-driver-dev.yaml 中的数据库连接池删掉只保留IP如下图 程序中我们读取IP修改 hailtaxi-driver 的 DriverController 中 info() 方法注入配置文件中的 ip 代码如下 在 bootstrap.yml 中引入配置需要使用 extension-configs 属性配置如下 这里 extension-configs[n] 中n值越大优先级越高它既能解决一个应用多个配置同时还能解决 配置共享问题。 测试访问 http://localhost:18081/driver/info/1 此时能访问数据库同时也能获取 hailtaxi-driver-dev.yaml 中的配置效果如下 2.3.4配置刷新 配置自动刷新对程序来说非常重要Nacos支持配置自动刷新并且提供了多种刷新机制。 程序中如果写了 Value 注解可以采用 RefreshScope 实现刷新只需要在指定类上添加该注解即可如下代码 2.3.5 灰度发布 灰度配置指的是指定部分客户端IP 进行新配置的下发其余客户端配置保持不变用以验证新配置对客 户端的影响保证配置的平稳发布。灰度配置是生产环境中一个比较重要的功能对于保证生产环境的 稳定性非常重要。在1.1.0 中 Nacos 支持了以 IP 为粒度的灰度配置具体使用步骤如下 修改配置内容点击“发布Beta”按钮即可完成灰度配置的发布点击“发布Beta”后“发布Beta”按钮 变灰此时可以选择“停止Beta”或者“发布”。“停止Beta”表示取消停止灰度发布当前灰度发布配置的IP 列表和配置内容都会删除页面回到正常发布的样式。“发布”表示将灰度配置在所有客户端生效之前 的配置也会被覆盖同时页面回到正常发布的样式 三、Nacos集群 在生产环境Nacos一般都不是单节点存在如果是单节点很容易存在单点故障因此生产环境一般都 以集群形式存在。
3.1 集群架构 Nacos集群模式有多种但其实无论哪种都是将3个Nacos服务进行集群发布而且必须采用数据共享模 式进行配置信息共享也就是要将数据存入到同一个数据库中我们对每种集群模式进行说明
1直连模式 http://ip1:port/openAPI 直连ip模式机器挂则需要修改ip才可以使用。 比如我现在有3个Nacos每次操作数据的时候都需要使用IP端口的模式这种模式效率极低并 且一旦节点故障无法识别因此官方不推荐这种模式。
2VIP模式 http://SLB:port/openAPI 挂载SLB模式(内网SLB不可暴露到公网以免带来安全风险)直连SLB即可下面挂server真实ip可读性不好。
3域名模式 http://nacos.com:port/openAPI 域名 SLB模式(内网SLB不可暴露到公网以免带来安全风险)可读性好而且换ip方便推荐模式。 3.2 集群部署 我们搭建Nacos集群环境集群环境配置如下 1服务下载 在 https://github.com/alibaba/nacos/releases/ 下载需要的服务当前使用的是1.4.1, 我们可以 选择下载1.4.1版本版本如下 解压缩后 2配置数据库 修改 conf/application.properties 配置数据库配置如下 3集群配置 修改 conf/cluster.conf 配置集群 4配置同步 将上面那台服务器配置好的nacos发送到另外两台服务器上 5分别启动每一个节点 访问任何一个单节点信息如下 一般客户端访问可以再前置环节访问nginx然后通过nginx负载到每个nacos节点上那我们服务配置只需要单独配置nginx的域名地址。