当前位置: 首页 > news >正文

商城网站建设是 什么asp.net网站开发简介

商城网站建设是 什么,asp.net网站开发简介,五金制品东莞网站建设,建筑设计参考网站文章目录一、Nacos 注册中心的设计原理1、数据模型2、数据⼀致性3、负载均衡4、健康检查二、Nacos 注册中心服务数据模型1、服务#xff08;Service#xff09;和服务实例#xff08;Instance#xff09;1#xff09;定义服务2#xff09;服务元数据3#xff09;定义实例… 文章目录一、Nacos 注册中心的设计原理1、数据模型2、数据⼀致性3、负载均衡4、健康检查二、Nacos 注册中心服务数据模型1、服务Service和服务实例Instance1定义服务2服务元数据3定义实例4实例元数据5持久化属性2、集群Cluster1定义集群3、生命周期1服务的⽣命周期2实例的⽣命周期3集群的⽣命周期4元数据的⽣命周期一、Nacos 注册中心的设计原理 1、数据模型 注册中心的核心数据是服务的名字和它对应的网络地址当服务注册了多个实例时我们需要对不健康的实例进行过滤或者针对实例的⼀些特征进行流量的分配那么就需要在实例上存储⼀些例如健康状态、权重等属性。随着服务规模的扩大渐渐的又需要在整个服务级别设定⼀些权限规则、以及对所有实例都生效的⼀些开关于是在服务级别又会设立⼀些属性。再往后我们又发现单个服务的实例又会有划分为多个子集的需求例如⼀个服务是多机房部署的那么可能需要对每个机房的实例做不同的配置这样又需要在服务和实例之间再设定⼀个数据级别。        Zookeeper 没有针对服务发现设计数据模型它的数据是以⼀种更加抽象的树形 K-V 组织的因此理论上可以存储任何语义的数据。而 Eureka 或者 Consul 都是做到了实例级别的数据扩展这可以满足大部分的场景不过无法满足大规模和多环境的服务数据存储。Nacos 在经过内部多年生产经验后提炼出的数据模型则是⼀种服务-集群-实例的三层模型。如上文所说这样基本可以满足服务在所有场景下的数据存储和管理。        Nacos 的数据模型虽然相对复杂但是它并不强制你使用它里面的所有数据在大多数场景下你可以选择忽略这些数据属性此时可以降维成和 Eureka 和 Consul ⼀样的数据模型。另外⼀个需要考虑的是数据的隔离模型作为⼀个共享服务型的组件需要能够在多个用户或者业务方使用的情况下保证数据的隔离和安全这在稍微大⼀点的业务场景中非常常见。另⼀方面服务注册中心往往会支持云上部署此时就要求服务注册中心的数据模型能够适配云上的通用模型。        Zookeeper、Consul 和 Eureka 在开源层面都没有很明确的针对服务隔离的模型Nacos 则在⼀开始就考虑到如何让用户能够以多种维度进行数据隔离同时能够平滑的迁移到阿里云上对应的商业化产品。        Nacos 提供了四层的数据逻辑隔离模型用户账号对应的可能是⼀个企业或者独立的个体这个数据⼀般情况下不会透传到服务注册中心。⼀个用户账号可以新建多个命名空间每个命名空间对应⼀个客户端实例这个命名空间对应的注册中心物理集群是可以根据规则进行路由的这样可以让注册中心内部的升级和迁移对用户是无感知的同时可以根据用户的级别为用户提供不同服务级别的物理集群。再往下是服务分组和服务名组成的二维服务标识可以满足接口级别的服务隔离。        Nacos 1.0.0 介绍的另外⼀个新特性是临时实例和持久化实例。在定义上区分临时实例和持久化实例的关键是健康检查的方式。临时实例使用客户端上报模式而持久化实例使用服务端反向探测模式。临时实例需要能够自动摘除不健康实例而且无需持久化存储实例那么这种实例就适用于类 Gossip 的协议。右边的持久化实例使用服务端探测的健康检查方式因为客户端不会上报心跳 那么自然就不能去自动摘除下线的实例        在大中型的公司里这两种类型的服务往往都有。⼀些基础的组件例如数据库、缓存等这些往往不能上报心跳这种类型的服务在注册时就需要作为持久化实例注册。而上层的业务服务例如微服务或者 Dubbo 服务服务的 Provider 端支持添加汇报心跳的逻辑此时就可以使用动态服务的注册方式。        Nacos 2.0 中继续沿用了持久化及非持久化的设定但是有了⼀些调整。Nacos 1.0 中持久化及非持久化的属性是作为实例的⼀个元数据进行存储和识别。这导致同⼀个服务下可以同时存在持久化实例和非持久化实例。但是在实际使用中我们发现这种模式会给运维人员带来极大的困惑和运维复杂度与此同时从系统架构来看⼀个服务同时存在持久化及非持久化实例的场景也是存在⼀定矛盾的。这就导致该能力事实上并未被广泛使用。为了简化 Nacos 的服务数据模型降低运维人员的复杂度提升 Nacos 的易用性在 Nacos2.0 中我们将是否持久化的数据抽象至服务级别且不再允许⼀个服务同时存在持久化实例和非持久化实例实例的持久化属性继承自服务的持久化属性。 2、数据⼀致性 数据⼀致性是分布式系统永恒的话题Paxos 协议的复杂更让数据⼀致性成为程序员大牛们吹水的常见话题。不过从协议层面上看⼀致性的选型已经很长时间没有新的成员加入了。目前来看基本可以归为两家⼀种是基于 Leader 的非对等部署的单点写⼀致性⼀种是对等部署的多写⼀致性。当我们选用服务注册中心的时候并没有⼀种协议能够覆盖所有场景例如当注册的服务节点不会定时发送心跳到注册中心时强⼀致协议看起来是唯⼀的选择因为无法通过心跳来进行数据的补偿注册第⼀次注册就必须保证数据不会丢失。而当客户端会定时发送心跳来汇报健康状态时第⼀次的注册的成功率并不是非常关键当然也很关键只是相对来说我们容忍数据的少量写失败因为后续还可以通过心跳再把数据补偿上来此时 Paxos 协议的单点瓶颈就会不太划算了这也是Eureka 为什么不采用 Paxos 协议而采用自定义的 Renew 机制的原因。这两种数据⼀致性协议有各自的使用场景对服务注册的需求不同就会导致使用不同的协议。在这里可以发现Zookeeper 在 Dubbo 体系下表现出的行为其实采用 Eureka 的 Renew 机制更加合适因为 Dubbo 服务往 Zookeeper 注册的就是临时节点需要定时发心跳到 Zookeeper来续约节点并允许服务下线时将 Zookeeper 上相应的节点摘除。Zookeeper 使用 ZAB 协议虽然保证了数据的强⼀致但是它的机房容灾能力的缺乏无法适应⼀些大型场景。        Nacos 因为要支持多种服务类型的注册并能够具有机房容灾、集群扩展等必不可少的能力在1.0.0 正式支持 AP 和 CP 两种⼀致性协议并存。1.0.0 重构了数据的读写和同步逻辑将与业务相关的 CRUD 与底层的⼀致性同步逻辑进行了分层隔离。然后将业务的读写主要是写因为读会直接使用业务层的缓存抽象为 Nacos 定义的数据类型调用⼀致性服务进行数据同步。在决定使用 CP 还是 AP ⼀致性时使用⼀个代理通过可控制的规则进行转发。目前的⼀致性协议实现⼀个是基于简化的 Raft 的 CP ⼀致性⼀个是基于自研协议 Distro 的AP ⼀致性。Raft 协议不必多言基于 Leader 进行写入其 CP 也并不是严格的只是能保证⼀半所见⼀致以及数据的丢失概率较小。Distro 协议则是参考了内部 ConfigServer 和开源 Eureka在不借助第三方存储的情况下实现基本大同小异。Distro 重点是做了⼀些逻辑的优化和性能的调优。 3、负载均衡 负载均衡严格的来说并不算是传统注册中心的功能。⼀般来说服务发现的完整流程应该是先从注册中心获取到服务的实例列表然后再根据自身的需求来选择其中的部分实例或者按照⼀定的流量分配机制来访问不同的服务提供者因此注册中心本身⼀般不限定服务消费者的访问策略。Eureka、Zookeeper 包括 Consul本身都没有去实现可配置及可扩展的负载均衡机制Eureka 的负载均衡是由 ribbon 来完成的而 Consul 则是由 Fabio 做负载均衡        服务端的负载均衡给服务提供者更强的流量控制权但是无法满足不同的消费者希望使用不同负载均衡策略的需求。而不同负载均衡策略的场景确实是存在的。而客户端的负载均衡则提供了这种灵活性并对用户扩展提供更加友好的支持。但是客户端负载均衡策略如果配置不当可能会导致服务提供者出现热点或者压根就拿不到任何服务提供者。        抛开负载均衡到底是在服务提供者实现还是在服务消费者实现我们看到目前的负载均衡有基于权重、服务提供者负载、响应时间、标签等策略。其中 Ribbon 设计的客户端负载均衡机制主要是选择合适现有的 IRule、ServerListFilter 等接口实现或者自己继承这些接口实现自己的过滤逻辑。这里 Ribbon 采用的是两步负载均衡第⼀步是先过滤掉不会采用的服务提供者实例第二步是在过滤后的服务提供者实例里实施负载均衡策略。Ribbon 内置的几种负载均衡策略功能还是比较强大的同时又因为允许用户去扩展这可以说是⼀种比较好的设计。        基于标签的负载均衡策略可以做到非常灵活Kubernetes 和 Fabio 都已经将标签运用到了对资源的过滤中使用标签几乎可以实现任意比例和权重的服务流量调配。但是标签本身需要单独的存储以及读写功能不管是放在注册中心本身或者对接第三方的 CMDB。 4、健康检查 Zookeeper 和 Eureka 都实现了⼀种 TTL 的机制就是如果客户端在⼀定时间内没有向注册中心发送心跳则会将这个客户端摘除。Eureka 做的更好的⼀点在于它允许在注册服务的时候自定义检查自身状态的健康检查方法。这在服务实例能够保持心跳上报的场景下是⼀种比较好的体验在Dubbo 和 SpringCloud 这两大体系内也被培养成用户心智上的默认行为。Nacos 也支持这种TTL 机制不过这与 ConfigServer 在阿里巴巴内部的机制又有⼀些区别。Nacos 目前支持临时实例使用心跳上报方式维持活性发送心跳的周期默认是 5 秒Nacos 服务端会在 15 秒没收到心跳后将实例设置为不健康在 30 秒没收到心跳时将这个临时实例摘除。          不过正如前文所说有⼀些服务无法上报心跳但是可以提供⼀个检测接口由外部去探测。这样的服务也是广泛存在的而且以我们的经验这些服务对服务发现和负载均衡的需求同样强烈。服务端健康检查最常见的方式是 TCP 端口探测和 HTTP 接口返回码探测这两种探测方式因为其协议的通用性可以支持绝大多数的健康检查场景。在其他⼀些特殊的场景中可能还需要执行特殊的接口才能判断服务是否可用。例如部署了数据库的主备数据库的主备可能会在某些情况下切换需要通过服务名对外提供访问保证当前访问的库是主库。此时的健康检查接口可能就是⼀个检查数据库是否是主库的 MYSQL 命令了。          客户端健康检查和服务端健康检查有⼀些不同的关注点。客户端健康检查主要关注客户端上报心跳的方式、服务端摘除不健康客户端的机制。而服务端健康检查则关注探测客户端的方式、灵敏度及设置客户端健康状态的机制。从实现复杂性来说服务端探测肯定是要更加复杂的因为需要服务端根据注册服务配置的健康检查方式去执行相应的接口判断相应的返回结果并做好重试机制和线程池的管理。这与客户端探测只需要等待心跳然后刷新 TTL 是不⼀样的。同时服务端健康检查无法摘除不健康实例这意味着只要注册过的服务实例如果不调用接口主动注销这些服务实例都需要去维持健康检查的探测任务而客户端则可以随时摘除不健康实例减轻服务端的压力。        Nacos 既支持客户端的健康检查也支持服务端的健康检查同⼀个服务可以切换健康检查模式。我们认为这种健康检查方式的多样性非常重要这样可以支持各种类型的服务让这些服务都可以使用到 Nacos 的负载均衡能力 二、Nacos 注册中心服务数据模型 1、服务Service和服务实例Instance 1定义服务 在 Nacos 中服务的定义包括以下几个内容 命名空间NamespaceNacos 数据模型中最顶层、也是包含范围最广的概念用于在类似环境或租户等需要强制隔离的场景中定义。Nacos 的服务也需要使用命名空间来进行隔离。分组GroupNacos 数据模型中次于命名空间的⼀种隔离概念区别于命名空间的强制隔离属性分组属于⼀个弱隔离概念主要用于逻辑区分⼀些服务使用场景或不同应用的同名服务最常用的情况主要是同⼀个服务的测试分组和生产分组、或者将应用名作为分组以防止不同应用 提供的服务重名。服务名Name该服务实际的名字⼀般用于描述该服务提供了某种功能或能力。        之所以 Nacos 将服务的定义拆分为命名空间、分组和服务名除了方便隔离使用场景外还有方便用户发现唯⼀服务的优点。在注册中心的实际使用场景上同个公司的不同开发者可能会开发出类似作用的服务如果仅仅使用服务名来做服务的定义和表示容易在⼀些通用服务上出现冲突比如登陆服务等。          通常推荐使用由运行环境作为命名空间、应用名作为分组和服务功能作为服务名的组合来确保该服务的天然唯⼀性当然使用者可以忽略命名空间和分组仅使用服务名作为服务唯⼀标示这就需要使用者在定义服务名时额外增加自己的规则来确保在使用中能够唯⼀定位到该服务而不会发现到错误的服务上。 2服务元数据 服务的定义只是为服务设置了⼀些基本的信息用于描述服务以及方便快速的找到服务而服务的元数据是进⼀步定义了 Nacos 中服务的细节属性和描述信息。主要包含 健康保护阈值ProtectThreshold为了防止因过多实例故障导致所有流量全部流入剩余实例继而造成流量压力将剩余实例被压垮形成的雪崩效应。应将健康保护阈值定义为⼀个 0 到 1之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时无论实例是否健康都会将这个实例返回给客户端。这样做虽然损失了⼀部分流量但是保证了集群中剩余健康实例能正常工作。实例选择器Selector用于在获取服务下的实例列表时过滤和筛选实例。该选择器也被称为路由器目前 Nacos 支持通过将实例的部分信息存储在外部元数据管理 CMDB 中并在发现服务时使用 CMDB 中存储的元数据标签来进行筛选的能力。拓展数据(extendData)用于用户在注册实例时自定义扩展的元数据内容形式为 K-V 。可以在服务中拓展服务的元数据信息方便用户实现自己的自定义逻辑。 3定义实例 由于服务实例是具体提供服务的节点因此 Nacos 在设计实例的定义时主要需要存储该实例的⼀些网络相关的基础信息主要包含以下内容 网络 IP 地址该实例的 IP 地址在 Nacos2.0 版本后支持设置为域名。网络端口该实例的端口信息。健康状态Healthy用于表示该实例是否为健康状态会在 Nacos 中通过健康检查的手段进行维护具体内容将在 Nacos 健康检查机制章节中详细说明读者目前只需要该内容的含义即可。集群Cluster用于标示该实例归属于哪个逻辑集群有关于集群的相关内容将在后文详细说明。拓展数据(extendData)用于用户自定义扩展的元数据内容形式为 K-V。可以在实例中拓展该实例的元数据信息方便用户实现自己的自定义逻辑和标示该实例。 4实例元数据 和服务元数据不同实例的元数据主要作用于实例运维相关的数据信息。主要包含 权重Weight实例级别的配置。权重为浮点数范围为 0-10000。权重越大分配给该实例的流量越大。上线状态Enabled标记该实例是否接受流量优先级大于权重和健康状态。用于运维人员在不变动实例本身的情况下快速地手动将某个实例从服务中移除。拓展数据(extendData)不同于实例定义中的拓展数据这个拓展数据是给予运维人员在不变动实例本身的情况下快速地修改和新增实例的扩展数据从而达到运维实例的作用。          在 Nacos2.0 版本中实例数据被拆分为实例定义和实例元数据主要是因为这两类数据其实是同⼀个实例的两种不同场景开发运行场景及运维场景。对于上下线及权重这种属性⼀般认为在实例已经在运行时需要运维人员手动修改和维护的数据而 IP端口和集群等信息⼀般情况下在实例启动并注册后则不会在进行变更。将这两部分数据合并后就能够得到实例的完整信息也是 Nacos1.0 版本中的实例数据结构。          同时在 Nacos2.0 版本中定义实例的这部分数据会受到持久化属性的的影响而实例元数据部分则⼀定会进行持久化这是因为运维操作需要保证操作的原子性不能够因为外部环境的影响而导致操作被重置例如在 Nacos1.0 版本中运维人员因为实例所处的网络存在问题操作⼀个实例下线以此摘除流量但是同样因为网络问题该实例与 Nacos 的通信也收到影响导致实例注销后重新注册这可能导致上线状态被重新注册而覆盖失去了运维人员操作的优先级。          当然这部分元数据也不应该无限制的存储下去如果实例确实已经移除元数据也应该移除为此在 Nacos 2.0 版本后通过该接口更新的元数据会在对应实例删除后依旧存在⼀段时间如果在此期间实例重新注册该元数据依旧生效您可以通过 nacos.naming.clean.expired-metadata.expired-time 及 nacos.naming.clean.expired-metadata.interval 对记忆时间进行修改。 5持久化属性 如 Nacos 注册中心的设计原理文中所述Nacos 提供两种类型的服务持久化服务和非持久化服务分别给类 DNS 的基础的服务组件场景和上层实际业务服务场景使用。为了标示该服务是哪种类型的服务需要在创建服务时选择服务的持久化属性。考虑到目前大多数使用动态服务发现的场景为非持久化服务的类型如 Spring CloudDubboService Mesh 等Nacos 将缺醒值设置为了非持久化服务。        在 Nacos2.0 版本后持久化属性的定义被抽象到服务中⼀个服务只能被定义成持久化服务或非持久化服务⼀旦定义完成在服务生命周期结束之前无法更改其持久化属性。 持久化属性将会影响服务及实例的数据是否会被 Nacos 进行持久化存储设置为持久化之后实例将不会再被自动移除需要使用者手动移除实例。 2、集群Cluster 集群是 Nacos 中⼀组服务实例的⼀个逻辑抽象的概念它介于服务和实例之间是⼀部分服务属性的下沉和实例属性的抽象。 1定义集群 在 Nacos 中集群中主要保存了有关健康检查的⼀些信息和数据 健康检查类型HealthCheckType使用哪种类型的健康检查方式目前支持TCPHTTPMySQL设置为 NONE 可以关闭健康检查。健康检查端口HealthCheckPort设置用于健康检查的端口。 是否使用实例端口进行健康检查UseInstancePort如果使用实例端口进行健康检查将会使用实例定义中的网络端口进行健康检查而不再使用上述设置的健康检查端口进行。拓展数据(extendData)用于用户自定义扩展的元数据内容形式为 K-V 。可以自定义扩展该集群的元数据信息方便用户实现自己的自定义逻辑和标示该集群。 3、生命周期 在注册中心中实例数据都和服务实例的状态绑定因此服务实例的状态直接决定了注册中心中实例数据的生命周期。而服务作为实例的聚合抽象生命周期也会由服务实例的状态来决定。 1服务的⽣命周期 服务的生命周期相对比较简单是从用户向注册中心发起服务注册的请求开始。在 Nacos 中发起服务注册有两种方式⼀种是直接创建服务⼀种是注册实例时自动创建服务前者可以让发起者在创建时期就制定⼀部分服务的元数据信息而后者只会使用默认的元数据创建服务。        在生命周期期间用户可以向服务中新增删除服务实例同时也能够对服务的元数据进行修改。        当用户主动发起删除服务的请求或⼀定时间内服务下没有实例无论健康与否后服务才结束其生命周期等待下⼀次的创建。 2实例的⽣命周期 实例的生命周期开始于注册实例的请求。但是根据不同的持久化属性实例后续的生命周期有⼀定的不同。        持久化的实例会通过健康检查的状态维护健康状态但是不会自动的终止该实例的生命周期在生命周期结束之前持久化实例均可以被修改数据甚至主动修改其健康状态。唯⼀终止持久化实例生命周期的方式就是注销实例的请求。        而非持久化的实例会根据版本的不同采用不同的方式维持健康状态如果是 Nacos1.0 的版本会通过定时的心跳请求来进行续约当超过⼀定时间内没有心跳进行续约时该非持久化实例则终止生命周期如果是 Nacos2.0 的版本会通过 gRPC 的长连接来维持状态当连接发生中断时该非持久化实例则终止生命周期。当然非持久化实例也可以通过注销实例的请求主动终止其生命周期但是由于长连接和心跳续约的存在可能导致前⼀个实例数据的生命周期刚被终止移除立刻又因为心跳和长连接的补偿请求再次开启实例的生命周期给人⼀种注销失败的假象。 3集群的⽣命周期 集群的生命周期则相对复杂由于集群作为服务和实例的⼀个中间层因此集群的生命周期与实例和服务的生命周期均有关。        集群的生命周期开始与该集群第⼀个实例的生命周期同时开始因为⼀个实例必定归属于⼀个集群哪怕是默认的集群因此当第⼀个实例的生命周期开始时也就是集群生命周期的开始        当⼀个集群下不存在实例时集群的生命周期也不会立刻结束而是会等到这个服务的生命周期结束时才会⼀起结束生命周期。 4元数据的⽣命周期 由于元数据的其对应的数据模型是紧密关联的所以元数据的生命周期基本和对应的数据模型保持 ⼀致。但是也如前文所说元数据通常为运维人员的主动操作的数据会被 Nacos 进行⼀段时间内的记忆因此元数据的生命周期的终止相比对应的数据要滞后若这滞后期间内对应的数据又重新开始生命周期则该元数据的生命周期将被立刻重置不再终止。
http://www.hkea.cn/news/14324115/

相关文章:

  • 国外网站卖货平台学校网站首页设计图片
  • 上海网站建设知识 博客动画毕业设计代做网站
  • 备案网站可以做影视站广州市新闻发布会
  • 自行车网站模板如何网站建设网页
  • 北京考试学院网站首页个性化网站建设报价
  • php网站开发应具备能力东莞网站优化找哪家
  • 汽车集团网站建设seo自学网官网
  • wordpress三站合一自己做的网站怎么改背景图
  • 做一个中型网站需要多少钱企业建网站服务
  • 安徽省质量提升工程建设网站flash属于网页制作平台吗
  • 网站链接数学做网
  • 地理云门户网站建设xcache wordpress
  • 网站建设用cms长安网站建设方案
  • 快递公司网站模板潍坊住房与城市建设部网站
  • 长沙网站开发设计wordpress自动评论工具
  • 购物券网站怎么做礼县建设局网站
  • wordpress制作的网站模板律师事务所网站方案
  • 网站怎样多语言网站建设公司收费
  • 企业网站源码搭建你知道的2021
  • 爱网站排行榜百度浏览器app
  • 盘石网站做的怎么样深圳网站营销推广公司电话
  • 可以自己做课程的网站德州极速网站建设 小程序
  • arttemplate做电商网站蛋糕网站案例
  • 高端建站模版珠海网站制作策划
  • 外国人做数学视频网站大悟县城乡建设局网站
  • 一个空间放两个php网站阿里云企业邮箱收费标准
  • 西安网站建设公司云网海外人才招聘网
  • 安阳县交易中心网站建设招标域名后有个wordpress
  • 电商网站开发怎么样移动端教学视频网站开发
  • 专业的郑州网站推广网站制作需要多少钱新闻