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

友链网站降权wordpress自动发布网站

友链网站降权,wordpress自动发布网站,wordpress项目id,美的网站建设水平swot分析目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均… 目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均衡原理4.2 源码分析LoadBalancerInterceporLoadBalancerClient负载均衡策略IRule总结 4.3 负载均衡策略4.4 饥饿加载 5 Nacos注册中心5.1.认识和安装Nacos5.1.1 Windows下安装Nacos5.1.2 Linux下安装Nacos 5.2 服务注册到nacos5.3 服务分级存储模型5.3.1 给user-service配置集群5.3.2 同集群优先的负载均衡 5.4 权重配置5.5 环境隔离5.5.1 创建namespace5.5.2 给微服务配置namespace 5.6.Nacos与Eureka的区别 1 微服务 1.1 微服务的演变 单体架构 将业务的所有功能集中在一个项目中开发打成一个包部署。优点架构简单部署成本低打jar包、部署、负载均衡就完成了缺点耦合度高维护困难、升级困难不利于大项目开发 分布式架构 根据业务功能对系统做拆分每个业务功能模块作为独立项目开发称为一个服务优点降低服务耦合有利于服务升级和拓展缺点服务调用关系错综复杂难度大 分布式架构要考虑的问题 服务拆分的粒度如何每个服务对应唯一的业务能力。 服务集群地址如何维护 服务之间如何调用注册中心、消息队列 服务的调用关系如何管理消息队列 1.2 微服务 微服务是一种经过良好架构设计的分布式架构方案 。 微服务的架构特征 单一职责微服务拆分粒度更小每一个服务都对应唯一的业务能力做到单一职责自治团队独立、技术独立、数据独立独立部署和交付面向服务服务提供统一标准的接口与语言和技术无关隔离性强服务调用做好隔离、容错、降级避免出现级联问题 全球的互联网公司都在积极尝试自己的微服务落地方案。其中在Java领域国内最知名的是SpringCloud和Dubbo。 微服务技术对比 不同企业需求 1.3 SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网地址https://spring.io/projects/spring-cloud。 SpringCloud集成了各种微服务功能组件并基于SpringBoot实现了这些组件的自动装配从而提供了良好的开箱即用体验。 其中常见的组件包括 另外SpringCloud底层是依赖于SpringBoot的并且有版本的兼容关系如下 目前学习使用的版本是 Hoxton.SR10因此对应的SpringBoot版本是2.3.x版本。 如果版本不兼容运行会报错Error creating bean with name configurationPropertiesBeans ... 1.4 小结 单体架构简单方便高度耦合扩展性差适合小型项目。例如学生管理系统 分布式架构松耦合扩展性好但架构复杂难度大。适合大型互联网项目例如京东、淘宝 微服务一种良好的分布式架构方案 ①优点拆分粒度更小、服务更独立、耦合度更低 ②缺点架构非常复杂运维、监控、部署难度提高 SpringCloud是微服务架构的一站式解决方案集成了各种优秀微服务功能组件 2 服务拆分及远程调用 2.1 服务拆分 微服务拆分时的几个原则 单一职责不同微服务不要重复开发相同业务数据独立不要访问其它微服务的数据库面向服务将自己的业务暴露为接口供其它微服务调用 2.2 服务拆分案例 导入资料中的微服务cloud-demo其结构 注意修改自己的数据库密码 cloud-demo父工程管理依赖 order-service订单微服务负责订单相关业务user-service用户微服务负责用户相关业务 要求 订单微服务和用户微服务都必须有各自的数据库相互独立订单服务和用户服务都对外暴露Restful的接口订单服务如果需要查询用户信息只能调用用户服务的Restful接口不能查询用户数据库 导入提供的cloud-order.sql和cloud-user.sql导入到mysql中 tb_user tb_order 运行demo分别访问 2.3 实现远程调用 需求根据订单id查询订单的同时把订单所属的用户信息一起返回 根据上面的demo我们会发现在order-service服务中有一个根据id查询订单的接口返回的order对象中user为null 而案例需求修改order-service中的根据id查询订单业务要求在查询订单的同时根据订单中包含的userId查询出用户信息一起返回。 因此我们需要在order-service中 向user-service发起一个http的请求调用http://localhost:8081/user/{userId}这个接口。 大概的步骤是这样的 注册一个RestTemplate的实例到Spring容器修改order-service服务中的OrderService类中的queryOrderById方法根据Order对象中的userId查询User将查询的User填充到Order对象一起返回 步骤1 注册RestTemplate 在order-service服务中的OrderApplication启动类中注册RestTemplate /*** 创建RestTemplate并注入Spring容器* return*/ Bean public RestTemplate restTemplate(){return new RestTemplate(); }步骤2 实现远程调用 修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法 GetMapping(/{orderId}) public Order queryOrderByUserId(PathVariable(orderId) Long orderId) {// 1.根据id查询订单Order order orderService.queryOrderById(orderId);//2. 利用RestTemplate发送http请求查询用户//2.1 urlString url http://localhost:8081/user/order.getUserId();//2.2 发送http请求实现远程调用User user restTemplate.getForObject(url, User.class);//3. 封装User到Orderorder.setUser(user);//4. 返回return order; }restTemplate自动把json格式的数据转为了对象 测试效果 微服务调用方式 基于RestTemplate发起的http请求实现远程调用http请求做远程调用是与语言无关的调用只要知道对方的ip、端口、接口路径、请求参数即可。 2.4 提供者与消费者 在服务调用关系中会有两个不同的角色 服务提供者一次业务中被其它微服务调用的服务。提供接口给其它微服务 服务消费者一次业务中调用其它微服务的服务。调用其它微服务提供的接口 服务A调用了服务B而服务B又调用了服务C服务B的角色是什么 对于A调用B的业务而言A是服务消费者B是服务提供者对于B调用C的业务而言B是服务消费者C是服务提供者 因此服务B既可以是服务提供者也可以是服务消费者。 服务提供者与服务消费者的角色并不是绝对的而是相对于业务而言。 一个服务既可以是服务者也可以是消费者 3 Eureka注册中心 上面案例我们使用了硬编码获取了地址 存在的问题 order-service在发起远程调用的时候该如何得知user-service实例的ip地址和端口有多个user-service实例地址order-service调用时该如何选择order-service如何得知某个user-service实例是否依然健康是不是已经宕机 3.1 Eureka的结构和作用 Eureka的作用 消费者该如何获取服务提供者具体信息? 服务提供者启动时向eureka注册自己的信息eureka保存这些信息消费者根据服务名称向eureka拉取提供者信息 如果有多个服务提供者,消费者该如何选择? 服务消费者利用负载均衡算法从服务列表中挑选一个 消费者如何感知服务提供者健康状态? 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态eureka会更新记录服务列表信息心跳不正常会被剔除消费者就可以拉取到最新的信息 回答上面的各个问题。 问题1order-service如何得知user-service实例地址 获取地址信息的流程如下 user-service服务实例启动后将自己的信息注册到eureka-serverEureka服务端。这个叫服务注册eureka-server保存服务名称到服务实例地址列表的映射关系order-service根据服务名称拉取实例地址列表。这个叫服务发现或服务拉取 问题2order-service如何从多个user-service实例中选择具体的实例 order-service从实例列表中利用负载均衡算法选中一个实例地址向该实例地址发起远程调用 问题3order-service如何得知某个user-service实例是否依然健康是不是已经宕机 user-service会每隔一段时间默认30秒向eureka-server发起请求报告自己状态称为心跳当超过一定时间没有发送心跳时eureka-server会认为微服务实例故障将该实例从服务列表中剔除order-service拉取服务时就能将故障实例排除了 注意一个微服务既可以是服务提供者又可以是服务消费者因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端 3.2 搭建eureka-server 步骤如下 在cloud-demo父工程下创建一个子Maven模块创建eureka-server服务 引入SpringCloud为eureka提供的starter依赖 !--eureka服务端-- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId /dependency给eureka-server服务编写一个启动类一定要添加一个EnableEurekaServer注解开启eureka的注册中心功能 package cn.itcast.eureka;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;SpringBootApplication EnableEurekaServer public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);} }编写一个application.yml配置文件 server:port: 10086 spring:application:name: eurekaservice #eureka的服务名称 eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka #eureka的地址信息启动服务 启动微服务然后在浏览器访问http://127.0.0.1:10086 看到下面结果应该是成功了 3.3 服务注册 我们将user-service模块注册到eureka-server中去。 在user-service的pom文件中引入下面的eureka-client依赖 !--引入eureka客户依赖-- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId /dependency在user-service中修改application.yml文件添加服务名称、eureka地址 spring:application:name: userservice eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka启动多个user-service实例 问题解决在idea2022中复制 configuration改变项目端口的解决方案 启动 查看eureka-server管理页面 3.4 服务发现 在order-service完成服务拉取 服务拉取是基于服务名称获取服务列表然后再对服务列表做负载均衡 我们将order-service的逻辑修改向eureka-server拉取user-service的信息实现服务发现。 引入依赖。之前说过服务发现、服务注册统一都封装在eureka-client依赖因此这一步与服务注册时一致。配置文件。服务发现也需要知道eureka地址因此第二步与服务注册一致都是配置eureka信息服务拉取和负载均衡 最后我们要去eureka-server中拉取user-service服务的实例列表并且实现负载均衡。 在order-service的OrderApplication中给RestTemplate这个Bean添加一个LoadBalanced注解 修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径用服务名代替ip、端口 spring会自动帮助我们从eureka-server端根据userservice这个服务名称获取实例列表而后完成负载均衡。 4 Ribbon负载均衡 问题上一节中我们添加了LoadBalanced注解即可实现负载均衡功能这是什么原理呢 4.1 负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件来实现负载均衡功能的。 问题发出的请求明明是http://userservice/user/1如何变成http://localhost:8081的呢 4.2 源码分析 为什么我们只输入了service名称就可以访问了呢之前还要获取ip和端口。 显然有人帮我们根据service名称获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor这个类会在对RestTemplate的请求进行拦截然后从Eureka根据服务id获取服务列表随后利用负载均衡算法得到真实的服务地址信息替换服务id。 我们通过断点调试进行源码跟踪 LoadBalancerIntercepor 可以看到这里的intercept方法拦截了用户的HttpRequest请求然后做了几件事 request.getURI()获取请求uri本例中就是 http://user-service/user/8originalUri.getHost()获取uri路径的主机名其实就是服务iduser-servicethis.loadBalancer.execute()处理服务id和用户请求。 这里的this.loadBalancer是LoadBalancerClient类型我们继续跟入。 LoadBalancerClient 继续跟入execute方法 getLoadBalancer(serviceId)根据服务id获取ILoadBalancer而ILoadBalancer会拿着服务id去eureka中获取服务列表并保存起来。getServer(loadBalancer)利用内置的负载均衡算法从服务列表中选择一个。本例中可以看到获取了8082端口的服务 放行后再次访问并跟踪发现获取的是8081 实现了负载均衡。 负载均衡策略IRule 在刚才的代码中可以看到获取服务使通过一个getServer方法来做负载均衡: 继续跟入 继续跟踪源码chooseServer方法发现这么一段代码 我们看看这个rule是谁 这里的rule默认值是一个RoundRobinRule看类的介绍 RoundRobin轮询。也就是实现了负载均衡 总结 SpringCloudRibbon的底层采用了一个拦截器拦截了RestTemplate发出的请求对地址做了修改。 基本流程如下 拦截我们的RestTemplate请求http://userservice/user/1RibbonLoadBalancerClient会从请求url中获取服务名称也就是user-serviceDynamicServerListLoadBalancer根据user-service到eureka拉取服务列表eureka返回列表localhost:8081、localhost:8082IRule利用内置负载均衡规则从列表中选择一个例如localhost:8081RibbonLoadBalancerClient修改请求地址用localhost:8081替代userservice得到http://localhost:8081/user/1发起真实请求 4.3 负载均衡策略 负载均衡的规则都定义在IRule接口中而IRule有很多不同的实现类 不同规则的含义 默认的实现就是ZoneAvoidanceRule是一种轮询方案 通过自定义IRule实现可以修改负载均衡规则有两种方式 方式一代码方式在order-service中的OrderApplication类中定义一个新的IRule所有的服务都执行 Bean public IRule randomRule(){return new RandomRule(); }方式二配置文件方式在order-service的application.yml文件中添加新的配置也可以修改规则针对某个服务 userservice: # 给某个微服务配置负载均衡规则这里是userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 注意一般用默认的负载均衡规则不做修改。 4.4 饥饿加载 Ribbon默认是采用懒加载即第一次访问时才会去创建LoadBalanceClient请求时间会很长。 而饥饿加载则会在项目启动时创建降低第一次访问的耗时通过下面配置开启饥饿加载 ribbon:eager-load:enabled: trueclients: userservice# 如果有多个使用这种写法# clients:# - userservice# - xxxxservice5 Nacos注册中心 国内公司一般都推崇阿里巴巴的技术比如注册中心SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 5.1.认识和安装Nacos Nacos是阿里巴巴的产品现在是SpringCloud中的一个组件。相比Eureka功能更加丰富在国内受欢迎程度较高。 在Nacos的GitHub页面提供有下载链接可以下载编译好的Nacos服务端或者源代码 GitHub主页GitHub的Release下载页 5.1.1 Windows下安装Nacos 下载后解压到一个非中文路径下 端口配置 acos的默认端口是8848如果你电脑上的其它进程占用了8848端口请先尝试关闭该进程。如果无法关闭占用8848端口的进程也可以进入nacos的conf目录修改配置文件中的端口 启动 进入bin目录结构如下 然后执行命令startup.cmd -m standalone 执行成功后 访问 启动后在浏览器输入地址http://127.0.0.1:8848/nacos即可默认账号和密码都是nacos 5.1.2 Linux下安装Nacos 安装JDK Nacos依赖于JDK运行所以Linux上也需要安装JDK才行。 上传到某个目录例如/usr/local/ 然后解压缩 tar -xvf jdk-8u144-linux-x64.tar.gz然后重命名为java 配置环境变量 export JAVA_HOME/usr/local/java export PATH$PATH:$JAVA_HOME/bin设置环境变量 source /etc/profile上传安装包 上传到Linux服务器的某个目录例如/usr/local/src目录下 解压 命令解压缩安装包 tar -xvf nacos-server-1.4.1.tar.gz然后删除安装包 rm -rf nacos-server-1.4.1.tar.gz端口配置 与windows中类似 启动在nacos/bin目录中输入命令启动Nacos sh startup.sh -m standalone5.2 服务注册到nacos Nacos是SpringCloudAlibaba的组件而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说并没有太大区别。 主要差异在于 依赖不同服务地址不同 引入依赖 在cloud-demo父工程的pom文件中的dependencyManagement中引入SpringCloudAlibaba的依赖 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.2.6.RELEASE/versiontypepom/typescopeimport/scope /dependency然后在user-service和order-service中的pom文件中引入nacos-discovery依赖 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency配置nacos 在user-service和order-service的application.yml中添加nacos地址 spring:cloud:nacos:server-addr: localhost:8848重启 重启微服务后登录nacos管理页面可以看到微服务信息 5.3 服务分级存储模型 一个服务可以有多个实例例如我们的user-service可以有: 127.0.0.1:8081127.0.0.1:8082127.0.0.1:8083 假如这些实例分布于全国各地的不同机房例如 127.0.0.1:8081在上海机房127.0.0.1:8082在上海机房127.0.0.1:8083在杭州机房 Nacos就将同一机房内的实例 划分为一个集群。 也就是说user-service是服务一个服务可以包含多个集群如杭州、上海每个集群下可以有多个实例形成分级模型如图 微服务互相访问时应该尽可能访问同集群实例因为本地访问速度更快。当本集群内不可用时才访问其它集群。例如 杭州机房内的order-service应该优先访问同机房的user-service。 5.3.1 给user-service配置集群 修改user-service的application.yml文件添加集群配置 spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称重启两个user-service实例后我们可以在nacos控制台看到下面结果 再次复制一个user-service启动配置添加属性 启动UserApplication3后再次查看nacos控制台 5.3.2 同集群优先的负载均衡 默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。因此Nacos中提供了一个NacosRule的实现可以优先从同集群中挑选实例。 1给order-service配置集群信息修改order-service的application.yml文件添加集群配置 spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称2修改负载均衡规则修改order-service的application.yml文件修改负载均衡规则 userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 5.4 权重配置 实际部署中会出现这样的场景 服务器设备性能有差异部分实例所在机器性能较好另一些较差我们希望性能好的机器承担更多的用户请求。 但默认情况下NacosRule是同集群内随机挑选不会考虑机器的性能问题。 因此Nacos提供了权重配置来控制访问频率权重越大则访问频率越高。 在nacos控制台找到user-service的实例列表点击编辑即可修改权重 如果权重修改为0则该实例永远不会被访问 5.5 环境隔离 Nacos提供了namespace来实现环境隔离功能。 nacos中可以有多个namespacenamespace下可以有group、service等不同namespace之间相互隔离例如不同namespace的服务互相不可见 5.5.1 创建namespace 默认情况下所有service、data、group都在同一个namespace名为public 我们可以点击页面新增按钮添加一个namespace 如果不设置id则通过uuid自动生成 就能在页面看到一个新的namespace 5.5.2 给微服务配置namespace 给微服务配置namespace只能通过修改配置来实现。 例如修改order-service的application.yml文件 spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间填ID此时访问order-service因为namespace不同会导致找不到userservice控制台会报错 5.6.Nacos与Eureka的区别 Nacos的服务实例分为两种l类型 临时实例如果实例宕机超过一定时间会从服务列表剔除默认的类型。非临时实例如果实例宕机不会从服务列表剔除也可以叫永久实例。 配置一个服务实例为永久实例 spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例Nacos和Eureka整体结构类似服务注册、服务拉取、心跳等待但是也存在一些差异 Nacos与eureka的共同点 都支持服务注册和服务拉取都支持服务提供者心跳方式做健康检测 Nacos与Eureka的区别 Nacos支持服务端主动检测提供者状态临时实例采用心跳模式非临时实例采用主动检测模式临时实例心跳不正常会被剔除非临时实例则不会被剔除Nacos支持服务列表变更的消息推送模式服务列表更新更及时Nacos集群默认采用AP方式当集群中存在非临时实例时采用CP模式Eureka采用AP方式
http://www.pierceye.com/news/945682/

相关文章:

  • 网站后台怎么添加图片大连精美网站制作
  • 电子商务网站建设规划说明书长沙百度快速排名
  • 自由建网站的网络程序在哪建设网站
  • 做u盘的老外网站黑龙江省住房和城乡建设厅官网
  • 网站logo如何替换wordpress怎么实现付费可见
  • 广州网站建设公司排行南宁企业网站建站
  • 网站优化总结报告个人博客网
  • 愿景 做中国最受欢迎的互联网网站找小程序
  • 重庆seowhy整站优化即时设计是什么软件
  • 哈尔滨网站建设哪个好做网站和域名
  • 制作网站的步骤和过程无锡网站改版多少钱
  • 网站建设与维护实训ppt可以在线做动图的网站
  • 软件开发外包网站开发系统的流程
  • 花卉网站建设策划方案二手房发布网站怎么做
  • 公司做影视网站侵权iis配置网站访问权限
  • 做网站的时候卖过假货而出过事如何做tiktok的数据排行网站
  • 给网站网站做推广获奖网站设计
  • 河南建设厅网站查证报名网站开发多钱
  • 杭州做网站 做小程序网站百度知道怎么做推广
  • 网站防红链接怎么做国内设计欣赏网站
  • 网站被黑咋样的wordpress导入用户数据库
  • wordpress 插件设计搜索引擎优化常用方法
  • ps怎样做网站大图wordpress固定链接精简
  • 学校网站推广方案商城系统app
  • 图书馆管理系统产品介绍网站如何做seo
  • 威县企业做网站做网站游戏的网站有哪些
  • 如何做网站二维码广州营销型网站建设
  • 网站网页转小程序教程网站建设公司 枫子伽叩
  • 做民宿哪家网站最好网站推广技巧有哪些?
  • 北京做网站推广兼职wordpress 分段循环