微服务基础与Spring Cloud框架

news2024/9/20 18:33:16

一、系统架构的演变

1.1单体应⽤架构

Web应⽤程序发展的早期,⼤部分web⼯程(包含前端⻚⾯,web层代码,service层代码,dao层代码)是将 所 有的功能模块,打包到⼀起并放在⼀个web容器中运⾏。

1.2 垂直应⽤架构

当访问量逐渐增⼤,单⼀应⽤增加机器带来的加速度越来越⼩,将应⽤拆成互不相⼲的⼏个应⽤,以提升效率

1.3 分布式SOA架构

1.3.1 什么是SOA?

 SOA 全称为 Service-Oriented Architecture,即⾯向服务的架构。它可以根据需求通过⽹络对松散耦合 的粗粒度应⽤组件(服务)进⾏分布式部署、组合和使⽤。⼀个服务通常以独⽴的形式存在于操作系统进程中。

站在功能的⻆度,把业务逻辑抽象成可复⽤、可组装的服务,通过服务的编排实现业务的快速再⽣,⽬的:把原先固有的业务功能转变为通⽤的业务服务,实现业务逻辑的快速复⽤。

通过上⾯的描述可以发现 SOA 有如下⼏个特点:分布式、可重⽤、扩展灵活、松耦合

1.3.2 SOA架构

当垂直应⽤越来越多,应⽤之间交互不可避免,将核⼼业务抽取出来,作为独⽴的服务,逐渐形成稳定的服务中⼼,使前端应⽤能更快速的响应多变的市场需求

1.4 微服务架构

通过服务的原⼦化拆分,以及微服务的独⽴打包、部署和升级,⼩团队的交付周期将缩短,运维成 本也将⼤幅度下降 微服务遵循单⼀原则。微服务之间采⽤Restful等轻量协议传输。

1.5 SOA与微服务的关系

SOA( Service Oriented Architecture )“⾯向服务的架构”:他是⼀种设计⽅法,其中包含多个服务, 服务之间通过相互依赖最终提供⼀系列的功能。 ⼀个服务通常以独⽴的形式存在与操作系统进程中。各 个服务之间通过⽹络调⽤。

微服务架构:其实和SOA 架构类似,微服务是在SOA上做的升华,微服务架构强调的⼀个重点是“业务需要 彻底的组件化和服务化” ,原有的单个业务系统会拆分为多个可以独⽴开发、设计、运⾏的⼩应⽤。 这些⼩应⽤之间通过服务完成交互和集成。

二、分布式核⼼知识 

2.1 分布式中的远程调⽤

在微服务架构中,通常存在多个服务之间的远程调⽤的需求。远程调⽤通常包含两个部分:序列化和通信协议。常⻅的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等,⽬前主流的远程调⽤技术有基于HTTP的RESTful接⼝以及基于TCP的RPC协议。

( 1 )RESTful接⼝

REST,即Representational State Transfer的缩写,如果⼀个架构符合REST原则,就称它为RESTful架构。

总结⼀下什么是RESTful架构:

每⼀个URI代表⼀种资源; 客户端和服务器之间,传递这种资源的某种表现层; 客户端通过四个HTTP动词,对服务器端资源进⾏操作,实现"表现层状态转化"。

( 2 )RPC协议 RPC( Remote Procedure Call )⼀种进程间通信⽅式。允许像调⽤本地服务⼀样调⽤远程服务。 RPC框架的主要⽬标就是让远程服务调⽤更简单、透明。 RPC框架负责屏蔽底层的传输⽅式(TCP或者 UDP)、序列化⽅式(XML/JSON/⼆进制)和通信细节。开发⼈员在使⽤的时候只需要了解谁在什么位 置提供了什么样的远程服务接⼝即可,并不需要关⼼底层通信细节和调⽤过程。

三、常⻅微服务框架

3.1Spring Cloud

Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格做到⼀键启动和部署。

3.2 ServiceComb

Apache ServiceComb是业界第⼀个Apache微服务顶级项⽬, 是⼀个开源微服务解决⽅案,致⼒于帮助 企业、⽤户和开发者将企业应⽤轻松微服务化上云,并实现对微服务应⽤的⾼效运维管理。其提供⼀站 式开源微服务解决⽅案,融合SDK框架级、 0侵⼊ServiceMesh场景并⽀持多语⾔。

3.3 ZeroC ICE

ZeroC IceGrid是ZeroC公司的杰作,继承了CORBA的⾎统,是新⼀代的⾯向对象的分布式系统中间件。 作为⼀种微服务架构,它基于RPC框架发展⽽来,具有良好的性能与分布式能⼒。

四、SpringCloud概述

4.1 服务注册与发现

服务注册:服务实例将⾃身服务信息注册到注册中⼼。这部分服务信息包括服务所在主机IP和提供服务 的Port ,以及暴露服务⾃身状态以及访问协议等信息。

服务发现:服务实例请求注册中⼼获取所依赖服务信息。服务实例通过注册中⼼,获取到注册到其中的 服务实例的信息,通过这些信息去请求它们提供的服务。

4.2 负载均衡

负载均衡是⾼可⽤⽹络基础架构的关键组件,通常⽤于将⼯作负载分布到多个服务器来提⾼⽹站、应 ⽤、数据库或其他服务的性能和可靠性。

4.3 熔断

熔断这⼀概念来源于电⼦⼯程中的断路器(Circuit Breaker)。在互联⽹系统中,当下游服务因访问压 ⼒过⼤⽽响应变慢或失败,上游服务为了保护系统整体的可⽤性,可以暂时切断对下游服务的调⽤。这 种牺牲局部,保全整体的措施就叫做熔断。

4.4 链路追踪

随着微服务架构的流⾏,服务按照不同的维度进⾏拆分,⼀次请求往往需要涉及到多个服务。互联⽹应 ⽤构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使⽤不同的编程语⾔ 来实现、有可能布在了⼏千台服务器,横跨多个不同的数据中⼼。因此,就需要对⼀次请求涉及的多个 服务链路进⾏⽇志记录,性能监控即链路追踪

4.5 API⽹关

随着微服务的不断增多,不同的微服务⼀般会有不同的⽹络地址,⽽外部客户端可能需要调⽤多个服务 的接⼝才能完成⼀个业务需求,如果让客户端直接与各个微服务通信可能出现:

  • 客户端需要调⽤不同的url地址,增加难度
  • 再⼀定的场景下,存在跨域请求的问题
  • 每个微服务都需要进⾏单独的身份认证

针对这些问题,API⽹关顺势⽽⽣。

五、服务调⽤

5.1RestTemplate介绍

Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务,它简化了与http服务的通信⽅式,统 ⼀了RESTful的标准,封装了http链接, 我们只需要传⼊url及返回值类型即可。相较于之前常⽤的 HttpClient ,RestTemplate是⼀种更优雅的调⽤RESTful服务的⽅式。

5.2通过RestTemplate调⽤微服务

( 1 )在 shop_order⼯程中配置RestTemplate

//配置RestTemplate交给spring管理

@Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }

( 2 )编写下订单⽅法

//通过restTemplate调⽤商品微服务

restTemplate .getForObject("http://127.0.0.1:8081/product/1" , Product.class); 

5.3 硬编码存在的问题

⾄此已经可以通过RestTemplate调⽤商品微服务的RESTFul API接⼝。但是我们把提供者的⽹络地址 (ip,端⼝)等硬编码到了代码中,这种做法存在许多问题:

  • 应⽤场景有局限
  • ⽆法动态调整

就需要通过注册中⼼动态的对服务注册和服务发现

六、微服务的注册中⼼

注册中⼼可以说是微服务架构中的”通讯录“ ,它记录了服务和服务地址的映射关系。在分布式架构中, 服务会注册到这⾥,当服务需要调⽤其它服务时,就这⾥找到服务的地址,进⾏调⽤。

6.1 注册中⼼的主要作⽤

服务注册中⼼(下称注册中⼼)是微服务架构⾮常重要的⼀个组件,在微服务架构⾥主要起到了协调者的⼀个作⽤。注册中⼼⼀般包含如下⼏个功能:

1. 服务发现:

服务注册/反注册:保存服务提供者和服务调⽤者的信息

服务订阅/取消订阅:服务调⽤者订阅服务提供者的信息,最好有实时推送的功能

服务路由(可选):具有筛选整合服务提供者的能⼒。

2. 服务配置:

配置订阅:服务提供者和服务调⽤者订阅微服务相关的配置

配置下发:主动将配置推送给服务提供者和服务调⽤者

3. 服务健康检测

 检测服务提供者的健康情况

 6.2 常⻅的注册中⼼

Zookeeper

zookeeper它是⼀个分布式服务框架,是Apache Hadoop 的⼀个⼦项⽬,它主要是⽤来解决分布式应 ⽤中经常遇到的⼀些数据管理问题,如:统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项 的管理等。简单来说zookeeper=⽂件系统+监听通知机制。

Eureka

Eureka是在Java语⾔上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组件

Consul

Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件, 采 ⽤Raft算法保证服务的⼀致性,且⽀持健康检查。

Nacos

Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ + 配置中⼼的组合,提供简单易⽤的特性集,帮助我们解决微服务开发必会涉及到的服务注册 与发现,服务配置,服务管理等问题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀,负责服务注册与 发现。

七、nacos简介

 Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快 速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中⼼,⽤ 来管理注册上来的各个微服务

7.1 nacos实战入门

1 搭建nacos环境

第1步: 安装nacos

下载地址 : https://github.com/alibaba/nacos/releases

下载 zip 格式的安装包,然后进⾏解压缩操作

第2步: 启动nacos

# 切换⽬录 cd nacos/bin

# 命令启动 startup.cmd -m standalone

或者直接双击 startup.cmd 运⾏ 

第3步: 访问nacos Plain Text

打开浏览器输⼊http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos 

7.2 将商品微服务注册到nacos

1 在pom.xml中添加nacos的依赖

<!--nacos客户端-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2 在主类上添加@EnableDiscoveryClient注解

3 在application.yml中添加nacos服务的地址

server:
  port: 8091
spring:
  application:
    name: service-orders
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/newshop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: password
  servlet:
    multipart:
      max-request-size: 10MB
      max-file-size: 50MB
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4 修改OrderController, 借助DiscoveryClient实现微服务调⽤ 

5 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务 

八、服务调⽤Ribbon⼊⻔

经过以上的学习,已经实现了服务的注册和服务发现。当启动某个服务的时候,可以通过HTTP的形式将信息注册到注册中⼼,并且可以通过SpringCloud提供的⼯具获取注册中⼼的服务列表。但是服务之间的调⽤还存在很多的问题,如何更加⽅便的调⽤微服务,多个微服务的提供者如何选择,如何负载均衡等。

8.1 Ribbon概述

Ribbon 是 Netflixfa 发布的⼀个负载均衡器,有助于控制 HTTP 和 TCP客户端⾏为。在 SpringCloud 中, Nacos⼀般配合Ribbon进⾏使⽤,Ribbon提供了客户端负载均衡的功能,Ribbon利⽤从Nacos中读取到的服务信息,在调⽤服务节点提供的服务时,会合理的进⾏负载。 在SpringCloud中可以将注册中⼼和Ribbon配合使⽤,Ribbon⾃动的从注册中⼼中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务.

8.2 Ribbon的主要作⽤

( 1)服务调⽤ 基于Ribbon实现服务调⽤, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助 RestTemplate 最终进⾏调⽤

( 2)负载均衡 当有多个服务提供者时,Ribbon可以根据负载均衡的算法⾃动的选择需要调⽤的服务地址

8.3 基于Ribbon实现调⽤服务

1坐标依赖

在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这⾥不需要导⼊任何额外的坐标 

2在创建RestTemplate⽅法上添加 @LoadBalanced 注解

通过服务名称消费使⽤ restTemplate .getForObject("http://商品服务名称/product/1" , Product.class);

 九、服务调⽤Ribbon⾼级

9.1 什么是负载均衡

在搭建⽹站时,如果单节点的 web服务性能和可靠性都⽆法达到要求;或者是在使⽤外⽹服务时,经常 担⼼被⼈攻破,⼀不⼩⼼就会有打开外⽹端⼝的情况,通常这个时候加⼊负载均衡就能有效解决服务问 题。

负载均衡是⼀种基础的⽹络服务,其原理是通过运⾏在前⾯的负载均衡服务,按照指定的负载均衡算 法,将流量分配到后端服务集群上,从⽽为系统提供并⾏扩展的能⼒。

负载均衡的应⽤场景包括流量包、转发规则以及后端服务,由于该服务有内外⽹个例、健康检查等功 能,能够有效提供系统的安全性和可⽤性。

9.2 客户端负载均衡与服务端负载均衡

服务端负载均衡:

先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择⼀个进⾏访 问;即在服务器端再进⾏负载均衡算法分配

客户端负载均衡:

客户端会有⼀个服务器地址列表,在发送请求前通过负载均衡算法选择⼀个服务器,然后进⾏访问,这 是客户端负载均衡;即在客户端就进⾏负载均衡算法分配

9.3 基于Ribbon实现负载均衡

通过idea再启动⼀个微服务,设置其端⼝为808x

分别启动两次服务器验证效果,并查看两个控制台发现已轮询的⽅式调⽤了商品服务

9.4 负载均衡策略:

Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接⼝为 com.netflix.loadbalancer.IRule ,实现⽅式如下:

com.netflix.loadbalancer.RoundRobinRule :以轮询的⽅式进⾏负载均衡 com.netflix.loadbalancer.RandomRule :随机策略

com.netflix.loadbalancer.RetryRule :重试策略

com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越 ⾼的被调⽤的可能性越⼤

com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实 例,并返回请求数最⼩的实例返回

com.netflix.loadbalancer.AvailabilityFilteringRule :可⽤过滤策略。过滤掉故障和请求数超过阈值的服务实例,再从剩下的实⼒中轮询调⽤

ZoneAvoidanceRule: 以区域可⽤的服务器为基础进⾏服务器的选择。使⽤Zone对服务器进⾏分类,这个Zone可以理解为⼀个机房、⼀个机架等。⽽后再对Zone内的多个服务做轮询

9.5 ⾃定义负载均衡策略

⽅式1:定义⼀个新的IRule:(全局设置)

@Bean

public IRule randomRule(){

        return new RandomRule();

}

⽅式2:在yml配置⽂件中配置:(局部设置)

#需要调⽤的微服务名称
service-product:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

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

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

相关文章

【Unity3D小技巧】Unity3D中实现FPS数值显示功能实现

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 很简单也很使用的小技巧&#xff0c;就是在Unity…

PHP酒店宾馆民宿预订系统小程序源码

酒店宾馆民宿预订系统&#xff1a;一键解锁完美旅行住宿新体验 &#x1f31f; 开篇&#xff1a;告别繁琐&#xff0c;拥抱便捷预订新时代 在这个快节奏的时代&#xff0c;每一次旅行的规划都希望能尽可能高效与省心。想象一下&#xff0c;在规划一场说走就走的旅行时&#xf…

Nature | 小麦D基因组的起源和演化,野生近缘种对作物抗病改良具有重要潜力

image-20240815151428804 2024年8月14日沙特阿卜杜拉国王科技大学Brande B. H. Wulff 和 Simon G. Krattinger团队在Natue发表Origin and evolution of the bread wheat D genome研究论文&#xff0c;通过研究粗山羊草&#xff08;Aegilops tauschii&#xff0c;也被称为节节麦…

Ant-Design-Vue快速上手指南+排坑,操作详细步骤

Ant-Design-Vue是一款基于Vue.js的UI组件库&#xff0c;它不仅提供了丰富的高质量组件&#xff0c;还支持灵活的配置选项&#xff0c;使得开发者能够快速构建出既美观又功能强大的前端应用。下面将详细介绍Ant-Design-Vue的快速上手指南和排坑操作&#xff0c;帮助开发者顺利使…

Springboot整合mongodb和mysql两个数据库,mysql无法连接

一、问题 在日常开发中&#xff0c;难免需要用到mongodb和mysql数据库 当我在mongodb正常连接使用的时候&#xff0c;切换回mysql&#xff0c;发现无法连接 二、原因分析 1、端口查看被占用 winr打开命令提示符&#xff08;cmd&#xff09;&#xff0c;可以使用以下命令&…

html标签大合集一文入门

一、文档结构标签 <html>&#xff1a;网页的根标签 &#xff0c;嵌套包含所有标签。 <head>&#xff1a;头标签&#xff0c;包含文档的元数据用于编写网页的修饰内容&#xff0c;附加信息。 <body>&#xff1a;身体标签&#xff0c;用于编写展示内容&…

HTML5休闲小游戏《城市争夺战》源码,引流、刷广告利器

HTML5休闲小游戏《城市争夺战》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468820.html

TCP Analysis Flags 之 TCP ACKed unseen segment

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

Java---面向对象

一.面向对象 1.概念 1.1面向过程 C 吃饭&#xff1a;动作为核心 起身--》开门--》大量的逻辑判断 1.2面向对象 C/Java/Python/Go 目标&#xff1a;吃饭 人&#xff08;忽略&#xff09;吃饭 站在人类的角度思考问题 2.什么是对象&#xff1f; Object-->东西(万事万物皆…

【数据结构2】哈希表、哈希表的应用(集合与字典、md5算法和文件的哈希值)

1 哈希表 哈希表一个通过哈希函数来计算数据存 储位置的数据结构&#xff0c;通常支持如下操作: 插入(键&#xff0c;值):插入键值对(键&#xff0c;值) Get(key):如果存在键为键的键值对则返回其值&#xff0c;否则返回空值 删除(键):删除键为键的键值对哈希表(Hash Table&am…

开发者学习类网站

目录 **1、CodeProject****2、simplilearn****3、VisuAlgo****4、Google AI****5、CodeWars****6、SourceForge****7、GeeksforGeeks****8、StackOverflow** 1、CodeProject 网址&#xff1a;https://www.codeproject.com/ CodeProject是一个免费公开自己写的代码与程序的优秀…

稀土阻燃协效剂在木质地板中的应用

木质地板作为一种天然材料&#xff0c;非常容易燃烧&#xff0c;因此需要采取措施来增强其阻燃性能。稀土阻燃协效剂基于稀土4f电子层结构带来的特有属性&#xff0c;在聚合物材料燃烧时可催化酯化成炭,迅速在高分子表面形成致密连续的碳层,隔绝聚合物材料内部的可燃性气体与氧…

vue项目png图片加载不出来的问题

前提&#xff1a;因为命名的时候 配合后端&#xff0c;所以把图片的名称设置成中文的例如&#xff1a;新增圆、新增方块等命名&#xff1b;提交到线上环境后&#xff0c;发现有些图片不能完全显示&#xff1b;鼠标移入查看地址&#xff0c;发现其他展示的图片已经转为base64的形…

SALib | 灵敏度分析Python工具箱

灵敏度分析Python工具箱 Sensitivity Analysis LibrarySupported MethodsInstallationRequirementsHow to cite SALibReference Sensitivity Analysis Library SALib是常用灵敏度分析方法的Python实现&#xff0c;包括 Sobol、Morris 和 FAST 方法。在系统建模中很有用&#x…

解决Element-plus中Carousel(走马灯)图片无法正常加载的bug

前言&#xff1a; 最近帮助朋友解决了一个使用Element-plus中Carousel&#xff08;走马灯&#xff09;图片无法正常加载的bug&#xff0c;经过笔者的不断努力终于实现了&#xff0c;现在跟大家分享一下&#xff1a; 朋友原来的代码是这样的&#xff1a; <template><…

代码随想录Day 23|回溯Part02,39.组合总和、40.组合总和Ⅱ、131.分割回文串

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 第七章 回溯算法part03一、题目题目一&#xff1a; 39. 组合总和解题思路&#xff1a;回溯三部曲剪枝优化小结&#xff1a; 题目二&#xff1a;40.组合总和Ⅱ解题思路&#xff1a;回溯三部曲 题目…

LabVIEW中CANopen Read SDO.vi 和 CANopen Read Write CAN Frame.vi区别

CANopen Read SDO.vi 和 CANopen Read Write CAN Frame.vi 都是 NI-Industrial Communications for CANopen 库中的示例 VI&#xff0c;用于与 CANopen 网络进行通信&#xff0c;但它们的功能和使用场景有所不同。以下是它们的主要区别&#xff1a; 1. 功能层次 CANopen Read W…

图像分割论文阅读:BCU-Net: Bridging ConvNeXt and U-Net for medical image segmentation

本文提出了一种集合ConvNeXt和U-Net优势的网络模型来分割医学图像。 当然&#xff0c;模型整体结构就是并列双分支&#xff0c;如果只是这些内容&#xff0c;不值得拿出来讲。 主要有意思的部分是其融合两分支的多标签召回模块&#xff08;multilabel recall loss module&…

Tutorial:Deep Learning for Remote Sensing Data

文章目录 0. Intro1. ADVANTAGES OF REMOTE SENSING METHODS2. THE GENERAL FRAMEWORK3. BASIC ALGORITHMS IN DEEP LEARNING3.1 CONVOLUTIONAL NEURAL NETWORKS3.1.1 CONVOLUTIONAL LAYER3.1.2 NONLINEARITY LAYER3.1.3 POOLING LAYER 3.2 AUTOENCODERS3.3 RESTRICTED BOLTZMA…

SEO古诗网,可做站群,可二开成泛——码山侠

数据量大&#xff0c;古诗&#xff0c;名句等一共有数十万数据&#xff0c;基本上所有的古诗词已经入库完。 模板SEO强大&#xff0c;做好了基本的优化配置&#xff0c;结合帝国强大的sinfo插件&#xff0c;百度推送插件&#xff0c;以及itag管理插件很容易形成词库。 帝国CM…