网站建设的硬件平台,python做网站的案例,昆明市 网站建设,企业网站建设门户微服务架构是一种架构模式#xff0c;它提倡将单一应用程序划分成一组小的服务#xff0c;服务之间互相协调、互相配合#xff0c;为用户提供最终价值。
每个服务运行在其独立的进程中#xff0c;服务和服务间采用轻量级的通信机制互相沟通#xff08;通常是基于 HTTP 的…微服务架构是一种架构模式它提倡将单一应用程序划分成一组小的服务服务之间互相协调、互相配合为用户提供最终价值。
每个服务运行在其独立的进程中服务和服务间采用轻量级的通信机制互相沟通通常是基于 HTTP 的 RESTful API。每个服务都围绕着具体业务进行构建并且能够被独立地部署到生产环境、类生产环境等。另外应尽量避免统一的、集中式的服务管理机制对具体的一个服务而言应根据业务上下文选择合适的语言、工具对其进行构建。
现在市面常见的微服务框架主要有Spring Cloud 和 Dubbo 服务注册发现 服务注册发现服务注册就是维护一个登记薄服务注册就是维护一个登记簿它管理系统内所有的服务地址。当新的服务启动后它会向登记 簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeeperConsulEtcd, 还有 Netflix 家的 eureka 等。服务注册有两种形式客户端注册和第三方注册. 服务注册zookeeper
服务注册是服务自身要负责注册与注销的工作。当服务启动后向注册中心注册自身当服务下线时注销自己。期间还需要和注册中心保持心跳。心跳不一定要客户端来做也可以由注册中心 负责这个过程叫探活。这种方式的缺点是注册工作与服务耦合在一起不同语言都要实现一套注册逻辑。 服务发现
当服务调用方调用某个服务的时候可以通过服务的名字去服务注册发现中心获取可用的服务服务发现中心从内存的服务列表获取所有可用的服务然后负载均衡根据既定的规则选择一个服务将 HTTP 服务 ip port 返回给调用方如果是grpc服务从连接池获取该服务的连接返回给调用方。 API网关 API网关API网关是一个服务器是系统的唯一入口。从面向对象设计的角度看它与外观模式类似。API网关封装了系统内部架构为每个客户端提供一个定制的API。它可能还具有其它职责如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。 API Gateway 负责请求转发、合成和协议转换。所有来自客户端的请求都要先经过 API Gateway然后路由这些请求到对应的微服务。API Gateway 将经常通过调用多个微服务来处理一个请求以及聚合多个服务的结果。它可以在 web 协议与内部使用的非 Web 友好型协议间进行转换如HTTP 协议、WebSocket 协议。
API网关方式的核心要点是所有的客户端和消费端都通过统一的网关接入微服务在网关层处理所有的非业务功能。通常网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。 请求转发
服务转发主要是对客户端的请求安装微服务的负载转发到不同的服务上。
相应合并
把业务上需要调用多个服务接口才能完成的工作合并成一次调用对外统一提供服务。
协议转换
重点是支持 SOAP、JMS比如 Rest 间的协议转换。
数据转换
重点是支持 XML 和 Json 之间的报文格式转换能力可选。
安全认证
•基于 Token 的客户端访问控制和安全策略•传输数据和报文加密到服务端解密需要在客户端有独立的 SDK 代理包•基于 Https 的传输加密客户端和服务端数字证书支持•基于 OAuth2.0 的服务安全认证(授权码客户端密码模式等。
配置中心 配置中心配置中心一般用作系统的参数配置它需要满足如下几个要求高效获取、实时感知、分布式访问。 zookeeper 配置中心
实现的架构图如下所示采取数据加载到内存方式解决高效获取的问题借助 zookeeper 的节点监听机制来实现实时感知。 配置中心数据分类 事件调度kafka
消息服务和事件的统一调度常用用 kafka activemq 等。 服务跟踪starter-sleuth
随着微服务数量不断增长需要跟踪一个请求从一个微服务到下一个微服务的传播过程 Spring Cloud Sleuth 正是解决这个问题它在日志中引入唯一 ID以保证微服务调用之间的一致性这样你就能跟踪某个请求是如何从一个微服务传递到下一个。
•为了实现请求跟踪当请求发送到分布式系统的入口端点时只需要服务跟踪框架为该请求创建一个唯一的跟踪标识同时在分布式系统内部流转的时候框架始终保持传递该唯一标 识直到返回给请求方为止这个唯一标识就是前文中提到的 Trace ID。通过 Trace ID 的记录我们就能将所有请求过程日志关联起来 •为了统计各处理单元的时间延迟当请求达到各个服务组件时或是处理逻辑到达某个状态时也通过一个唯一标识来标记它的开始、具体过程以及结束该标识就是我们前文中提到的 Span ID对于每个 Span 来说它必须有开始和结束两个节点通过记录开始 Span 和结束 Span 的时间戳就能统计出该 Span 的时间延迟除了时间戳记录之外它还可以包含一些其他元数据比如事件名称、请求信息等 •在 Spring Boot 应用中通过在工程中引入 spring-cloudstarter-sleuth 依赖之后 它会自动的为当前应用构建起各通信通道的跟踪机制比如 •通过诸如 RabbitMQ、Kafka或者其他任何 Spring Cloud Stream 绑定器实现的消息中间件传递的请求。•通过 Zuul 代理传递的请求。•通过 RestTemplate 发起的请求。
服务熔断Hystrix 服务熔断在微服务架构中通常会有多个服务层调用基础服务的故障可能会导致级联故障进而造成整个系统不可用的情况这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。 熔断器的原理很简单如同电力过载保护器。它可以实现快速失败如果它在一段时间内侦测到许多类似的错误会强迫其以后的多个调用快速失败不再访问远程服务器从而防止应用程序不断地尝试执行可能会失败的操作使得应用程序继续执行而不用等待修正错误或者浪费 CPU时间去等到长时间的超时产生。熔断器也可以使应用程序能够诊断错误是否已经修正如果已经修正应用程序会再次尝试调用操作。 Hystrix 断路器机制
断路器很好理解, 当 Hystrix Command 请求后端服务失败数量超过一定比例(默认 50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认 5 秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN). Hystrix 的断路器就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接切断请求链, 避免发送大量无效请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力。