从架构开始,Get注册配置中心Nacos

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
密钥管理服务KMS,1000个密钥,100个凭据,1个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 对我们这样的中小企业来说,性能和稳定性需求需要平衡成本。以往我们对新技术胆战心惊是因为通常不具备大规模IT基础设施和人力资源来处理故障危机,因此阿里云注册配置中心 MSE-Nacos就是一个既能够满足需求又不会造成巨大负担的解决方案

从软件架构说起

软件架构是指软件系统的整体结构设计。它定义了软件的主要组成模块、这些模块之间的交互关系和依赖关系,以及软件系统与外部环境的交互方式。一个好的软件架构能够实现软件系统的业务目标和质量属性要求。

 

软件架构通常包含以下几个方面:

1. 组件划分 - 将系统划分为不同的组件模块,每个组件通过接口与其他组件交互。常见的组件包括数据层、业务逻辑层、表示层等。

2. 组件间交互 - 定义组件之间的接口和交互协议,比如使用 RPCRESTful API 等方式进行交互。

3. 数据流设计 - 设计系统中的数据流向,数据在组件之间的流动路径。

4. 描述非功能需求 - 如性能、安全性、可用性等非功能需求在架构中的实现方式。

5. 部署模型 - 设计系统的物理部署拓扑结构和部署方式。

6. 技术选择 - 为系统做出平台、框架、中间件等基础技术的选择。

image.png

一个好的软件架构需要根据要解决的问题,对目标系统的边界进行界定。考虑业务需求、系统性能、可维护性、可扩展性等多方面因素。设计软件架构是一个综合性的系统工程,需要架构师具备技术广度与深度,以及对业务的理解。根据沟通机制,使得软件各部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

 

架构模式定义:“由许多结构性组织模式形成成的系统家族:其中许多组件以及链接方式的字汇,也有一些彼此组合上的限制。[Shaw, Mary; Garlan, David. Software architecture: perspectives on an emerging discipline. Prentice Hall. 1996. ISBN 978-0-13-182957-2.]

有许多知名的架构我相信你一定见过:

l   分层模式 (Layered pattern)

l   客户端/服务器模式 (Client-server pattern)

l   主/从模式 (Master-slave pattern)

l   管道/过滤器模式 (Pipe-filter pattern)

l   代理模式 (Broker pattern)

l   对等模式 (Peer-to-peer pattern)

l   事件总线模式 (Event-bus pattern)

l   模型/视图/控制器 (MVC) 模式 (Model-view-controller pattern)

l   黑板模式 (Blackboard pattern)

l   解析器模式 (Interpreter pattern)

再谈谈SpringCloud

image.png

图:单体架构

我想要重点介绍的是SpringCloud,它与今天的主角密切相关。随着互联网的快速发展,单体架构的软件系统已经不能够满足购物节和活动高峰产生的高并发,大流量的性能要求;系统架构逐步走上了分布式,但是分布式系统天生就复杂,不像单体应用那样把几个框架整合起来就可以了。因此各大互联网公司都投入技术力量研发自己的基础设施,比如比较有名的:阿里的开源项目dubboNetflix开发的一系列服务框架;在这种百花齐放、重复造轮子的市场状况下,共同维护一个统一的标准来简化分布式系统的开发逐渐成为了开发者们的共识,使用微服务架构Spring Cloud就应运而生。

 

image.png

图:微服务架构

单体架构有复杂性高、技术债务重、部署频率低、扩展能力受限等缺点已经难以适应快速迭代的需求,而微服务有很多优点:

l   易于开发和维护: 一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量较少。 开发和维护单个微服务相对简单。而整个应用是由若干个微服务构建而成的,所以整个应用也会被维持在一个可控状态。

l   单个微服务启动较快: 单个微服务代码量较少, 所以启动会比较快。

l   局部修改容易部署: 单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。 一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。

l   技术栈不受限:在微服务架构中,可以结合项目业务及团队的特点,合理地选择技术栈。例如某些服务可使用关系型数据库MySQL;某些微服务有图形计算的需求,可以使用Neo4j;甚至可根据需要,部分微服务使用Java开发,部分微服务使用Node.js开发。

 

虽然微服务如此吸引人,但是它还是有一些缺点:

l   运维要求较高:更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行。而在微服务中,需要保证几十甚至几百个服务服务的正常运行与协作,这给运维带来了很大的挑战。

l   分布式固有的复杂性:使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都会带来巨大的挑战。

l   接口调整成本高:微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整。

l   重复劳动:很多服务可能都会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。尽管可以使用共享库来解决这个问题(例如可以将这个功能封装成公共组件,需要该功能的微服务引用该组件),但共享库在多语言环境下就不一定行得通了。

快速上手Nacos

从上面的讲解我相信你已经知道架构和微服务了,那么简单的说Spring Cloud是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等。SpringCloud是一套微服务开发的全家桶,它没有重复造轮子,只是基于Springboot将其他公司(Netflix)的服务框架组合起来。

Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心。Nacos 致力于帮助开发者发现、配置和管理微服务。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。MSE-Nacos 作为注册中心,实现应用的服务注册与发现,以及消费者对提供者的调用,配合服务治理实现全链路灰度。

image.png

开源版的使用是很容易的,如下所示:Java引入仅需配置依赖和连接信息

  <dependencies>

            <!--Spring Boot-->

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-dependencies</artifactId>

                <version>2.3.2.RELEASE</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

            <!--spring cloud Netflix-->

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Hoxton.SR9</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

            <!--spring cloud alibaba-->

            <dependency>

                <groupId>com.alibaba.cloud</groupId>

                <artifactId>spring-cloud-alibaba-dependencies</artifactId>

                <version>2.2.6.RELEASE</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

            <!—Nacos注册中心-->

            <dependency>

                <groupId>com.alibaba.cloud</groupId>

                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

                <version>2.2.1.RELEASE</version>

            </dependency>

        </dependencies>

bootstrap.yml

spring:

  cloud:

    nacos:

      config:

        server-addr: 127.0.0.1:8880

        username: nacos

        password: nacos

使用时直接在controller中使用springboot提供的@Value注解即可:

    @Value("${env.name:default}")

    private String envName;

Nacos作为注册中心先在启动类中添加注解@EnableDiscoveryClient,开启服务的注册发现然后在bootstrap.yml文件中配置如下内容即可:

spring:

  cloud:

    nacos:

      discovery:

        server-addr: 127.0.0.1:8880

        username: nacos

        password: nacos

MSE-Nacos 作为配置中心,实现将应用中的变量、参数等从代码中提取出来,并存入一个配置文件,在需要更改配置时,只需更改此配置文件即可。

注意事项:bootstrap.yml applicaton.yml 优先加载,应用于系统级别参数配置,一般不会变动;application.yml应用于SpringBoot项目的自动化配置。

image.png

      每个工程需要提供配置集,参数如下,nacos服务地址,必须指定;namespace,如不指定默认public group如不指定默认 DEFAULT_GROUPdataId,必须指定。

 

开源版横评总结:

1. Nacos:

性能: 中等性能,适用于中小规模的分布式系统。

功能: 提供服务注册、发现、配置管理等功能,支持多数据中心和多租户。

控制台体验: 提供直观易用的Web控制台,方便配置和监控。

上下游生态: 国内使用的公司很多,提供丰富的API,支持Spring Cloud AlibabaDubbo等主流框架。

社区体验: 有最活跃的中文社区,有详细的文档和社区支持,这一点无可替代。

2. Zookeeper:

性能: 高性能、低延迟,适用于大规模分布式系统。

功能: 提供分布式协调服务,适用于各种场景,但在配置管理方面较为简单。

控制台体验: 没有官方控制台,通常需要基于命令行或第三方工具。

上下游生态: 生态较为丰富,被广泛应用于HadoopKafka等大数据生态系统。

社区体验: 社区庞大,有大量文档和案例可参考。

3. Consul:

性能: 中等性能,适用于中小规模的分布式系统。

功能: 提供服务发现、健康检查、KV存储等功能,支持多数据中心。

控制台体验: 提供直观易用的Web UI,方便配置和监控。

上下游生态: 提供丰富的HTTP API,易于与其他系统集成。

社区体验: 活跃的社区,有文档和社区支持。

4. Etcd:

性能: 高性能,适用于大规模的分布式系统,基于Raft算法。

功能: 提供分布式一致性KV存储,用于服务发现、配置共享等。

控制台体验: 提供基本的Web UI,但通常使用API进行配置。

上下游生态: 与Kubernetes深度集成,是Kubernetes的默认存储后端。

社区体验: 有一定规模的社区,有文档和社区支持。

 

在使用过程中仅在开始的时候遇到过nacos导入配置或者新建配置异常,后来发现是SQL初始化有问题,在Github上提了个Issues很快就有社区成员回复解决了具体的问题,重新初始化了一下SQL就解决好了。

image.png

阿里云注册配置中心 MSE-Nacos,是Nacos 的企业版,是开箱即用的 Nacos 云服务,实现了对 Nacos 内核进行企业级稳定性加固,故障自动检测及恢复、多可用区容灾、推空保护等特性。具有风险管理能力,全局持续分析并管理集群风险;企业级安全基于 RAM 鉴权体系,可构建细粒度的安全控制能力,集成阿里云 KMS 提供配置加密能力,帮企业更安全地使用 Nacos 服务;基于 Alibaba Dragonwell 进行深度调优,比 Nacos 开源版性能提升 50% 以上;企业级易用性,提供推送轨迹、丰富完善的监控报警能力和便利的控制台操作,总的来看,企业版相比开源在稳定、安全、性能和效率方面更具备优势。

 

      除了最重要的性能提升之外,如果使用阿里云注册配置中心 MSE-Nacos出现了问题可以提工单向阿里云的专家们寻求快速的解决方案,很大程度上降低了业务可用性风险并提升了时效性。而且阿里云注册配置中心 MSE-Nacos一个人就能完成部署,极大节省人员运维成本。最喜欢的是监控告警功能,以往我们需要再搭建一个告警监测平台,现在在云服务控制台就可对集群状态、服务数、配置数、TPS、请求耗时等指标进行监控,提供自定义告警规则及钉钉、电话、短信等告警渠道,便于排查异常集群。在信息安全保护的框架下可以完成RAM权限管理、KMS配置加密等安全措施,快速满足合规要求。

 

      阿里云注册配置中心MSE-Nacos的产品文档能够完整、准确地描述产品的所有功能和操作步骤。确保文档对于初学者和高级用户都易于理解,现在已经尝到了云化服务的甜头。产品文档中包含详细的示例和使用场景,帮助用户更好地了解产品的实际应用,示例对于任何人都是很重要的参考。

 

      安全和可用性不再是运维部门天天提心吊胆的事情,在节假日高峰期以往是有运维组烧香拜佛报平安的,现在连香火钱都省了,用户访问量剧增时。MSE-NacosAZ部署有足够的性能、资源和算法来有效地处理这些请求。整个链路的效率也得到了显著的提升。

 

      对我们这样的中小企业来说,性能和稳定性需求需要平衡成本。以往我们对新技术胆战心惊是因为通常不具备大规模IT基础设施和人力资源来处理故障危机,因此阿里云注册配置中心 MSE-Nacos就是一个既能够满足需求又不会造成巨大负担的解决方案,我们将阿里云注册配置中心 MSE-NacosACKSAE等产品集成,使产品的部署、配置和维护尽可能简单以最大化平衡效益。后期我们会考虑跟进可观测技术,打造更省心易用的产品架构。

 

相关文章
|
17天前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
49 1
Nacos配置中心
|
13天前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
|
16天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
31 4
|
16天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
37 3
|
16天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
29 3
|
25天前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
52 0
|
11天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
9天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
10天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
24 1
服务架构的演进:从单体到微服务的探索之旅
|
8天前
|
消息中间件 监控 安全
后端架构演进:从单体到微服务####
在数字化转型的浪潮中,企业应用的后端架构经历了从传统单体架构到现代微服务架构的深刻变革。本文探讨了这一演进过程的背景、驱动力、关键技术及面临的挑战,揭示了如何通过微服务化实现系统的高可用性、扩展性和敏捷开发,同时指出了转型过程中需克服的服务拆分、数据管理、通信机制等难题,为读者提供了一个全面理解后端架构演变路径的视角。 ####
24 8