如何基于Spring Cloud Alibaba构建微服务体系

发布时间:2021-12-21 17:56:04 作者:柒染
来源:亿速云 阅读:97

这期内容当中小编将会给大家带来有关如何基于Spring Cloud Alibaba构建微服务体系,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

为什么选择 Spring Cloud Alibaba&Nacos

经过对 Alibaba Nacos 、HashiCorp Consul 等开源注册中心做了深入的调研和比较,以下是各个注册中心的特性对比:

结论:Nacos 满足目前掌门的服务治理技术栈,能实现注册中心的平滑迁移,社区发展非常活跃,所提供的特性,使得围绕 Spring Cloud Alibaba&Nacos 能够非常方便的构建云原生应用的动态服务注册发现。

一.Nacos server 落地

1. Nacos Server 部署

如何基于Spring Cloud Alibaba构建微服务体系 (Nacos Server 部署概览图)

掌门的应用环境分为 4 套,DEV、FAT、UAT、PROD 分别对应开发、测试、准生产环境、生产环境,因此 Nacos Server 也分为 4 套独立环境。除了 DEV 环境是单机部署外,其他是集群方式部署。对外均以域名方式访问,SLB 做负载均衡,包括 SDK 方式连接 Nacos Server 和访问 Nacos Server Dashboard 控制台页面。

Nacos 数据模型由 namespace / group / service 构成。 可以通过创建不同的命名空间,做到同一个应用环境的基础上更细粒度的划分,隔离服务注册和发现。在某些场景下,开发本地有需要连接测试环境的 Nacos Server ,但其他测试服务不能调用到开发本地,这时候可以将 NacosDiscoveryProperties 的 enabled 属性设置为 false 。 

Nacos Server Dashboard 集成公司的 Ldap 服务,并在用户首次登录时记录用户信息。 

2. Nacos Server 界面

Nacos Server Dashboard 用户首次登陆时,默认分配普通用户(即非 ROLE_ADMIN )角色,对查询以外的按钮均无操作权限,以免出现误操作导致服务非正常上下线。 

Nacos Server Dashboard 页面增加服务总数及实例总数的统计,该信息每 5 秒刷新一次。

如何基于Spring Cloud Alibaba构建微服务体系  

3. Nacos 监控

基于公司现有的 Prometheus 、 Grafana 、 AlertManager 从系统层监控 Nacos。

如何基于Spring Cloud Alibaba构建微服务体系

根据 Nacos 监控手册,结合 Prometheus 和 Grafana 监控 Nacos 指标。

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

4. Nacos 日志

将 Nacos 多模块的日志统一按 info 、 warn、error 级别合并,定义 schema 字段标记不同模块,按 JSON 格式滚动输出到文件,供 ELK 采集展示。

如何基于Spring Cloud Alibaba构建微服务体系

5. Nacos 告警

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

6. Nacos 性能测试

def registry(ip):
    fo = open("service_name.txt", "r")
    str = fo.read()
    service_name_list = str.split(";")
    service_name = service_name_list[random.randint(0,len(service_name_list) - 1)]
    fo.close()
    client = nacos.NacosClient(nacos_host, namespace='')
    print(client.add_naming_instance(service_name,ip,333,"default",1.0,{'preserved.ip.delete.timeout':86400000},True,True))
    while True:
      print(client.send_heartbeat(service_name,ip,333,"default",1.0,"{}"))
      time.sleep(5)

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

总结:Nacos Server 是 3 台 1C4G 集群,同时承受 1499 个服务和 12715 个实例注册,而且 CPU 和内存长期保持在一个合适的范围内,果真 Nacos 性能是相当 OK 的。

二.Nacos Eureka Sync 落地

1. Nacos Eureka Sync 方案选型

① Sync 官方方案

经过研究,我们采取了官方的 Nacos Eureka Sync 方案,在小范围试用了一下,效果良好,但一部署到 FAT 环境后,发现根本不行,一台同步服务器无法抗住将近 660 个服务(非实例数)的频繁心跳,同时该方案不具备高可用特点。  

② Sync 高可用一致性 Hash + Zookeeper 方案

既然一台不行,那么就多几台,但如何做高可用呢?

我们率先想到的是一致性 Hash 方式。当一台或者几台同步服务器挂掉后,采用 Zookeeper 临时节点的 Watch 机制监听同步服务器挂掉情况,通知剩余同步服务器执行 reHash ,挂掉服务的工作由剩余的同步服务器来承担。通过一致性 Hash 实现被同步的业务服务列表的平均分配,基于对业务服务名的二进制转换作为 Hash 的 Key 实现一致性 Hash 的算法。我们自研了这套算法,发现平均分配的很不理想,第一时间怀疑是否算法有问题,于是找来 Kafka 自带的算法(见 Utils.murmur2 ),发现效果依旧不理想,原因还是业务服务名的本身分布就是不平均的,于是又回到自研算法上进行了优化,基本达到预期,下文会具体讲到。但说实话,直到现在依旧无法做到非常良好的绝对平均。

③ Sync 高可用主备 + Zookeeper 方案

这个方案是个小插曲,当一台同步服务器挂掉后,由它的“备”顶上,当然主备切换也是基于 Zookeeper 临时节点的 Watch 机制来实现的。后面讨论下来,主备方案,机器的成本很高,实现也不如一致性 Hash 优雅,最后没采用。

④ Sync 高可用一致性 Hash + Etcd 方案

折腾了这么几次后,发现同步业务服务列表是持久化在数据库,同步服务器挂掉后 ReHash 通知机制是由 Zookeeper 来负责,两者能否可以合并到一个中间件上以降低成本?于是我们想到了 Etcd 方案,即通过它实现同步业务服务列表持久化 + 业务服务列表增减的通知 + 同步服务器挂掉后 ReHash 通知。至此方案最终确定,即两个注册中心( Eureka 和 Nacos )的双向同步方案,通过 Etcd 来做桥梁。 

2. Nacos Eureka Sync 落地实践

① Nacos Eureka Sync 目标原则

注册中心迁移目标:

注册中心迁移原则:

② Nacos Eureka Sync 问题痛点

③ Nacos Eureka Sync 架构思想

如何基于Spring Cloud Alibaba构建微服务体系

④ Nacos Eureka Sync 集群分片及高可用方案

如何基于Spring Cloud Alibaba构建微服务体系

服务一致性 Hash 分片路由:

同步节点宕机故障转移:

3. Nacos Eureka Sync 保障手段

① Nacos Eureka Sync 同步界面

从如下界面可以保证,从 Eureka 或者 Nacos 上,新上线或者下线一个业务服务(非实例),都能让 Nacos Eureka Sync 实时感知。但我们做了更进一层的智能化和自动化: 

如何基于Spring Cloud Alibaba构建微服务体系

② Nacos Eureka Sync Etcd 监控

从如下界面可以监控到,业务服务列表是否在同步服务的集群上呈现一致性 Hash 均衡分布。

如何基于Spring Cloud Alibaba构建微服务体系

③ Nacos Eureka Sync 告警

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

4.Nacos Eureka Sync 升级演练

三.Solar 云原生微服务实践

如何基于Spring Cloud Alibaba构建微服务体系 (Solar 云原生微服务体系)

Solar 微服务体系,囊括微服务治理组件,中间件以及基础组件易用性封装,告警监控体系等,连接着掌门业务服务和底层基础设施,每项服务都遵守强有力的合约,向着云原生微服务架构方向演进。 

1. 基于 Spring Cloud Alibaba、Nacos、Sentinel 等 SDK

① Alibaba Nacos

②  Alibaba Sentinel

2. 灰度蓝绿和环境隔离

如何基于Spring Cloud Alibaba构建微服务体系

3. 基于 DevOps 发布平台的智能化和半自动化灰度蓝绿

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系 

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系 

如何基于Spring Cloud Alibaba构建微服务体系

4. 基于 DevOps 发布平台的滚动无损发布

如何基于Spring Cloud Alibaba构建微服务体系

  1. 运维 CD 发布平台,先将实例状态设置 disabled ,实例从注册中心拉出;

  2. 消费者订阅注册中心,通知消费者实例处于不可用状态;

  3. 消费者停止路由转发到不可用实例;

  4. 服务上面流量继续处理,30S 后才会启动实例发布脚本;

  5. 实例重启成功后,CD 平台通过请求寄宿在业务 Web 容器里的 VI 接口检测实例健康状态;

  6. 状态检测健康后,注册到 Nacos 注册中心;

  7. 消费者订阅到新的实例,请求正常负载。

5. 分布式追踪和 APM 系统 SkyWalking

如何基于Spring Cloud Alibaba构建微服务体系 

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系 

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

6. 应用诊断系统 Arthas & Bistoury

如何基于Spring Cloud Alibaba构建微服务体系

如何基于Spring Cloud Alibaba构建微服务体系

四. Solar 云原生容器化实践

如何基于Spring Cloud Alibaba构建微服务体系

1. CI/CD 持续发布

2. 日志收集

  1. Pod 将日志写到容器内的路径 /opt/logs/{appid}/xxx;

  2. 建立软连接指向 Node 路径 /var/log/{appid}/{podid}/xxx;

  3. 一个物理节点启动一个 FileBeat 进程收集此物理节点上所有 Pod 日志信息;

PS:经过全面的压测,一个物理节点上启动一个 FileBeat 进程收集所有 Pod 日志,性能没有问题 如果存在日志收集不及时问题,则可以一个 Pod 挂载一个 FileBeat 进程来解决,这样的缺点是会占用更多系统资源。

  1. FileBeat 将日志信息推送到 Kafka;

  2. GoHangout 并发消费 Kafka 中数据,持久化到 ES 集群中;

GoHangout 并发消费 Kafka 消息性能比较好。

  1. Kibana 显示 ES 中所有日志索引数据。

3. 微服务弹性扩容和自愈

如何基于Spring Cloud Alibaba构建微服务体系

4. 平滑迁移网络解决方案

如何基于Spring Cloud Alibaba构建微服务体系 

上述就是小编为大家分享的如何基于Spring Cloud Alibaba构建微服务体系了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. Spring Cloud中Sentinel架构的使用方法
  2. 什么是Spring Cloud Alibaba

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring cloud alibaba 微服务

上一篇:Linux系统该如何快速入门

下一篇:OLM是如何管理越来越多的operator

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》