Spring Cloud架构的各个组件的原理分析

微信关注公众号“java大数据修炼之道”,选择“设为星标”

优质文章和精品资源, 第一时间送达

关注公众号后台回复资源获取实战教学资料+视频

作者:白羽毛

来源:toutiao.com/i6888099913867985422/

我们先认识一下SpringCloud的各个组件,然后知其所以然。原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下:

  1. 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”

  2. 扣减相应的商品库存

  3. 通知仓储中心,进行发货

  4. 给用户的这次购物增加相应的积分

如上,微服务的应用场景和核心竞争力:

  • 降低耦合:每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。

  • 独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。

  • 选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。

  • 容错机制:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

  • 灵活扩展:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。Dubbo对标Spring Cloud微服务:

  • 背景分析:Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;Spring Cloud是知名的Spring家族的产品。阿里巴巴是一个商业公司,虽然也开源了很多的顶级的项目,但从整体战略上来讲,仍然是服务于自身的业务为主。Spring专注于企业级开源框架的研发,不论是在中国还是在世界上使用都非常广泛,开发出通用、开源、稳健的开源框架就是他们的主业。

  • 活跃度对比:Dubbo是一个非常优秀的服务治理框架,并且在服务治理、灰度发布、流量分发这方面做的比Spring Cloud还好,除过当当网在基础上增加了rest支持外,已有两年多的时间几乎都没有任何更新了。在使用过程中出现问题,提交到GitHub的Issue也少有回复。相反Spring Cloud自从发展到现在,仍然在不断的高速发展,从GitHub上提交代码的频度和发布版本的时间间隔就可以看出,现在Spring Cloud即将发布2.0版本,到了后期会更加完善和稳定。

  • 平台架构:Dubbo框架只是专注于服务之间的治理,如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中使用Dubbo的难度就会增加。Spring Cloud几乎考虑了服务治理的方方面面,更有Spring Boot这个大将的支持,开发起来非常的便利和简单。

  • 技术前景:Dubbo在各中小公司也从中受益不少。经过了这么多年的发展,互联网行业也是涌现了更多先进的技术和理念,Dubbo有点可惜。Spring 推出Spring Boot/Cloud也是因为自身的很多原因。Spring最初推崇的轻量级框架,随着不断的发展也越来越庞大,随着集成项目越来越多,配置文件也越来越混乱,慢慢的背离最初的理念。随着这么多年的发展,微服务、分布式链路跟踪等更多新的技术理念的出现,Spring急需一款框架来改善以前的开发模式,因此才会出现Spring Boot/Cloud项目,我们现在访问Spring官网,会发现Spring Boot和Spring Cloud已经放到首页最重点突出的三个项目中的前两个,可见Spring对这两个框架的重视程度。Dubbo实现如下:

Spring Cloud实现思路:

Eureka

原理:主管服务注册与发现,也就是微服务的名称注册到Eureka,就可以通过Eureka找到微服务,而不需要修改服务调用的配置文件。

分析:Spring Cloud封装了Netflix公司开发的Eureka模块来实现服务的注册与发现,采用的c-s的设计架构,Eureka Server作为服务注册功能的服务器,他是服务注册中心。而系统的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳。这样系统的维护人员可以通过Eureka Server来监控系统中的各个微服务是否正常运行。Spring Cloud的一些其他模块(比如Zuul)就可以通过Eureka Server来发现系统其他的微服务,并执行相关逻辑。

Eureka Server

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册, 这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client

Eureka Client是一个Java客户端, 用于简化Eureka Server的交互,客户端同时也具备一个内置的、 使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒),以证明当前服务是可用状态。如果Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,Eureka Server将会从服务注册表中把这个服务节点移除。

Eureka Server的自我保护机制

如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

  • Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务

  • Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)

  • 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper那样使整个注册服务瘫痪。

Eureka和ZooKeeper

著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

ZooKeeper保证CP

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是ZooKeeper会出现这样一种情况,当Master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s,且选举期间整个ZooKeeper集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得ZooKeeper集群失去Master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

Eureka保证AP

Eurek在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

除此之外,Eureka还有一种自我保护机制,见上。

总结

Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper那样使整个注册服务瘫痪。

Eureka作为单纯的服务注册中心来说要比ZooKeeper更加“专业”,因为注册服务更重要的是可用性,我们可以接受短期内达不到一致性的状况。

Ribbon和Feign

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于HTTP RESTful的。Spring Cloud有两种服务调用方式,一种是Ribbon+RestTemplate,另一种是Feign。

概念

基于Netflix Ribbon用过轮询策略实现的一套客户端负载均衡的工具。

客户端负载均衡:负载均衡Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一一个服务实例。Spring Cloud中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法(如简单轮询,随机连接等)选择一个服务器,然后进行访问。

负载均衡

  • 负载均衡:用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

  • 使用负载均衡带来的好处很明显:当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用;将访问压力分配到各个服务器,不会由于某一高峰时刻导致系统cpu急剧上升。

  • 负载均衡有好几种实现策略,常见的有:随机(Random),轮询(RoundRobin),一致性哈希(ConsistentHash),哈希(Hash),加权(Weighted)

  • Ribbon的默认策略是轮询

RestTemplate

传统情况下在Java代码里访问RESTful服务,一般使用Apache的HttpClient,不过此种方法使用起来太过繁琐。Spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。

Feign是一个声明式http客户端。使用Feign能让编写http客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,避免了调用目标微服务时,需要不断的解析/封装json数据的繁琐。Spring Cloud中Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

Ribbon和Feign的区别

Feign目标使编写Java Http客户端变得更容易

在使用Ribbon+ RestTemplate时,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。利用RestTemplate对http请求的封装处理,形成了-套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。

在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可), 即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon时,自动封装服务调用客户端的开发量。

Feign集成了Ribbon

Ribbon通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,Feign是一个声明式的Web服务客户端, 使得编写Web服务客户端变得非常容易,只需要创建一个接口, 然后在上面添加注解,像调用本地方法一样调用它就可以,而感觉不到是调用远程方法。SpringCloud中Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

Ribbon和Nginx的区别

Nginx是客户端所有请求统一交给Nginx,由Nginx进行实现负载均衡请求转发,属于服务器端负载均衡。既请求由Nginx服务器端进行转发。客户端负载均衡Ribbon,Ribbon是从Eureka注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。既在客户端实现负载均衡。

应用场景的区别

Nginx适合于服务器端实现负载均衡,比如:Tomcat,Ribbon适合与在微服务中RPC远程调用实现本地服务负载均衡,比如:Dubbo、Spring Cloud中都是采用本地负载均衡。

Zuul

应用场景

假如当前有十几个微服务服务,订单,商品,用户等等,显然是客户端不需要和每个服务逐一打交道,这就需要有一个统一入口,它就是服务网关。API网关所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。

核心功能

Zuul包含了对请求的路由和过滤两个最主要的功能,是各种服务的统一入口,同时还会用来提供监控、授权、安全、调度等等。

路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。

过滤器功能:则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

Zuul和Eureka进行整合:将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

注意:Zuul服务最终还是会注册进Eureka,提供代理+路由+过滤三大功能。

核心原理

Zuul的核心是一系列的filters,其作用可以类比Servlet框架的Filter,或者AOP。

过滤器之间没有直接进行通信,而是通过Request Context(上下文)进行数据传递。

Zuul的过滤器是由Groovy写成,这些过滤器文件被放在Zuul Server上的特定目录下面,Zuul会定期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中以便过滤请求使用。

Zuul负载均衡:Zuul拦截对应的API前缀请求做转发,转发到对应的serverId上,在Eureka服务上同一个serverId可以对应多个服务,也就是说用同一个服务节点不同的端口注册两个实例,但是serverId是一样Zuul做转发的时候会结合eureka-server起到负载均衡的效果。

过滤器的种类:

  • PRE(前置):这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现鉴权、限流、参数校验调整等。

  • ROUTING(路由):这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

  • POST(后置):这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端、日志等。

  • ERROR(错误):在其他阶段发生错误时执行该过滤器。

Zuul和Nginx

Zuul虽然在性能上和Nginx没法比,但它也有它的优点。Zuul提供了认证鉴权,动态路由,监控,弹性,安全,负载均衡等边缘服务,在团队规模不大的情况下,没有专门负责路由开发时,使用Zuul当网关是一个快速上手的好方案。

Nginx和Zuul是可以配合使用的,发挥各自的优点,使用Nginx作为负载均衡实现高并发的请求转发,Zuul用作网关。

Zuul和Ribbon实现负载均衡

Zuul支持Ribbon和Hystrix,也能够实现客户端的负载均衡。我们的Feign不也是实现客户端的负载均衡和Hystrix的吗?既然Zuul已经能够实现了,那我们的Feign还有必要吗?

可以这样理解:

Zuul是对外暴露的唯一接口相当于路由的是controller的请求,而Ribbonhe和Fegin路由了service的请求。

Zuul做最外层请求的负载均衡,而Ribbon和Fegin做的是系统内部各个微服务的service的调用的负载均衡。

Hystrix

介绍

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。Hystrix的出现就是为了解决雪崩效应。

服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的”雪崩效应”。

服务熔断

熔断机制是应对雪崩效应的一种微服务链路保护机制。

当删除链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

服务降级

整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。

Hystrix监控和断路器

我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。

Hystrix Dashboard监控面板,提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。

Hystrix Turbine监控聚合

使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。

Zuul的安全机制

签名机制,为防止接口数据篡改和重复调用,增加接口参数校验机制,sig签名算法为MD5(appKey+appSecret+timestamp),appKey是分配给客户端的ID,appSecret是分配给客户端的密钥,timestamp为unix时间戳,请求的URL有效时间为15分钟。

Token机制,用户在登录之后会返回一个access_ token,客户端在访问需要登录之后才能访问的资源,需要在在Authorization头部使用Bearer模式新增token,如head(“Authorization”,” Bearer token”)。

Hystrix的设计原则

  • 资源隔离(线程池隔离和信号量隔离)机制:限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其它服务调用。

  • 限流机制:限流机制主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。

  • 熔断机制:当失败率达到阀值自动触发降级(如因网络故障、超时造成的失败率真高),熔断器触发的快速失败会进行快速恢复。

  • 降级机制:超时降级、资源不足时(线程或信号量)降级、运行异常降级等,降级后可以配合降级接口返回托底数据。

  • 缓存支持:提供了请求缓存、请求合并实现。

  • 通过近实时的统计/监控/报警功能,来提高故障发现的速度。

  • 通过近实时的属性和配置热修改功能,来提高故障处理和恢复的速度。

Config

介绍

Spring Cloud Config是一个解决分布式系统的配置管理方案。微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统 中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、 动态的配置管理设施是必不可少的。Spring Cloud提供了ConfigServer来解决这个问题,我们每一个微服务自 己带着一个application.yml 上百个配置文件的管理。

应用场景

  • 不方便维护,多人同时对配置文件进行修改,冲突不断,很难维护

  • 配置内容安全和权限,主要是针对线上的配置来说,一般不对开发公开,只有运维有权限所以需要将配置文件隔离,不放到项目代码里

  • 更新配置项目需要重启,每次更新配置文件都需要重启项目,很耗时。使用了配置中心后,即可实现配置实时更新congfig Server和Config Client结合Spring Cloud Bus实现配置自动刷新。

原理

  • 配置文件存储在远端Git(比如GitHub,Gitee等仓库),config-server从远端Git拉取配置文件,并保存到本地Git。

  • 本地Git和config-server的交互是双向的,因为当远端Git无法访问时,会从本地Git获取配置文件。

  • config-client(即各个微服务),从config-server拉取配置文件。

角色

  • Config Server:提供配置文件的存储、以接口的形式将配置文件的内容提供出去。

  • Config Client:通过接口获取数据、并依据此数据初始化自己的应用。

总结如下:

推荐

1、垃圾代码和优质代码的区别?

2 、 项目中常用的19条MySQL优化

3、 最新SQL数据库面试题以及答案!

4、 老板要求用java将word转为PDF,这么搞 ?

5、 面试官:来说说单点登录的三种实现方式

6、 卧槽,为啥volatile关键字保证不了线程安全啊

7、 单怼60道 多线程 面试题,你能答上几个?(附答案)

8、 Spring和SpringBoot最核心的3大区别,详解!

9、 如果mysql磁盘满了,会发生什么?还真被我遇到了

10、 数据库链接池终于搞对了,这次直接从100ms优化到3ms!

每天学习java技术,你想学的Java知识这里都有!

本公众号会不定期给大家发福利,包括送书、学习资源等,敬请期待吧!
如果感觉推送内容不错,不妨右下角点个在看转发朋友圈或收藏,感谢支持。
如果对你有帮助,请点个"在看 ",谢谢 
枫哥和java
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
spring-cloud 组件实现原理
01-20
spring-cloud组件 Spring Cloud Hystrix 熔断器 Spring Cloud Turbine 集群监控 Spring Cloud Eureka 服务注册 Spring Cloud Sleuth 微服务跟踪 Spring Cloud Ribbon 负载均衡 Spring Cloud Config(Apollo) 配置中心 Spring Cloud Feign 基于Feign的动态代理机制 Spring Cloud Zuul 网关 Spring Cloud Bus 消息总线. Spring Boot Admin 监控SpringBoot应用程序 spri
Spring Cloud 给拆了!详解每个组件的作用
JAVA葵花宝典
11-16 351
来源:toutiao.com/i6888099913867985422EurekaRibbon和FeignZuulHystrixConfig总结如下我们先认识一下SpringClou...
SpringCloudg工作原理
qq_40165172的博客
05-25 1680
服务注册发现组件Eureka工作原理服务网关组件Zuul工作原理跨域时序图Eureka与Ribbon整合工作原理解决分布式一致性级联故障流程断路器组件Hystrix工作原理分布式追踪Sleuth工作原理SpringBoot自动配置工作原理...
Spring Cloud一些组件原理(一)
caiqianzhigai0859的博客
01-06 631
一些Eureka Server工作原理的介绍
SpringCloud五大组件原理
热门推荐
Linging_24的博客
10-31 1万+
1. Eureka原理 Eureka作为微服务中的注册中心,其服务注册于发现的原理如下: 首先有两个角色,一个服务端和客户端,服务端就是Eureka本身,客户端就是服务提供者和消费者,当服务提供者启动会将自己的信息注册到Eureka去,消费者启动会去注册中心拉取服务列表缓存到本地,消费者就可以远程调用服务提供者。客户端会与注册中心保持心跳来证明自己存活,每隔30s客户端会发送心跳给注册中心,默认情况下,每隔90s注册中心会检查是否有收到心跳,如果没有收到心跳会将客户端从服务列表剔除。 但是由于服务之间的调
大数据+springcloud技术架构
11-13
大数据+springcloud技术架构
SpringCloud五大组件及中间件方案报告
09-15
讲到了Spring Cloud五大组件 还讲到,Spring Cloud在阿里云中的使用(springcloudalibaba) Spring Cloud与中间件 Spring Cloud简介以及技术选型 Spring Cloud Netflix与服务治理 Spring Cloud config与配置中心 ...
spring cloud组件实例
01-16
spring cloud组件实例代码,可以直接运行,适合学习spring cloud
Spring Cloud组件Demo
11-30
Spring Cloud组件Demo ,包含 Spring Cloud Eureka ,Spring Cloud Zuul , Spring Cloud Ribbon , Hystrix-Dashboard-Turbine 如有错误 ,请于本人联系 ,自会及时修改 , 防止误导他人
Spring Cloud组件及底层原理
MinisterZ的博客
06-23 117
https://mp.weixin.qq.com/s/mOk0KuEWQUiugyRA3-FXwg
springCloud的几个组件的实现原理
cheng549309240的博客
02-26 1201
1.Eureka服务注册与发现的工作原理图 2.Ribbon与Eureka的整合工作原理图 3.zuul网关的工作原理图 4.组件Hystrix(断路器)工作原理 5.springBoot自动配置原理 ...
【MySQL精通之路】SQL优化(1)-查询优化(1)-WHERE子句
Anakki的博客
05-22 536
与PRIMARY KEY或UNIQUE索引上的WHERE子句一起使用的表,其中所有索引部分都与常量表达式进行比较,并定义为NOT NULL。由于MySQL会自动进行类似的优化,因此您通常可以避免这项工作,并将查询保留为更易于理解和维护的形式。因为MySQL优化器的开发工作还在进行中,所以这里并没有记录MySQL优化器所有的优化。您可能会试图重写查询以加快算术运算,同时牺牲可读性。,这有助于简化join连接。有关更多信息和示例,请参见“有关更多信息,请参见“空表或只有一行的表。
电脑同时配置两个版本mysql数据库常见问题
xiao_kelai的博客
05-21 365
在每一个命令中,mysql要选择是那个,如果都配置在环境变量中,要修改名字,不然可能会出错,在搞mysql57版本的时候就用mysql57.exe 和 mysqld57.exe ,注意每条命令,不要在创建的时候用混了,到时候又得卸载重来。例如 mysql -u root -p 改为 mysql57 -u root -p 这个时在57版本中。win登录的话,复制密码后,输入mysql57 -P3305 -u root -p 之后可以点击右键粘贴密码。
Linux文件操作——实现cp指令以及模拟修改配置文件
shion1114的博客
05-23 334
cp 1.c 2.c功能是将(内容相同,实现拷贝)main函数的参数由编译结果可知,总共有三个输入参数,同时输出每个参数字符串内容。
《Python编程从入门到实践》day36
m0_37565294的博客
05-22 1435
我们要编写一个名为“学习笔记”的Web应用程序,让用户能够记录感兴趣的主题,并在学习每个主题的过程中添加日志条目。django-admin startproject learning_log . # 新建一个名为learning_log的项目,末尾的句点让新项目使用合适的目录结构。运行命令ls,其输出表明Django有创建一个db.sqlite3.SQLite使用一种使用单个文件的数据库。# 包含4个文件(settings.py、urls.py、wsgi.py、__init__.py)
Redis 完整
m0_73173239的博客
05-24 820
什么是 redis?是一种基于键值对的 NoSql 型数据库。与 hashMap 不同的是,Redis 中的 value 支持 string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、GEO(地理信息定位)等多种数据结构。而 HashMap 只是 redis 中的 hash ,他们俩结构是相同的。
微信小程序uniapp+django洗脚按摩足浴城消费系统springboot
QQ1304979694的博客
05-24 566
Python语言官方规范访问数据库的统一接口规范(Python DB-API),防止在使用不同数据库时,由于底层数据库技术不同造成接口程序紊乱的问题。(3)项目初期开发,美工设计,前端实现,开发信息系统的用户功能的实现,完善界面排版,实现信息提取发送等一系列功能。项目系统最后阶段的修改及最终测试运行。当然,在研究过程中也可以直接调查,对调查搜集到的资料进行综合分析、比较,调查法是科学研究中普遍的研究方法。(5)系统测试:对设计好的程序进行最终调试,通过调试发现存在的问题并解决,从而达到完善系统的目的。
005、API_数据结构
最新发布
细致-专业-实操
05-26 216
Redis这样设计有两个好处:第一,可以改进内部编码,而对外的数据 结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数 据结构和命令,例如Redis3.2提供了quicklist,结合了ziplist和linkedlist两者 69 的优势,为列表类型提供了一种更为优秀的内部编码实现,而对外部用户来 说基本感知不到。键的数据结构类型,它们分别是: string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集 合),这些只是Redis对外的数据结构,
springcloud组件原理
04-28
Spring Cloud是一个基于Spring Boot的开发工具,它为开发者提供了一套完整的微服务架构解决方案。...总之,Spring Cloud组件原理是通过各个组件的协同工作,来实现微服务架构的高可用性、弹性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Map集合循环遍历的几种方式 337583
  • Internet Download Manager用假的序列号注册,IDM将退出 157742
  • 通过system.currentTimeMillis() 获得当前的时间 93396
  • 修改tomcat默认的欢迎首页,将tomcat默认的欢迎页面改成自己项目的页面 90815
  • Intellij IDEA 添加jar包的三种方式 80357

分类专栏

  • 编程语言 2篇
  • Java基础 18篇
  • Java常用类 6篇
  • Java虚拟机 6篇
  • JVM 17篇
  • 关系型数据库 2篇
  • SQL 4篇
  • T-SQL 1篇
  • 声明式事务 1篇
  • ssh整合 1篇
  • String 5篇
  • 职业规划 14篇
  • Java面试题 27篇
  • Java简历
  • Java面试题大全 11篇
  • 面试题 26篇
  • 面试 27篇
  • 经历分享 31篇
  • Servlet 4篇
  • cookie 1篇
  • filter 2篇
  • Java框架 3篇
  • jsp
  • img 1篇
  • spring mvc 2篇
  • tomcat 21篇
  • Tomcat集群 1篇
  • StringBuffer 1篇
  • StringBuilder 2篇
  • 程序人生 18篇
  • 集合 7篇
  • 集合框架 1篇
  • maven 4篇
  • IO 4篇
  • 分页 3篇
  • Java反射机制
  • Java数组排序算法 1篇
  • MyEclipse优化教程 1篇
  • 产品上线 1篇
  • ajax 9篇
  • springmvc 2篇
  • git 5篇
  • 版本控制 1篇
  • socket 1篇
  • 网络编程 1篇
  • javamail 1篇
  • javaweb 2篇
  • spring 12篇
  • 项目经验分享 1篇
  • mybatis 10篇
  • 简历 2篇
  • mysql 11篇
  • redies
  • redis 2篇
  • 开发工具 4篇
  • 高并发 1篇
  • java报表工具 1篇
  • svn 2篇
  • JavaScript 26篇
  • html 18篇
  • linux 12篇
  • idea
  • 软件破解
  • xxs攻击,SQL注入 6篇
  • struts2 7篇
  • 加密算法 3篇
  • 程序员 3篇
  • ja 1篇
  • java 6篇
  • ps 3篇
  • html,插件 2篇
  • 生活心情 6篇
  • java多线程 7篇
  • file io 2篇
  • FileUtils 2篇
  • jQuery 20篇
  • html css 2篇
  • css3 1篇
  • Process 3篇
  • ps教程
  • jdk
  • log4j 1篇
  • 2篇
  • 报表技术 1篇
  • java集合 1篇
  • sql注入 1篇
  • java递归实例 1篇
  • 异常
  • 转义 1篇
  • js 4篇
  • zTree 4篇
  • 算法 7篇
  • 文件上传 5篇
  • java框架技术 1篇
  • java socket通信技术 1篇
  • 数组去重 1篇
  • 大数据 3篇
  • 命令 1篇
  • html页面显示系统当前时间 1篇
  • lhgdialo
  • JasperReport 1篇
  • DynamicReports 1篇
  • Java报表技术 3篇
  • Java生成pdf、execl、xml文件 1篇
  • 生活随笔 3篇
  • 睿智人生 2篇
  • 成熟 1篇
  • 心情 1篇
  • java将数据库中的导出到pdf 1篇
  • poi 1篇
  • java导出excel 1篇
  • 表单提交 1篇
  • 数据结构
  • 程序员养生
  • 健康生活
  • 计算机进制 1篇
  • 网购 1篇
  • 程序生活
  • 网赚之路 1篇
  • 网赚
  • 递归算法 1篇
  • 学习资源 1篇
  • 面试经验 1篇
  • IT故事 2篇
  • 1篇
  • 工具 2篇
  • List 2篇
  • 为人 1篇
  • 育子 1篇
  • 情感 7篇
  • 1篇
  • 自学
  • 在路上
  • 线程 1篇
  • 征途 1篇
  • 框架 3篇
  • 名人名言
  • 进阶之路 2篇
  • 框架技术 2篇
  • 面向对象 2篇
  • myeclipse
  • 支付 1篇
  • 代码重构 1篇
  • 黑客 1篇
  • 资源来源
  • 资源
  • 撩妹
  • 源码 1篇
  • 健身
  • 励志 1篇
  • 自勉
  • 真爱 1篇
  • 系统
  • 规划 1篇
  • 调优
  • 性能优化
  • 养生
  • 生活
  • 优化 1篇
  • 健康 1篇
  • 生意经
  • 为人处世之道
  • 精神领袖 1篇
  • 商业领袖 2篇
  • springboot 2篇
  • 沟通交流 1篇
  • music
  • java锁 1篇
  • 个人修炼之路
  • 学习方法
  • 爱情 1篇
  • java系列 1篇
  • 生活常识
  • 微信公众号
  • 记忆 1篇
  • 习惯
  • 职场 1篇
  • 公众号 2篇
  • Shiro 1篇
  • 数组 2篇
  • 成长
  • 经历
  • 单点登录
  • 公众号推广
  • 积累
  • 金庸 1篇
  • 技巧
  • 恋爱
  • 递归 3篇
  • 大快人心
  • java文件读写 1篇
  • io流 4篇
  • :马士兵
  • 马士兵
  • 马士兵资源
  • 进阶 1篇
  • 设计模式 1篇
  • 管理者的智慧
  • 商业智慧
  • 红包
  • Hadoop 1篇
  • 人工智能
  • 数字签名 7篇
  • 数字证书 1篇
  • 歌曲
  • 民谣
  • ai
  • 加密 5篇
  • 薪资
  • 升职 1篇
  • 加薪 1篇
  • md5 1篇
  • 创业
  • 正则表达式
  • 人生
  • 音乐 1篇
  • mybaits
  • sql语句 2篇
  • 教育
  • 经验分享

最新评论

  • python django实战开发序列化器的一个应用心得分享

    叫我DPT: 也可以把password设置为只写(write-only)吧,这样返回的时候也会自己过滤

  • java 判断一个数组是否有重复值

    枫哥和java: 点关注不迷路, 欢迎常来看看表情包

  • zTree获取所有节点

    枫哥和java: 你现在呼吸的空气是别人呼吸过的, 但你依旧在呼吸!!!

  • java 判断一个数组是否有重复值

    不打代码的阿振: 牛,比循环遍历可行

  • 2020、2021年java技术面试题整理

    endlesswater: 可以的,我看的另一篇,我面试时90%以上的题目在下边这个博客里:https://knife.blog.csdn.net/article/details/121219272

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • IBM db2数据库初体验(有图有真相保姆级教程)
  • 使用datax同步人大金仓数据库运行报错:com.kingbase8.util.KSQLException: The authentication type 10 is not support解决办法
  • 【74期】面试官:对多线程熟悉吗,来谈谈线程池的好处?
2024年12篇
2023年45篇
2022年57篇
2021年215篇
2020年243篇
2019年346篇
2018年384篇
2017年153篇

目录

目录

分类专栏

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

4617作文网周易12生肖算命男孩起名楚辞周易姓曲起名女孩周易测名 周易人做梦中梦是什么预兆周公解梦经典解梦app命格八字测算风水周易图于姓的女宝宝起名猪的宝宝起名字禁忌宝宝起名 诗经周公解梦梦见要结婚起名股份有限公司周公解梦梦见家具姓张起什么名字好听起名网生辰生辰八字取名周易六十卦爻全图解名字测试结果周易周公解梦割草曹性起名女孩周公解梦测名字周易免费八字测桃花祁氏男孩起名周易独胆王预测周易第42卦详解于姓女孩名字起名右眼皮老是跳周公解梦宝宝起名 胡八字算命生辰八字算命周易八字算命免费命格测算淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男子给前妻转账 现任妻子起诉要回网友建议重庆地铁不准乘客携带菜筐月嫂回应掌掴婴儿是在赶虫子重庆警方辟谣“男子杀人焚尸”国产伟哥去年销售近13亿新的一天从800个哈欠开始男孩疑遭霸凌 家长讨说法被踢出群高中生被打伤下体休学 邯郸通报男子持台球杆殴打2名女店员被抓19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警两大学生合买彩票中奖一人不认账德国打算提及普京时仅用姓名山西省委原副书记商黎光被逮捕武汉大学樱花即将进入盛花期今日春分张家界的山上“长”满了韩国人?特朗普谈“凯特王妃P图照”王树国3次鞠躬告别西交大师生白宫:哈马斯三号人物被杀代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了房客欠租失踪 房东直发愁倪萍分享减重40斤方法“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火手机成瘾是影响睡眠质量重要因素考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼网友洛杉矶偶遇贾玲呼北高速交通事故已致14人死亡西双版纳热带植物园回应蜉蝣大爆发男孩8年未见母亲被告知被遗忘张立群任西安交通大学校长恒大被罚41.75亿到底怎么缴沈阳一轿车冲入人行道致3死2伤奥运男篮美国塞尔维亚同组周杰伦一审败诉网易国标起草人:淀粉肠是低配版火腿肠外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万杨倩无缘巴黎奥运男子被猫抓伤后确诊“猫抓病”春分“立蛋”成功率更高?记者:伊万改变了国足氛围奥巴马现身唐宁街 黑色着装引猜测

4617作文网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化