做网站一般像素,做医疗信息网站的域名,电脑做网站软件,小程序代运营多少钱一个月分布式和微服务 含义 微服务架构 微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法#xff0c;每个服务运行在自己的进程中#xff0c;服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服…分布式和微服务 含义 微服务架构 微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法每个服务运行在自己的进程中服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理服务可用不同的语言开发使用不同的数据存储技术。 分布式架构 分布式系统是若干独立计算机的集合这些计算机对用户来说就像单个相关系统即整个系统是由不同的计算机组成而用户是无感知的就像访问一台计算机一样。这里强调的是系统由不同物理上分离的计算机服务器组成。 概念 微服务架构 微服务是设计层面的东西一般考虑如何将系统从逻辑上进行拆分也就是垂直拆分。微服务可以是分布式的即可以将不同服务部署在不同计算机上当然如果量小也可以部署在单机上。 分布式架构 分布式是部署层面的东西即强调物理层面的组成即系统的各子系统部署在不同计算机上。 解决的问题 微服务架构 微服务解决的是系统复杂度问题 一般来说是业务问题即在一个系统中承担职责太多了需要打散便于理解和维护进而提升系统的开发效率和运行效率微服务一般来说是针对应用层面的。 分布式架构 分布式解决的是系统性能问题 即解决系统部署上单点的问题尽量让组成系统的子系统分散在不同的机器上进而提高系统的吞吐能力每秒能处理多少请求。 部署 微服务架构 微服务的应用可以部署在是同一个服务器不一定是分散在多个服务器上。微服务架构是一项在云中部署应用和服务的新技术。微服务架构是一种架构模式它将一个复杂的大型应用程序划分成多个微服务这些小型服务都在各自独立的进程中运行。 分布式架构 分布式是将一个大的系统划分为多个业务模块,这些业务模块会分别部署到不同的机器上通过接口进行数据交互。 耦合度 微服务架构 微服务相比分布式服务来说它的粒度更小服务之间耦合度更低由于每个微服务都由独立的小团队负责因此它敏捷性更高。 分布式架构 分布式服务最后都会向微服务架构演化这是一种趋势不过服务微服务化后带来的挑战也是显而易见的例如服务粒度小数量大后期运维将会很难。 问:分布式是否属于微服务 答案是属于。微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。但是微服务不一定是分布式因为微服务的应用不一定是分散在多个服务器上他也可以是同一个服务器。这也是分布式和微服务的一个细微差别。 CAP
CAP原则又称CAP定理指的是在一个分布式系统中一致性Consistency、可用性Availability、分区容错性Partition tolerance。CAP 原则指的是这三个要素最多只能同时实现两点不可能三者兼顾。
一致性C在分布式系统中的所有数据备份在同一时刻是否同样的值。等同于所有节点访问同一份最新的数据副本
可用性A保证每个请求不管成功或者失败都有响应。
分区容忍性P系统中任意信息的丢失或失败不会影响系统的继续运作。
组件
Spring Cloud它将现在非常流行的一些技术整合到一起实现了诸如配置管理服务发现智能路由 负载均衡熔断器控制总线集群状态等功能协调分布式环境中各个系统为各类服务提供模板性配置。其主要 涉及的组件包括 Eureka注册中心 Zuul、Gateway服务网关/路由 Ribbon 负 载 均 衡 Feign服务调用 Hystrix或Resilience4j熔断器 微服务环境搭建 最新的版本对应关系可以参考网址 版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub https://kgithub.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 版本对应关系 版本一定要对应好 我们一般把服务的主动调用方称为服务消费者把服务的被调用方称为服务提供者。
生产者 服务的被调用方
消费者 服务调用方
创建工程 什么是父子工程 父子工程说白了就是利用Maven的继承依赖传递性来为我们省略一些重复的配置通常配置在父模块中为子模块提供使用这样可以做到一处声明处处使用。 为什么需要继承制父子工程 可能有的人该说了我写个项目打成jar包让另一个项目引入这样就可以达到依赖统一管理了呀当然你可能忘了这一点由于非 compile 范围的依赖信息是不能在“依赖链”中传递的所以有需要的工程只能单独配置。 假如有三个子项目junit都使用的4.0版本由于4.9版本出了一些新功能我们想要让他们全升级到4.9那么到各个工程中手动修改无疑是非常不可取的。使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。 父子工程的创建
创建父工程 ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.2/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.example/groupIdartifactIddemo01/artifactIdversion0.0.1-SNAPSHOT/versionpackagingpom/packagingnamedemo01/namedescriptiondemo01/descriptionmodulesmodulecomm/modulemoduleservice/module/modulesproperties!-- 声明变量 java.version/ 取值:${java.version}--java.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-cloud.version2020.0.1/spring-cloud.versionspring-cloud-alibaba.version2021.1/spring-cloud-alibaba.version/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependencies/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationimagebuilderpaketobuildpacks/builder-jammy-base:latest/builder/image/configuration/plugin/plugins/build/project创建对应子模块(与父模块)方式相同 comm 放置实体类 service 放置消费者和生产者 comm
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.example/groupIdartifactIddemo01/artifactIdversion0.0.1-SNAPSHOT/version/parentartifactIdcomm/artifactIdpackagingjar/packagingnamecomm/nameurlhttp://maven.apache.org/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependencies
/projectData
AllArgsConstructor
NoArgsConstructor
public class Product {private Integer id;private String name;
}
service
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.example/groupIdartifactIddemo01/artifactIdversion0.0.1-SNAPSHOT/version/parentartifactIdservice/artifactIdpackagingpom/packagingnameservice/nameurlhttp://maven.apache.org/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.example/groupIdartifactIdcomm/artifactIdversion0.0.1-SNAPSHOT/version/dependency/dependencies
/project生产者和消费者 在service项目下新建两个springboot模块 order 消费者 product 生产者 消费者 application.properties server.port8081
spring.cloud.nacos.discovery.server-addr192.168.253.16:8848
spring.application.nameorder
feign.sentinel.enabledtrue 启动类下新加 http的 Bean注入 Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();} controller // 远程调用Resourceprivate RestTemplate restTemplate;GetMapping(order/{pid})public Object addOrder(PathVariable Integer pid) {Product forObject restTemplate.getForObject(http://localhost:8082/pro/ pid, Product.class);return forObject;}
生产者 application.properties server.port8082
spring.cloud.nacos.discovery.server-addr192.168.253.16:8848
spring.application.nameproduct controller GetMapping(pro/{id})public Product getProById(PathVariable Integer id){return new Product(id,testid);} xml把 parent 改为 service即可 消费者生产者一样 parentgroupIdcom.example/groupIdartifactIdservice/artifactIdversion0.0.1-SNAPSHOT/version/parent 请求 order/id 请求页面json数据为生产者数据配置完成