Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践

随着使用 Nacos 的企业越来越多,遇到的最频繁的两个问题就是:如何在我的生产环境正确的来使用 namespace 以及 endpoint。这篇文章主要就是针对这两个问题来聊聊使用 nacos 过程中关于这两个参数配置的最佳实践方式。

namespce

关于 namespace ,以下主要从 namespace 的设计背景 和 namespace 的最佳实践 两个方面来讨论。

namespace 的设计背景

namespace 的设计是 nacos 基于此做多环境以及多租户数据(配置和服务)隔离的。即:

  • 从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。例如,你可能有日常,预发和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。如下图所示:

  • 从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示。



注意: 该功能还在规划中。

namespace 的最佳实践

关于 namespace 的最佳实践 ,这部分主要包含有两个 Action:

  • 如何来获取 namespace 的值
  • namespace 参数初始化方式

如何来获取 namespace 的值

无论您是基于 Spring Cloud 或者 Dubbo 来使用 nacos,都会涉及到 namespace 的参数输入,那么这个时候 namespace 的值从哪里可以获取呢?

  1. 如果您在使用过程中没有感知到这个参数的输入,那么 nacos 统一会使用一个默认的 namespace 作为输入,nacos naming 会使用 public 作为默认的参数来初始化,nacos config 会使用一个空字符串作为默认的参数来初始化。。
  2. 如果您需要自定义自己的 namespace,那么这个值该怎么来产生?

    可以在 nacos 的控制台左边功能侧看到有一个 命名空间 的功能,点击就可以看到 新建命名空间 的按钮,那么这个时候就可以创建自己的命名空间了。创建成功之后,会生成一个命名空间ID,主要是用来避免命名空间名称有可能会出现重名的情况。因此当您在应用中需要配置指定的 namespace 时,填入的是命名空间ID。重要的事情说三遍,
  • 当您在应用中需要配置指定的 namespace 时,填入的是命名空间 ID
  • 当您在应用中需要配置指定的 namespace 时,填入的是命名空间 ID
  • 当您在应用中需要配置指定的 namespace 时,填入的是命名空间 ID

说明: namesace 为 public 是 nacos 的一个保留控件,如果您需要创建自己的 namespace,最好不要和 public 重名,以一个实际业务场景有具体语义的名字来命名,以免带来字面上不容易区分自己是哪一个 namespace。

namespace 参数初始化方式

nacos client 对 namespace 的初始化流程如下图所示:

nacos client 对 namespace 的初始化,主要包含两部分,

  • 用户态通过 nacos client 构造实例时通过 properties 参数传入的 namespace
  • 在云环境下(阿里云下的 EDAS)的 namespace 参数解析。

    可通过 -Duse.cloud.namespace.parsing=true/false 来控制是否需要在云环境自动解析 namespace 参数,默认为 true,是会自动解析,其目的就是方便用户上云时可以以零成本的方式平滑上云。如果用户在云上需要用自建的 nacos 下的 namespace,那这个时候只需将 -Duse.cloud.namespace.parsing=false 即可。

endpoint

关于 endpoint ,也主要从 endpoint 的设计背景 和 endpoint 的参数初始化 两个方面来讨论。

endpoint 的设计背景

当 nacos server 集群需要扩缩容时,客户端需要有一种能力能够及时感知到集群发生变化。及时感知到集群的变化是通过 endpoint 来实现的。也即客户端会定时的向 endpoint 发送请求来更新客户端内存中的集群列表。

endpoint 的参数初始化

Nacos Client 提供一种可以对传入的 endpoint 参数规则解析的能力。即当通过构造函数的 properties 来初始化 endpoint 时,指定的 endpoint 值可以是一个具体的值,也可以是一个占位符的形式,如下所示:

${endpoint.options:defaultValue}

说明:

  1. endpoint.options 是一个具体的变量。支持从系统属性,系统环境变量中读取。
  2. defaultValue 是给出的一个默认值。当从具体的变量中没有被正确初始化时,会使用给出的默认值来初始化。

整个 endpoint 的解析规则比较复杂,整体的一个解析流程图如下所示:

注意: 蓝色特别区分的是支持云环境下(阿里云上的 EDAS)自动从系统环境变量中来读取 endpoint 值,以此来达到用户本地开发或者将应用往云上迁移的时候以零成本的改造方式实现平滑上云。

说明:

1. 开启 endpoint 参数规则解析

1.1. 如果在初始化 Nacos Client 的时候,没有通过 properties 来指定 endpoint,这个时候会从系统环境变量中变量名为 ALIBABA_ALIWARE_ENDPOINT_URL 指定的值来初始化,如果系统环境变量也没有设置,那么这个时候将会返回一个空字符串。

1.2. 如果设置了 endpoint,

1.2.1 设置的 endpoint 是一个指定具体的值。

这时会先从系统环境变量中变量名为 ALIBABA_ALIWARE_ENDPOINT_URL 指定的值来初始化,如果系统环境变量没有设置,那么这个时候用用户态传入的具体值来初始化 endpoint。

1.2.2 以占位符的形式输入。

这时会解析出具体占位符的值,然后:

  • 依次从系统属性和环境变量中来取值。

    例如,您输入的是 ${nacos.endpoint:defaultValue},那么解析出来的            占位符是 nacos.endpoint。解析出来后,会先读取系统属性中(即 System.getProperty("nacos.endpoint"))是否设置了 nacos.endpoint 变量值,如果没有,则会从系统环境变量中变量名为 nacos.endpoint指定的值来初始化。
  • 如果通过解析出来的占位符还没有正确初始化 endpoint,则会从系统环境变量中变量名为 ALIBABA_ALIWARE_ENDPOINT_URL 指定的值来初始化。
  • 如果经过以上两步还没有被初始化,这时如果您设置了默认值,这个时候就会使用默认值来初始化 endpoint,否则的话以解析出来的占位符返回。
  1. 关闭 endpoint 参数规则解析

    当关闭了 endpoint 参数规则解析的时候,这个时候就以用户态在构造 Nacos Client 时通过 properties 参数输入的 endpoint 值为主。

默认情况下, Nacos Client 是开启 endpoint 参数规则解析的能力。如果你想关闭该能力,可在 Nacos Client 初始化的时候在传入的 properties 实例中指定 key 为 isUseEndpointParsingRule,值为 false 即可关闭。

本文作者:彭兵庭,花名得少,GitHub ID @pbting,阿里巴巴高级开发工程师,主要研究方向分布式系统中间件,致力于打造一套通用的分布式系统中间件开发框架,降低分布式系统中间件的开发门槛。Spring Cloud Alibab 和 Nacos 开源项目 committer。目前在软负载团队参与产品架构升级的相关工作。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java.lang.ArrayIndexOutOfBoundsException:数组下标越界越界

前台vue初始化 pinIds:[],但是当pinIds前台查询条件传值为空时,pinIds[0]、pinIds[1]取不到值,就会报数组下标越界越界 改为 就可以了

如何实现“持续集成”?闲鱼把研发效率翻了个翻

阿里妹导读:业务的快速发展,需要我们更快速地响应,和更高质量产品的交付。如何从原来大(xiao)迭(pu)代(bu)的开发模式切换为精益开发模式?以 2-1-1(2周需求交付周期,1周需求开发周期,1小时集成时…

分布式Session解决方案_Spring Session + Redis

接上一篇:分布式6大核心专题_分布式Session https://gblfy.blog.csdn.net/article/details/113802195 文章目录1. 安装redis服务并启动2. 引入Spring Session组件3. 分别启动8081端口和8082端口4. 调用8081登录接口5. 调用8081获取用户信息接口6. 调用8082获取用户信…

酸了!华为补贴湖北员工每天最高 2000 元

近日,华为员工发帖称,华为将给武汉研究所现场办公的人员,每人补助2000元(从2020年1月23日开始算,以湖北发布疫情终止之日截止),湖北以外其他地区1000 元,海外每天150美金&#xff08…

java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String

数据库字段: 数据库中的时间字段handle_time是datatime 前端: xml文件: 运行结果: 原因 这是因为原因是mybatis 中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串进行对比判断则会引发异常. 所以在上面…

四年从P7到P9,这个阿里小二的秘诀是给自己挖坑

恶魔有一头精彩的头发。 “紫色、灰色、灰色、雾霾蓝色、黄色、蓝色、紫色、绿色、灰色、绿色。” 若有人问起她的染发史,她能准确地报出过去两年里的所有发色。干脆利落,没半个字多余。 恰如她在工作中给大多数人的印象:语速极快&#xf…

达摩院首席数据库科学家李飞飞:云原生新战场,我们如何把握先机?

阿里妹导读:云计算大潮来袭,传统数据库市场正面临重新洗牌的情境,包括云数据库在内的一批新生力量崛起,动摇了传统数据库的垄断地位,而由云厂商主导的云原生数据库则将这种“改变”推向了高潮。 云时代的数据库将面临怎…

什么? 搞不定redis分布式锁?

作者:故事凌 分布式锁 1. 什么是分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候&am…

阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年

提到阿里云CDN,不得不提技术掌舵人姚伟斌(文景),虽然他不是团队中最“老”的同学,但他却历经了淘宝业务发展最为飞速的几年,见证了从最初服务淘宝和集团内部的CDN,到如今国内服务客户最多的云CD…

把握数据库发展趋势 DBA应如何避免“踩坑”?

在DTCC 2019大会上,阿里云智能数据库产品事业部高级产品专家萧少聪做了题为《如何构建云时代DBA的知识体系》的演讲,进行云时代以后,IT行业各工种的职责都在发生变化,云数据库使得日常DBA管理实现更多的自动化,大大提高…

DevOps 转型时如何安全融入?对企业产出有何影响?2019年 DevOps 最新现状研究报告解读 | 原力计划...

作者 | liumiaocn责编 | 徐威龙封图| CSDN 下载于视觉中国2019年DORA发布了DevOps的研究报告,迄今为止这已经是DORA的第八次报告的发布。相较于往年的报告,2019年的报告全篇只聚焦于一个要素:安全。在2018年DORA提供了一个包含五个步骤的模型…

开源性能可视化工具——FlameScope模式识别

FlameScope是一个新的开源性能可视化工具,它使用次秒级偏移热图和火焰图来分析周期活动、方差、扰动。我们在Netflix TechBlog上面,发表了技术文章Netflix FlameScope,以及工具的源代码。火焰图很好理解,次秒级偏移热图理解起来要…

在腾讯云开通短信验证服务设置正确格式的签名和正文模板并完成群发消息测试

链接👉 https://blog.csdn.net/weixin_45001200/article/details/118878336?spm1001.2014.3001.5501 经历了一晚上的审核,终于在第二天近10点发来了测试验证码......

独家揭秘:阿里小程序的一云多端!看这篇就够了!

专家介绍 视频回放 https://yq.aliyun.com/live/1097 阿里小程序的一云多端 相信绝大部分同学知道阿里一云多端的项目,最早始于19年三月份在北京云栖大会上,阿里云的CEO在云栖大会上对外发布了一云多端的项目。 一云多端是什么? 大家今天常见都是微…

Docker 概念很难理解?一文搞定 Docker 端口绑定

作者 | Dieter Jordens译者 | 苏本如,责编 | 夕颜出品 | CSDN(ID:CSDNnews)以下为译文:作为初级开发人员的你,是不是参加过这样的面试,在面试中面试官希望你准确地回答Docker的工作原理?现今的面…

阿里云高级技术专家张毅萍:我眼中的边缘计算

边缘计算是目前公认的大方向,越来越多的边缘计算应用将随着5G建设的步伐而兴起。阿里云边缘计算团队的目标是在行业爆发来临之前,完成基础计算资源平台的构建,为产业提供基于体验的计算调度能力,进而助推整个产业快速应用发展。那…

docker 安装 mysql和Navicat Premium 远程连接

文章目录1. 安装mysql2. Navicat Premium 远程连接1. 安装mysql # 通过搜索镜像 docker search mysql# 拉取mysql镜像 docker pull mysql# 查看拉取的mysql镜像 docker images#创建MySQL容器 docker run -di --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot mysql# 查…

牛客网SQL篇刷题篇(1-2)

https://www.nowcoder.com/ta/sql

阿里PB级Kubernetes日志平台建设实践

阿里PB级Kubernetes日志平台建设实践 QCon是由InfoQ主办的综合性技术盛会,每年在伦敦、北京、纽约、圣保罗、上海、旧金山召开。有幸参加这次QCon10周年大会,作为分享嘉宾在刘宇老师的运维专场发表了《阿里PB级Kubernetes日志平台建设实践》&#xff0c…

果断拿下4000万美元D轮融资,Rancher发力中国本土化与国产化!

2020年3月17日,业界应用广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布完成新一轮4000万美元D轮融资。 本轮融资由Telstra Ventures领投,既有投资者Mayfield、Nexus Venture Partners、国富绿景创投&#xff0…