Distributed
文章平均质量分 90
carl-zhao
I never grew up, but i never stop growing.
展开
-
3、Nacos 配置中心源码解析之 项目结构
Nacos 的 github 地址为:https://github.com/alibaba/nacos/。以下分析基于: Nacos 版本号:。Nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos提供四个主要功能。服务发现和服务运行状况检查Nacos简化了服务注册和通过DNS或HTTP接口发现其他服务的过程。Nacos还提供服务的实时运行状况检查,以防止向不健康的主机或服务实例发送请求。动态配置管理Dynamic Configuration Service允许您跨所原创 2022-07-13 23:41:23 · 584 阅读 · 0 评论 -
1、Nacos 配置中心源码解析之 Hello World
在单体架构的时候我们可以将配置写在配置文件中,但有⼀个缺点就是每次修改配置都需要重启服务才能生效。当应用程序实例比较少的时候还可以维护。如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本。.........原创 2022-07-13 00:06:31 · 629 阅读 · 0 评论 -
1、Google Grpc 框架源码解析 之 Hello World
由于最近换了一份工作,新公司使用 RPC 框架使用的是 Google 开源的 RPC 框架 grpc。对于 grpc 之前只是听说过,在真实的项目当中并没有使用过。为了能够更好的使用 grpc (当遇到问题,能够快速发现并解决问题),所以准备写一个系列来研究 grpc 。gRPC是一个现代的开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,支持负载均衡、跟踪、健康检查和身份验证。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端原创 2022-02-26 18:49:08 · 955 阅读 · 2 评论 -
8、短路器 Netflix Hystrix 之 Plugins
1、Plugins你可以修改 Hystrix 的行为,或者通过实现插件给它添加额外的行为。你可以通过 HystrixPlugins 服务注册这些插件。然后,Hystrix 将把它们应用到所有 HystrixCommand、HystrixObservableCommand 和 HystrixCollapser 实现中,覆盖其他所有实现。2、Plugin Types以下是你可以实现的不同插件的介绍( Javadocs 包含更多的细节):2.1 事件通知在 HystrixCommand 和 Hystr原创 2021-01-24 12:29:34 · 269 阅读 · 0 评论 -
7、短路器 Netflix Hystrix 之 Metrics和监控
1、动机当HystrixCommand 和 HystrixObservableCommands 执行时,它们会生成执行结果和延迟的指标。这对系统的操作人员非常有用,因为他们可以深入了解系统是如何运行的。Hystrix 为每个命令键提供指标,并提供非常细的粒度(以秒为单位)。这些指标在单独和总体上都是有用的。获取在请求中执行的命令集以及结果和延迟信息通常有助于调试。聚合度量在理解整体系统级行为方面很有用,并且适合发出警报或报告。Hystrix Dashboard 就是这样一个消费者。下面是命令执行和编写原创 2021-01-24 12:12:17 · 875 阅读 · 1 评论 -
6、短路器 Netflix Hystrix 之 配置指南
1、说明Hystrix 使用 Archaius 作为配置属性的默认实现。下面的文档描述了默认的 HystrixPropertiesStrategy 实现,除非你使用插件覆盖它。每个属性有四个优先级:1.1 代码中的全局默认值如果以下3项都没有设置,则这是默认值。全局默认值在下面的表格中显示为“默认值”。1.2 动态全局默认属性您可以通过使用属性来更改全局默认值。全局默认属性名在下面的表格中显示为“默认属性”。1.3 实例默认代码您可以定义特定于实例的默认值。例子:HystrixCom原创 2021-01-23 21:04:21 · 476 阅读 · 0 评论 -
5、断路器 Netflix Hystrix 之 运维操作
Hystrix 不仅是一种弹性工程工具,也是一种操作工具。本页面试图分享每天使用 100 多个 Hystrix 命令类型、40 多个线程池、100 多个线程隔离命令和 2000 多个信号量隔离命令执行的系统的一些经验。本页上描述的截图和事件来自 Netflix API 系统,代表了真实的生产问题或对生产的 Latency Monkey 模拟。1、如何配置和调优调用部署新电路的典型方法是使用自由配置(超时/线程/信号量)将其发布到生产环境中,然后在看到它在峰值生产周期中运行后将其调优为更严格的配置。原创 2021-01-21 07:20:13 · 217 阅读 · 0 评论 -
4、断路器 Netflix Hystrix 之 操作指南
1、Hello World!以下是 HystrixCommand 的最简单的 “Hello World” 实现:public class CommandHelloWorld extends HystrixCommand<String> { private final String name; public CommandHelloWorld(String name) { super(HystrixCommandGroupKey.Factory.asKey(原创 2021-01-20 21:02:50 · 492 阅读 · 0 评论 -
3、断路器 Neflix Hystrix 之 工作原理
1、流程图下图显示了当你通过 Hystrix 向服务依赖请求时会发生什么:下面几节将更详细地解释这个流程:构造一个 HystrixCommand 或 HystrixObservableCcommand 对象执行这个 Command是否缓存了响应?短路是否打开?线程池/队列/信号量是否已满?HystrixObservableCommand.construct() 或 HystrixCommand.run ()计算短路器健康状态获取 Fallback返回成功的响应1.1 构造一个原创 2021-01-19 13:14:37 · 314 阅读 · 0 评论 -
2、熔断器 Netflix Hystrix 之 开始使用
1、添加依赖Maven、Ivy、Gradle和其他工具的二进制文件和依赖信息可以在 http://search.maven.org 上找到。Maven的例子:<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>x.y.z</version></原创 2021-01-18 07:54:24 · 264 阅读 · 0 评论 -
11、Eureka 源码解析 之 Eureka Server 覆盖状态
下面是官方提供的 Eureka 架构图:1、Eureka Server 覆盖状态概述在 InstanceInfo 服务应用信息对象里面不仅有状态status ,还有覆盖状态 overriddenStatus。InstanceInfopublic class InstanceInfo { // 服务应用信息状态 private volatile InstanceStatus status = InstanceStatus.UP; // 服务应用信息覆盖状态 private原创 2021-01-11 23:08:28 · 1013 阅读 · 0 评论 -
12、Eureka 源码解析 之 Eureka Client 增量拉取注册表
在之前的博客当中 6、Eureka 源码解析 之 Eureka Server 多级缓存 已经详细说明了在 Eureka Client 启动的时候会去 Eureka Server 里面全量的拉取一下注册到里面的服务信息列表。并且 Eureka Server 里面是使用了多级缓存来保存全量的注册信息列表。Eureka Client 在启动时获取 Eureka Server 中的注册信息,但是作为分布式环境服务随时时可进行上线、下线操作。所以作为注册中心它需要有服务自动上下线发现的功能。原创 2021-01-10 18:59:27 · 1035 阅读 · 0 评论 -
10、Eureka 源码解析 之 Eureka Server 自我保护机制
下面是官方提供的 Eureka 架构图:1、什么是自我保护机制默认情况下,如果Eureka Server在一定时间内(默认 90 秒,其实不止 90 秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。...原创 2021-01-07 22:20:41 · 1149 阅读 · 1 评论 -
9、Eureka 源码解析 之 Eureka Server 服务过期
下面是官方提供的 Eureka 架构图:1、Eureka Server 为什么要服务过期正常情况下,应用实例下线时候会主动向 Eureka-Server 发起下线请求,也就是我们之前分析的 – 8、Eureka 源码解析 之 Eureka Client 服务下线。但实际情况下,应用实例可能异常崩溃,又或者是网络异常等原因,导致下线请求无法被成功提交。这种情况之后,需要 Eureka Client 定时向 Eureka Server 发送续约配合 Eureka Client 通过定时任务清理超时的租约原创 2021-01-06 23:21:22 · 562 阅读 · 0 评论 -
8、Eureka 源码解析 之 Eureka Client 服务下线
下面是官方提供的 Eureka 架构图:1、Eureka Client 服务下线当 Eureka Client 服务关闭之前会调用 DiscoveryClient#shutdown 方法。因为这个方法上面标注了 @PreDestroy 在对象销毁之前这个方法就会被调用。 @PreDestroy @Override public synchronized void shutdown() { if (isShutdown.compareAndSet(false,原创 2021-01-06 12:59:29 · 617 阅读 · 1 评论 -
7、Eureka 源码解析 之 Eureka Client 续约
下面是官方提供的 Eureka 架构图:1、Eureka Client 续约机制在 Eureka Client 需要定时的向注册中心 Eureka Server 发送续约信息,告诉注册中心当前的微服务处于可用状态,这样注册中心在服务剔除的时候才不会把当前服务实例从注册表中删除。在 DiscoveryClient 进行初始化的时候,会调用 DiscoveryClient#initScheduledTasks 方法。在这个方向当中不仅会启动定时任务调用 CacheRefreshThread 线程定时从原创 2021-01-05 13:21:42 · 372 阅读 · 0 评论 -
6、Eureka 源码解析 之 Eureka Server 多级缓存
下面是官方提供的 Eureka 架构图:1、Eureka Client 全量拉取注册表在微服务中是嵌入了 Eureka Client 的,当服务启动的时候就会从 Eureka Server 中拉取注册的服务信息列表。在微服务中嵌入的 EurekaClient 的实现类 DiscoveryClient 在初始化的时候会通过调用 EurekaHttpClient 去 Eureka Server 拉取全量服务信息列表。在 DiscoveryClient#initScheduledTasks 会启动定原创 2021-01-04 22:14:56 · 660 阅读 · 0 评论 -
5、Eureka 源码解析 之 Eureka Client 服务注册流程
下面是官方提供的 Eureka 架构图:对于 Eureka 而言,微服务的提供者和消费者都是它的客户端,其中服务提供者关注服务注册、服务续约 和 服务下线等功能,而服务消费者关注于 服务信息的获取。下面我们来看一下 Eureka Client 的服务注册流程。1、Eureka Client 注册流程...原创 2020-12-30 13:20:41 · 621 阅读 · 0 评论 -
13、Nepxion Discovery 之 全链路调用链监控
在进行微服务调用的时候,为了系统的高可用性,不仅需要进行灰度发布验证服务的可用性。同时对于服务健康的监控也是很重要的一环。Nepxion Discovery 在这方面也有监控方面的集成,包含以下几个方面:蓝绿灰度埋点调用链监控全链路日志监控全链路指标监控1、蓝绿灰度埋点调用链监控1.1 蓝绿灰度埋点调用链监控关于 蓝绿灰度埋点调用链监控 官网描述得很清楚,它内置蓝绿灰度埋点,包括如下:1. n-d-service-group - 服务所属组或者应用2. n-d-service-type原创 2020-12-27 15:48:28 · 998 阅读 · 0 评论 -
4、Eureka 源码解析 之 Eureka Client 启动原理分析
在前面的一篇文章 3、Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动。在集群环境下 Eureka Server 相互之前需要同步注册表信息。所以不管是微服务当中还是 Eureka Server 当中都需要依赖 eureka-client 这个 Jar 包。它封装 Eureka Server 提供的 Restful 服务,依赖方可以以接口方法的方式方便的进行调用。下面是 Eureka 官网提供的系统架构图。在这个图中有以下几个角色原创 2020-12-27 12:09:32 · 539 阅读 · 1 评论 -
3、Eureka 源码解析 之 Eureka Server 启动原理分析
Eureka 是 Netflix 开源的一款注册中心,下面就是 eureka 的架构图。在这个图中有以下几个角色:Eureka Server:Eureka 服务器,它是注册中心提供接口给应用把服务实例的信息注册上来Eureka Client:Eureka 客户端,Eureka 包装好了微服务访问 Eureka 服务器的一系列接口。比如:注册,心跳,服务下线等。Application Server:微服务应用服务器,一个单体服务可以按照不同的领域拆分为多个微服务。微服务可以依赖 Eureka 客户原创 2020-12-24 23:02:19 · 485 阅读 · 1 评论 -
2、Eureka 源码解析 之 服务配置文件管理解析
Eureka 服务在进行配置管理的时候使用的是接口进行管理。对于 Eureka 服务它提供了很多自定义参数用于服务器上面的各种管理。其实对于 Eureka 来说:它即是一个服务器,因为它是一个注册中心,需要对外部微服务提供服务注册与服务发现;同时它又是一个 Client,因为对于分步式环境当中存在单点故障,为了解决这个功能 Eureka 提供了集群部署功能。那么不同的 Eureka 服务之间就面临微服务注册的注册表信息同步问题。所以 Eureka 也是一个 Eureka Client 它会拉取配置上面的其它原创 2020-12-22 23:08:00 · 507 阅读 · 0 评论 -
1、Eureka 源码解析 之 调试环境搭建
Eureka ( 是一个基于 REST (Representational State Transfer)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移。在Netflix, Eureka 除了在中间层负载平衡中扮演关键角色外,还用于以下目的。帮助Netflix Asgard - 一个开源服务,使云部署更容易,在快速回滚版本,以防出现问题,避免重新启动100个实例,这可能会花费很长时间。在滚动推送中,为了避免在出现问题的情况下向所有情况传播新版本。对于我们的原创 2020-12-16 07:20:58 · 571 阅读 · 0 评论 -
5、Nepxion Discovery 之 服务注册发现增强
Nepxion Discovery 在进行灰度发布的时候其实就是通过请求接口时的传入参数(或者在配置中心配置的参数)以及注册在注册中心的服务进行匹配找到合适的服务进行调用。在前面的文章 4、Nepxion Discovery 之 Spring Cloud 服务注册抽象 Spring Cloud 对于不同的注册中心都会有统一进行抽象。原创 2020-12-03 22:13:39 · 1225 阅读 · 0 评论 -
4、Nepxion Discovery 之 Spring Cloud 服务注册抽象
在 Spring Cloud 微服务架构体系里面我们的服务如果需要暴露被其它服务发现并调用,只需要在启动类上面添加注解 @EnableDiscoveryClient 就可以了。因为 Nepxion Discovery 这个灰服务框架是基于 Spring Cloud 微服务架构体系,所以我们就有必要知道 Spring Cloud 的服务注册发现的原理。所以在这里就分析一下 Spring Cloud 服务是如何自动注册的。首先要讨论的就是启动类上面的 @EnableDiscoveryClient 这个注解。原创 2020-12-02 12:55:26 · 1016 阅读 · 2 评论 -
3、Nepxion Discovery 项目结构简介
Nepxion Discovery 项目的 github 地址为:https://github.com/Nepxion/Discovery。Discovery【探索】微服务框架,基于Spring Cloud Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用等组件全方位增强的企业级微服务开源解决方案,更贴近企业级需求,更具有企业级的插件引入、开箱即用特征。它的功能在官网上面介绍得非常清楚,在这里就不在赘述了。下面我们来分析一下 Nepxion Discovery原创 2020-11-30 22:43:26 · 1977 阅读 · 0 评论 -
2、Nepxion Discovery 灰度发布初体验
上一篇博客 Nepxion Discovery:Spring Cloud灰度发布神器 介绍了 Nepxion Discovery 框架在灰度发布里面可以帮我们做哪些事情,下面我们就通过一个简单的小例子来体验一下它的魅力。1、环境搭建下载代码,Git clone https://github.com/Nepxion/DiscoveryGuide.git,分支为simple代码导入IDE,并切换到 simple 分支,编译好的项目结构如下所示:3. 下载Nacos服务器从https:/原创 2020-11-20 10:27:36 · 2627 阅读 · 2 评论 -
Spring Cloud Gateway 15 分钟极速入门
Spring cloud gateway 是 spring 官方基于 Spring 5.0、Spring Boot2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等原创 2020-05-31 22:48:09 · 943 阅读 · 0 评论 -
分库分表后,测试人员如何面对多库多表中数据
最近工作的重心是容量规划,当系统数据量上来之后。对系统就需要使用分库分表了,分库分表选型的是 apache sharding jdbc,他是通过客户端来对数据源进行分库分表的。1、遇到问题但是在分库分表之后,不管是开发还是测试,当遇到问题需要查询数据库的时候面对多个库多个表那就比较痛苦了。如何透明化分库分表所带来的影响,让使用方尽量像使用一个数据库一样使用水平分片之后的数据库集群。我们需要解决这个问题。我们在开发的时候使用了 ShardingSphere 的客户端中间件,sharding-jdbc原创 2020-05-25 00:05:34 · 1443 阅读 · 0 评论 -
Spring Boots 集成 Sharding Jdbc 使用复合分片
随着业务的逐渐增大,原有保存在单表的数据量也日益增强。数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。再加上物理服务器的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。换句话说需要合理的数据库架构来存放不断增长的数据,这个就是分库分表的设计初衷。目的就是为了缓解数据库的压力,大限度提高数据操作的效率。原创 2020-04-25 13:13:17 · 2307 阅读 · 7 评论 -
apache dubbo 源码分析系列汇总
Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。后面捐献给了知名的开源社区 apache。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1、dubbo 架构以下是 du...原创 2020-03-27 23:06:03 · 2074 阅读 · 0 评论 -
Amazon SQS 模仿 @RabbitListener
新到一家公司,由于对业务还不太熟悉。正好又有一个需求,由于我们公司是第三方支付公司需要把订单状态的更新(比如成功或者失败等状态)发送给调用接口的商户。在设计这个系统的时候,由于公司的业务都是在亚马逊去上。而且之前使用的 MQ 就是使用的 Amazon Simple Queue Service 也就是 SQS,所以这次技术选型也是 SQS 。主要用于当发送商户失败时候,会有一个重试策略。把发送失败的...原创 2020-01-18 11:03:27 · 1000 阅读 · 0 评论 -
Spring CXF Restful
Apache CXF已经是一个正式的Apache顶级项目.它继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先或者 WSDL 优先来轻松地实现 Web Services 的发布和使用。原创 2017-03-05 10:38:23 · 1381 阅读 · 0 评论 -
什么是IaaS, PaaS和SaaS及其区别
“云服务”现在已经快成了一个家喻户晓的词了。如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道。“云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务。任何一个使用基于互联网的方法来计算,存储和开发的公司,都可以从技术上叫做从事云的公司。转载 2017-04-06 21:38:00 · 2101 阅读 · 0 评论 -
dubbo hello world
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。原创 2017-02-27 23:02:45 · 1243 阅读 · 0 评论 -
dubbo zookeeper demo
在上面一篇文章中介绍了dubbo的最简单的用法,下面就介绍一下在生产环境中是如何使用dubbo的。Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境.原创 2017-03-03 23:06:42 · 787 阅读 · 0 评论 -
Dubbo实现源码分析
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 其核心部分是提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。转载 2017-08-19 21:48:50 · 12458 阅读 · 0 评论 -
apache zookeeper 介绍
apache zookeeper是一种集中的服务,用于维护配置信息、命名、提供分布式同步和提供组服务。所有这些类型的服务都是通过分布式应用程序来使用的。每次执行的时候,都有大量的工作要去解决那些不可避免的bug和竞态条件。由于实现这些服务的困难,应用程序最初通常会对它们进行节省,这使得它们在出现更改时变得很脆弱,并且难于管理。即使完成了正确的工作,这些服务的不同实现在部署应用程序时也会导致管理的复杂原创 2017-09-02 11:56:51 · 1427 阅读 · 0 评论 -
1、断路器 Netflix Hystrix 之 概述
1、什么是 Hystrix?在分布式环境中,许多服务依赖项不可避免地将会失败。Hystrix是一个通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互的库。Hystrix通过隔离服务之间的访问点来实现这一点,停止跨级的级联故障,并提供备用选项,所有这些都可以提高系统的整体弹性。Hystrix 的历史Hystrix是由Netflix的API团队在2011年开始的弹性工程工作...原创 2018-05-25 08:03:32 · 1209 阅读 · 1 评论 -
webservice hello world
Web service是一个平台独立的跨语言、跨平台,低耦合的,自包含的、基于SOAP(simple object access protocal)协议的可编程的web的应用程序,可远程接口访问。可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序原创 2020-01-11 11:32:26 · 1533 阅读 · 0 评论