概述
在微服务架构下,一个业务服务会被拆分成多个微服务,各个服务之间相互通信完成整体的功能。
另外,为了避免单点故障,微服务都会采取集群方式的高可用部署,集群规模越大,性能也会越高。
服务消费者要去调用多个服务提供者组成的集群。首先,服务消费者需要在本地配置文件中维护服务提供者集群中每个节点的请求地址。其次,服务提供者集群中如果某个节点下线或者宕机,服务消费者的本地配置中需要同步删除这个节点的请求地址,防止请求发送到已宕机的节点上造成请求失败。为了解决这类的问题,就需要引人服务注册中心,它主要有以下功能:
- 服务地址的管理。
- 服务注册。
- 服务动态感知。
能够实现这类功能的组件很多,比如ZooKeeper、Eureka、Consual、Etcd、Nacos等。
什么是Alibaba Nacos
Nacos致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos的关键特性如下:
服务发现和服务健康监测
Nacos支持基于DNS和基于RPC的服务发现。服务提供者使用原生SDK、OpenAPI或一个独立的Agent TODO注册Service后,服务消费者可以使用DNS或HTTP&API查找和发现服务。
Nacos提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发生请求。Nacos支持传输层(PING或TCP)和应用层(如HTTP、MySQL、用户自定义)的健康检查。对于复杂的云环境和网络拓扑环境中(如VPC、边缘网络等)服务的健康检查,Nacos提供了agent上报和服务端主动检查两种健康检查模式。Nacos还提供了统一的的健康检查仪表盘,帮助用户根据健康状态管理服务可用性及流量。
动态配置服务
业务服务一般都会维护一个本地配置文件,然后把一些常量配置到这个文件中。这中方式在某些场景中会存在问题,比如配置需要变更时要重新部署应用。而动态配置服务可以以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置,可以使配置管理变得更加高效和敏捷。配置中心化管理让视线无状态服务变得更简单,让服务按需弹性扩展变得更容易。
动态DNS服务
动态DNS服务支持权重路由,让开发者更容易地实现中间层负载均衡、更灵活的路由策略、流量控制,以及数据中心内网的简单DNS解析服务。
服务及其元数据管理
Nacos可以是开发者从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA及最重要的metrics统计数据。
Nacos的基本使用
Nacos的安装
Nacos支持三种部署模式,分别是单机、集群和多集群。需要注意的是,Nacos依赖Java环境,并且要求使用JDK1.8以上版本。
Nacos的安装方式有两种,一种是源码安装,另一种直接是使用已经编译好的安装包。
我们选择源码安装方式:
- 码云上下载1.4.1最新稳定版zip包(https://gitee.com/mirrors/Nacos/tree/1.4.1/)
- windows/linux解压进入根目录,执行 mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
- 切换到 distribution/target/nacos-server-1.4.1/nacos/bin 目录下。
- 根据系统选择启动命令
# linux
sh startup.sh -m standalone
# window
stardup.cmd -m standalone
5. 服务启动后,可以通过http://127.0.0.1:8848/nacos 访问Nacos的控制台(账号:nacos,密码:nacos)。
windows源码编译 linux 安装
[root@localhost nacos]# unzip nacos-server-1.4.1.zip
- 启动服务
[root@localhost nacos]# cd nacos-server-1.4.1/
[root@localhost nacos-server-1.4.1]# ls
nacos
[root@localhost nacos-server-1.4.1]# cd nacos/
[root@localhost nacos]# cd bin/
[root@localhost bin]# ls
derby.log logs shutdown.cmd shutdown.sh startup.cmd startup.sh work
[root@localhost bin]# sh startup.sh -m standalone
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/lib/ext -Xloggc:/opt/nacos/nacos-server-1.4.1/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/opt/nacos/nacos-server-1.4.1/nacos/plugins/health,/opt/nacos/nacos-server-1.4.1/nacos/plugins/cmdb -Dnacos.home=/opt/nacos/nacos-server-1.4.1/nacos -jar /opt/nacos/nacos-server-1.4.1/nacos/target/nacos-server.jar --spring.config.additional-location=file:/opt/nacos/nacos-server-1.4.1/nacos/conf/ --logging.config=/opt/nacos/nacos-server-1.4.1/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /opt/nacos/nacos-server-1.4.1/nacos/logs/start.out
# 可以查看启动日志
[root@localhost bin]# cat /opt/nacos/nacos-server-1.4.1/nacos/logs/start.out
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/lib/ext -Xloggc:/opt/nacos/nacos-server-1.4.1/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/opt/nacos/nacos-server-1.4.1/nacos/plugins/health,/opt/nacos/nacos-server-1.4.1/nacos/plugins/cmdb -Dnacos.home=/opt/nacos/nacos-server-1.4.1/nacos -jar /opt/nacos/nacos-server-1.4.1/nacos/target/nacos-server.jar --spring.config.additional-location=file:/opt/nacos/nacos-server-1.4.1/nacos/conf/ --logging.config=/opt/nacos/nacos-server-1.4.1/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
,--.
,--.'|
,--,: : | Nacos 1.4.1
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 2848
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.174.128:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
2021-04-23 11:45:34,172 INFO Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@40317ba2' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-23 11:45:34,178 INFO Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-23 11:45:34,600 INFO Tomcat initialized with port(s): 8848 (http)
2021-04-23 11:45:35,089 INFO Root WebApplicationContext: initialization completed in 4271 ms
2021-04-23 11:45:38,482 INFO Initializing ExecutorService 'applicationTaskExecutor'
2021-04-23 11:45:38,648 INFO Adding welcome page: class path resource [static/index.html]
2021-04-23 11:45:39,057 INFO Creating filter chain: Ant [pattern='/**'], []
2021-04-23 11:45:39,101 INFO Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3af4e0bf, org.springframework.security.web.context.SecurityContextPersistenceFilter@532721fd, org.springframework.security.web.header.HeaderWriterFilter@24a1c17f, org.springframework.security.web.csrf.CsrfFilter@1095f122, org.springframework.security.web.authentication.logout.LogoutFilter@6970140a, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7fb9f71f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@514eedd8, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@245a26e1, org.springframework.security.web.session.SessionManagementFilter@73511076, org.springframework.security.web.access.ExceptionTranslationFilter@3d6300e8]
2021-04-23 11:45:39,203 INFO Initializing ExecutorService 'taskScheduler'
2021-04-23 11:45:39,225 INFO Exposing 2 endpoint(s) beneath base path '/actuator'
2021-04-23 11:45:39,321 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'
2021-04-23 11:45:39,325 INFO Nacos started successfully in stand alone mode. use embedded storage
- 确认linux的8848端口是否开放
[root@localhost bin]# firewall-cmd --zone=public --add-port=8848/tcp --permanent
success
[root@localhost bin]# firewall-cmd --query-port=8848/tcp
no
[root@localhost bin]# firewall-cmd --reload
success
[root@localhost bin]# firewall-cmd --query-port=8848/tcp
yes
Nacos服务注册发现相关API说明
Nacos提供了SDK即Open API的方式来完成服务注册与发现等操作,由于服务端只提供了REST接口,所有SDK本质上是对HTTP请求的封装。
Nacos集成Spring Boot实现服务注册与发现
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100343.html