作者:廖春涛(春少)

https://www.yuque.com/docs/share/17664885-e0d8-40fd-a208-f1b58794d544

经过一年多发展,1.2.0版本已经从安全上解决上生产的最后疑虑,解决用户主要诉求。

经过社区讨论,从1.3.0版本开始修炼内功,聚焦“简单”、“性能”、“高可用”这核心的三个点进一步提升Nacos核心竞争力。今天很高兴能代表社区向大家介绍1.3.0的核心特性

  • 内嵌关系型分布式数据库,简化集群部署模式

  • 集群管理下沉统一,提供全新集群管理能力

  • 一致性协议抽象升级,提供更高的性能

  • 安全升级,解决Fastjson和越权风险

下面我们逐个介绍一下这些能力

轻量级的内嵌关系型分布式数据库

为什么只是用服务发现模块也要我部署MySQL?MySQL集群搭建的成本有多高?不能把集群部署简单一点,像Consul、Etcd那样子?

这不,为了解决这个问题,Nacos 1.3.0 借鉴了 Etcd 的通过Raft协议将单机KV存储转变为分布式的KV存储的设计思想,基于SOFA-JRaft以及Apache Derby构建了一个轻量级的分布式关系型数据库,同时保留了使用外置数据源的能力,用户可以根据自己的实际业务情况选择其中一种数据存储方案。

从Nacos 1.3.0版本开始集群部署可以不依赖MySQL的这个特性,不仅降低中小用户的集群运维部署成本,也简化了其集群部署的操作以及省去了部署一套数据库集群的操作。

新特性的开启命令为

./startup.sh -p embedded

然后查看启动日志是否有出现以下信息:Nacos started successfully in cluster mode. use embedded storage

同时,为了方便用户查询本机节点的数据同步情况,Nacos 1.3.0 配置模块开放了新的运维 Open-API,供其查询当前节点本地数据存储情况,并且该Open-API只能执行select语句,其他DML语句一概不支持,其使用方式如下

GET /nacos/v1/cs/ops/derby?sql=select * from config_info

使用该命令时,最好加上分页查询,避免一次查处大量的数据影响Nacos的正常对外业务工作,如果没有加上分页查询,则会自动添加分页查询语句,默认查询最开始的1k条数据。其分页查询的SQL的例子如下。

select * from config_info OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY

其数据返回结果如下

{    "code":200,    "message":null,    "data":\[        {            "ID":242149783664332800,            "DATA\_ID":"application.properties",            "GROUP\_ID":"DEFAULT\_GROUP",            "TENANT\_ID":"",            "APP\_NAME":"",            "CONTENT":"this.is.test=liaochuntao",            "MD5":"bedbfd7069e999edf2adf9d8a1af3083",            "GMT\_CREATE":"2020-06-03T05:30:47.345+0000",            "GMT\_MODIFIED":"2020-06-03T05:30:47.345+0000",            "SRC\_USER":null,            "SRC\_IP":"127.0.0.1",            "C\_DESC":null,            "C\_USE":null,            "EFFECT":null,            "TYPE":"properties",            "C\_SCHEMA":null        }    \]}

Nacos 1.3.0 构建的轻量级的分布式关系型存储,其已满足事务ACID性质。后面我们会在这基础之上进一步优化该存储的性能。

注意事项

分布式ID——Snowflake

Nacos 1.3.0的分布式存储,其数据的主键依赖雪花ID算法进行生成,雪花算法ID需要DataCenterIdWorkerId,默认情况下,_WorkerId不需要进行设置,会根据InetAddress.getLocalHost()进行计算生成。如果需要自己指定,则在application.properties进行如下配置设置

### set the dataCenterID manuallynacos.core.snowflake.data-center=Number### set the WorkerID manuallynacos.core.snowflake.worker-id=Number

数据迁移

由于Nacos 1.3.0新增的内嵌存储模式是全新的数据存储模式,因此在进行Nacos-Server升级时,如果是需要使用这种新能力,需要另外部署一个Nacos 1.3.0集群,然后进行数据迁移,由于Nacos 1.3.0 新增的内嵌存储模式,还无法自动的将原本MySQL的数据直接一键进行数据迁移,因此用户只能使用控制台的数据导出导入的方式进行(会丢失配置历史数据),更加完备的数据迁移功能会在后面的版本进行开放。

全新的集群管理

提供全新集群管理页面

Nacos 1.3.0版本开始,对集群节点管理进行了统一,将原有配置模块以及服务模块的集群节点管理统一下沉到内核模块,并且优化了集群节点信息展示,使得其更贴近Nacos集群节点的数据信息展示,其显示的内容包括如下几个方面

  1. 服务发现模块旧的Raft协议的元数据数据

  2. 配置管理模块使用新Raft协议的元数据

  3. Nacos节点自身的元数据信息

  4. 新Raft协议的RPC端口

  5. 节点的版本信息

  6. 节点的权重信息(该权重的功能暂未提供,以后服务端节点的负载均衡使用)

  7. 节点元数据信息上次刷新时间

新的集群寻址模式设置

Nacos 1.3.0版本开始,对集群节点的寻址模式做了统一,将原本分散的节点寻址模式整合并抽象,方便将来可以扩宽Nacos的集群发现机制,用户可以通过如下设置自己选择需要使用哪一种寻址模式作为集群节点的管理

文件寻址模式

nacos.core.member.lookup.type=file(默认值)

地址服务寻址模式

nacos.core.member.lookup.type=address-server

全新的一致性协议

Nacos 1.3.0版本开始,将对现有的一致性协议层进行统一抽象以及下沉。在Raft的选型上,使用了SOFA-JRaf作为CP协议的Backend,并且将其与配置管理模块进行了对接。用户可以通过调整下面的参数对Raft协议进行调整。

# Sets the Raft cluster election timeout, default value is 5 second# 设置Raft群集选举超时,默认值为5秒nacos.core.protocol.raft.data.election\_timeout\_ms=5000# Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute# 设置Raft快照定期执行的时间,默认值为30分钟nacos.core.protocol.raft.data.snapshot\_interval\_secs=30# Raft internal worker threads# Raft 内部工作线程数量nacos.core.protocol.raft.data.core\_thread\_num=8# Number of threads required for raft business request processing# Raft 业务请求处理所需的线程数nacos.core.protocol.raft.data.cli\_service\_thread\_num=4# raft 线性读取策略,默认为ReadOnlySafe,可以选择ReadOnlyLeaseBasednacos.core.protocol.raft.data.read\_index\_type=ReadOnlySafe### rpc请求超时,默认5秒nacos.core.protocol.raft.data.rpc\_request\_timeout\_ms=5000

线性读参数解析

  1. ReadOnlySafe

  2. 该线性读模式,每次Follower进行读请求时,需要和Leader同步日志提交位点信息,而Leader,需要向过半的Follower发起证明自己是Leader的轻量的RPC请求,相当于一个Follower读,至少需要1 + (n/2)+ 1 次的RPC请求。

  3. ReadOnlyLeaseBased

  4. 该线性读模式,每次Follower进行读请求时,Leader只需要判断自己的Leader租约是否过期了,如果没有过期,直接可以回复Follower自己是Leader,但是该机制对于机器时钟要求很严格,如果有做时钟同步的话,可以考虑使用该线性读模式。

如果说对于配置的发布、修改操作比较频繁,可以将Raft快照的时间适当的进行调整,避免新节点加入或者节点重启时,由于Raft日志回放操作数太多导致节点可开始对外服务的时间过长。

JRaft

同时,为了方便运维对新的Raft协议能够进行一些简单的运维操作,Nacos 1.3.0 内核模块开放了相关一致性协议运维的 Open-API,供其对Raft进行一些运维操作,其相关的运维操作如下

切换某一个Raft Group的Leader节点

POST /nacos/v1/core/ops/raft{    "groupId": "xxx",    "command": "transferLeader"    "value": "ip:{raft\_port} or ip:{raft\_port},ip:{raft\_port},ip:{raft\_port}"}

重置某一个Raft Group的集群成员

POST /nacos/v1/core/ops/raft{    "groupId": "xxx",    "command": "resetRaftCluster",    "value": "ip:{raft\_port},ip:{raft\_port},ip:{raft\_port},ip:{raft\_port}"}

注意,该操作是一个高危操作,仅仅当Raft集群的 n/2 + 1节点crash之后无法满足过半投票的要求才可以使用该运维命令,用于快速让当前剩余的节点重组Raft集群,对外提供服务,但是这个操作很大程度会造成数据的丢失

触发某一个Raft Group执行快照操作

POST /nacos/v1/core/ops/raft{    "groupId": "xxx",    "command": "doSnapshot",    "value": "ip:{raft_port}"}

移除某一个Raft Group中的某一成员

POST /nacos/v1/core/ops/raft{    "groupId": "xxx",    "command": "removePeer",    "value": "ip:{raft_port}"}

批量移除某一个Raft Group中的多个成员

POST /nacos/v1/core/ops/raft{    "groupId": "xxx",    "command": "removePeers",    "value": "ip:{raft\_port},ip:{raft\_port},ip:{raft_port},..."}

后续

目前一致性协议层只是将CP协议具体实现了,后面会再将AP协议——Distro下沉到一致性协议层中,并且调整Distro的实现,其协议内部的通信将使用gRPC,以配合Nacos对于整个通信通道的规划。同时真正实现对整个一致性协议使用方式的收拢。

安全升级

  1. 修复fastjson安全漏洞

  2. 修复tenant越权漏洞

贡献者

Nacos 1.3.0 版本的开发中,社区同学贡献了很大的力量,在此表示感谢,他们是(排序不分先后):@KomachiSion @zongtanghu @wangweizZZ @Maijh97 @jintonghuoya @jzdayz @yfh0918 @wolfgangzhu @ObserverYu @langghaha @jiangcaijun @wfnuser @TsingLiang @showkawa @yanlinly @chuntaojun

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享

Nacos 1.3.0 来了,基于全新内核构建!相关推荐

  1. 构建新模式java_Nacos 1.3.0 来了,基于全新内核构建!

    本文系投稿,作者:廖春涛(春少) 经过一年多发展,1.2.0版本已经从安全上解决上生产的最后疑虑,解决用户主要诉求. 经过社区讨论,从1.3.0版本开始修炼内功,聚焦"简单".&q ...

  2. 直播回顾:如何基于Linux内核构建起商用密码基础设施?| 龙蜥技术

    编者按:本文整理自龙蜥大讲堂技术解读,分享主题为<构建商用密码操作系统>,直播视频回放已上线至龙蜥社区官网(文末阅读原文直接跳转):首页-支持-视频,欢迎观看. 作者张天佳,来⾃阿⾥云操作 ...

  3. Nacos 1.3.0 发布, 全新内核构建

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 1.3.0版本开始修炼内功,聚焦"简单".&q ...

  4. Nacos 1.3.0 发布,一个修炼内功的版本:全新内核构建!

    Na点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 来源 | 1.3.0版本开始修炼内功,聚焦 ...

  5. SBuild 0.2.0 发布,基于 Scala 的构建系统

    SBuild 0.2.0 增加虚拟的 @include 注解用于包含其他的 Scala 文件到构建文件中,利用这个特性可在项目间分享公用的配置和构建逻辑:扩展了 TargetContext 的 API ...

  6. (笔记)Chrome浏览器基于Chromium内核的浏览器 解决卡顿的方法

    适用于Chrome浏览器和基于Chromium内核构建的浏览器. 文中浏览器:Windows10下基于Chromium内核的Edge浏览器 1.通过网址栏快速重启浏览器 当浏览器页面已经非常卡顿时,我 ...

  7. emui4.0Android主题,华为全新系统EMUI4.0发布:基于安卓6.0!

    原标题:华为全新系统EMUI4.0发布:基于安卓6.0! Mate 8.HUAWEI Watch相继登场,然而华为今天这场发布会上还有一个主角,那就是全新系统EMUI4.0(苹果前UI设计师也参与了设 ...

  8. android P精简教程,华为EMUI 9.0发布:基于Android P打造 设置项精简10%

    [TechWeb]9月2日消息,日前,华为方面正式在德国对外公布了全新的EMUI 9.0系统,基于Android P深度定制,采用极简的设计理念,Slogan为Enable a quality lif ...

  9. 春生万物行致远-逐浪CMS v8.0全面发布[基于.NET Core]

    北京时间2019年4月6日: 领先的CMS门户系统研发.基础数据元与web框架研发厂商--Zoomla!逐浪CMS团队宣布,推出新一代CMS产品: Zoomla!逐浪CMS V8. 这是基于微软.NE ...

  10. 2018洛杉矶车展:基于全新TNGA架构的美版全新卡罗拉三厢亮相

    2018届洛杉矶车展,丰田发布了新一代卡罗拉三厢版,新车基于全新TNGA架构GA-C平台打造,作为一款全球车型,海外版新卡罗拉与国产全新卡罗拉/雷凌互为姊妹车,美规运动版车型则在新雷凌外观基础上换装更 ...

最新文章

  1. Y/C分离/2/3D滤波器
  2. 10.31T4 HAOI2010最长公共子序列 计数+容斥原理
  3. c语言错误re,c语言malloc之后再realloc的有关问题
  4. 软考系统架构师笔记-案例分析重点(二)
  5. 别人用钱,而我用python爬虫爬取了一年的4K高清壁纸
  6. 爬虫项目之爬取页面并按界面样式导入excel表格
  7. Android安全开发之WebView中的地雷
  8. 如何利用C++和libCurl使用OCR SDK
  9. 【图文】远程桌面链接:这可能是由于credssp加密oracle修正
  10. Git 远程仓库 git remote
  11. linux下用iperf测试步骤,网络性能测试工具Iperf详细使用图文教程
  12. qnap raid5升级raid6_实践出真知!100TB的RAID5到底能否重建成功?
  13. 什么东西能够改善睡眠,拯救失眠的助眠好物推荐
  14. NVENC/NVDEC 10bits 编程
  15. css水平垂直居中四种常用方式
  16. 程序员这样对待简历,你期望面试官怎么对待你?
  17. rails 通过局域网ip连接访问本地Rails项目
  18. 阿里/腾讯云静默安装Oracle11G超级详细教程
  19. 交换机设备登录账号权限1_交换机上配置RADIUS登录认证
  20. 如何看待千锋教育在全网开源自己的全学科教学视频?

热门文章

  1. IE各浏览器HACK
  2. Weex第一天:公共样式
  3. fastclick.js插件使用简单说明
  4. Laravel 2017 年度调查报告
  5. 德江多措施推进大数据应用“智慧德江”建设
  6. 程序默认用管理员身份打开(vs2010)
  7. [JavaScript]Call和Apply方法
  8. 如何在Mac上的Pages文稿中设置对开页?
  9. 艺术字体图标设计软件Art Text 4 for Mac
  10. JProfiler 12 for Mac(Java开发分析工具)