微服务
文章平均质量分 71
Coding到灯火阑珊
Coding
展开
-
Kubernetes原生api部署微服务5-监听Pod
我们使用Client-go中的informer来监听用户微服务与文章微服务的Pod。原创 2022-01-24 11:16:19 · 915 阅读 · 0 评论 -
Kubernetes原生api部署微服务3-创建Configmap
Configmap是kubernetes的一种资源对象,可以将应用的配置信息与容器镜像解耦,即配置信息的修改不需要重新构建容器镜像。原创 2022-01-09 14:53:35 · 406 阅读 · 0 评论 -
Kubernetes原生api部署微服务2-创建Namespace、Deployment、Service
Client-go是kubernetes官方开源的访问Api Server的客户端,通过Client-go我们可以对kubernetes的资源进行增删改查等操作。原创 2022-01-04 10:17:26 · 578 阅读 · 0 评论 -
Kubernetes原生api部署微服务1-构建微服务
在使用kubernetes原生api部署微服务前,需要先构建一个微服务系统。我们使用gin框架搭建简单的博客系统,包含2个简单的微服务系统:用户微服务和文章微服务。原创 2022-01-01 19:28:57 · 1003 阅读 · 0 评论 -
Kubernetes原生api部署微服务系列
在使用 Kubernetes REST API 编写应用程序时,我们不需要自己实现http rest api接口的请求及传输数据的编解码,可以使用Kubernetes官方提供的客户端库来实现。本系列就是使用kubernetes官方开源的客户端client-go调用Api Server的接口来部署微服务。原创 2021-12-30 12:42:35 · 788 阅读 · 4 评论 -
十二,构建Docker镜像
通过前面的十一篇文章,我们基于Go-kit微服务框架建立了图书馆借书项目,包括三个微服务、一个网关、限流、服务注册与发现、熔断降级、监控和分布式链路追踪。接下来我们将微服务构建成 docker 镜像,在容器中启动服务。完整代码:https://github.com/Justin02180218/micro-kit编写Dockerfile创建 deploy/docker 目录,在此目录下编写 Dockerfile 文件,如图:构建 user-service 镜像创建 .原创 2021-10-23 10:17:41 · 237 阅读 · 0 评论 -
十三,部署微服务到K8S
上一篇文章我们构建了微服务的 Docker 镜像,接下来我们将镜像部署到K8S中。完整代码:https://github.com/Justin02180218/micro-kit部署架构每个微服务启动2个 pod 注册到 consul 上,网关也启动2个 pod 从 consul 上获取微服务的一个 pod 实例来访问接口。在 ingress 上配置了4个域名转发: api.library.com: 访问 api 网关 consul.library.com原创 2021-10-17 21:56:03 · 2234 阅读 · 0 评论 -
十一,微服务监控
监控 PROMETHEUSPrometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB),使用Go语言开发,是Google BorgMon监控系统的开源版本。prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。项目中应用完整代码:https://github.com/Justin02180218/micro-kit配置文件prometheus: namespace: "library"原创 2021-10-10 11:10:50 · 676 阅读 · 0 评论 -
十,分布式链路追踪
链路追踪 ZipkinZipkin是 Twitter 的一个开源项目,基于 Google Dapper实现。使用它来收集各个服务器上请求链路的跟踪数据,及时地发现系统中出现的延迟问题,找出系统的性能瓶颈。项目中应用完整代码:https://github.com/Justin02180218/micro-kit配置文件zipkin: url: "http://zipkin-server:9411/api/v2/spans" service_name: "user-原创 2021-10-07 11:03:48 · 1317 阅读 · 0 评论 -
九,自写网关(library-apigateway)
网关 library-apigateway,接口访问的统一入口。通过 consul 获取注册的微服务的某一个实例,发起访问请求。如图:完整代码:https://github.com/Justin02180218/micro-kit包结构目前网关的功能只是做接口转发,所以只有一个 transport 层。代码实现配置文件server: port: 80 mode: debug name: "apigateway" cons...原创 2021-10-04 16:27:16 · 1385 阅读 · 0 评论 -
八,熔断、降级
熔断器 Hystrix-gohystrix-go是用go实现的hystrix版,提供了基础的熔断、降级功能。项目中应用完整代码:https://github.com/Justin02180218/micro-kit在 pkg 下新建目录 circuitbreakers,创建 hystrix.go 文件:代码如下:import "github.com/afex/hystrix-go/hystrix"func Hystrix(commandNam原创 2021-09-29 22:51:20 · 978 阅读 · 1 评论 -
七,服务注册与发现
Consul 介绍服务注册与发现采用 consul 组件,是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案等。Consul使用gossip协议管理成员关系、广播消息到整个集群,他有两个gossip pool(LAN pool和WAN pool),LAN pool是同一个数据中心内部通信的,WAN pool是多个数据中心通信的,LAN pool有多个,WAN pool只有一个。..原创 2021-09-25 12:12:45 · 1856 阅读 · 0 评论 -
六,令牌桶限流
令牌桶限流在这个图书馆项目中,我们采用令牌桶限流算法,具体原理请参看《分布式高可用-流量控制-1 流控策略》文章。项目中应用完整代码:https://github.com/Justin02180218/micro-kit在 pkg 下新建目录 ratelimits,创建 ratelimit.go 文件:在 go kit 的 endpoint 层进行限流,采用装饰器模式var ErrLimitExceed = errors.New(" R...原创 2021-09-22 22:50:36 · 278 阅读 · 0 评论 -
五,gRPC微服务(library-book-grpc-service)
gRPC微服务 library-book-grpc-service ,书籍管理内部服务。提供书籍管理的 rpc 接口,主要实现了根据用户ID获取书籍列表的功能,用户管理服务通过 GRPC 调用此服务接口。完整代码:https://github.com/Justin02180218/micro-kit包结构各个包的含义与上两篇基本一样,这里就不一一说明了。代码实现gRPC Server编写 book.proto 文件synta...原创 2021-09-19 15:43:49 · 975 阅读 · 0 评论 -
四,书籍管理微服务(library-book-service)
微服务 library-book-service ,书籍管理微服务。提供书籍管理的 Restful 接口,主要实现保存书籍、根据书籍名称查询、书籍列表、用户借书等功能。完整代码:https://github.com/Justin02180218/micro-kit包结构各个包的含义与上一篇 《微服务library-user-service》一样,这里就不一一说明了。代码实现配置文件library-book-service的配置文件 book.yaml 的内容与 us.原创 2021-09-15 23:09:08 · 829 阅读 · 0 评论 -
三,用户管理微服务(library-user-service)
微服务 library-user-service ,用户管理服务。提供用户管理的 Restful 接口,主要实现用户注册、根据用户ID或者 email 查询用户、查询用户所借书籍等功能。完整代码:https://github.com/Justin02180218/micro-kit包结构说明 dao:数据访问层 dto:数据传输层 models:数据库表映射层 service:业务逻辑层 endpoint:go-kit 的概念,将服.原创 2021-09-11 15:21:53 · 8573 阅读 · 0 评论 -
二,基础框架搭建
工程结构首先我们来搭建工程结构,主体分为三个微服务和一个网关,还包括公共组件及部署文件等。如图: deploy:部署文件目录,包括Dockerfile、k8s yaml文件等。 library-apigateway:结合 Consul 实现的网关。 library-book-grpc-service:提供 rpc 接口调用的书籍管理微服务,用于微服务内部之间的调用。 library-book-service:提供 restful .原创 2021-09-08 22:03:31 · 311 阅读 · 2 评论 -
一,项目介绍与架构
项目介绍微服务架构实战系列实现一个简单的图书馆项目,只是为了验证、实现微服务的各项能力。此项目划分为三个微服务:如图: 用户管理服务:提供用户管理的 Restful 接口,主要实现用户注册、根据用户ID或者 email 查询用户、查询用户所借书籍等功能。 书籍管理服务:提供书籍管理的 Restful 接口,主要实现保存书籍、根据书籍名称查询、书籍列表、用户借书等功能。 书籍管理内部服务:提供书籍管理的 rpc 接口,由用户管理服务通过 GRPC 调用此服务接口,主要实现原创 2021-09-05 17:51:41 · 596 阅读 · 0 评论 -
预告:微服务架构实战
近期准备写关于微服务架构实战的系列文章,基于Go语言,结合Gin web框架和Go-kit微服务框架。内容包括限流、服务注册与发现、熔断降级、监控和分布式链路追踪、构建docker镜像,部署发布到k8s中。目录:一,项目介绍与架构二,基础框架搭建三,微服务library-user-service四,微服务library-book-service五,微服务library-book-grpc-service六,限流七,服务注册与发现八,熔断、降级九,网关library原创 2021-09-04 23:17:58 · 118 阅读 · 2 评论 -
Resilience4j源码解析-2.1 CircuitBreaker模块
一,CiruitBreaker(熔断器)模块总体介绍Resilience4j的CircuitBreaker主要由6个部分组成:管理熔断器实例的注册容器、熔断器的相关配置、熔断器的各种状态、触发熔断器状态变化的指标、熔断器行为变化产生的事件以及熔断器本身。 它们之间的基本调用关系如下图: 二,CiruitBreaker模块各部分详解源码位置如下图: 1,C...原创 2018-12-27 14:49:31 · 782 阅读 · 0 评论 -
Resilience4j源码解析-2.2 CircuitBreaker模块之配置
2,CircuitBreakerConfig(熔断器配置)CircuitBreakerConfig类中封装了与熔断器相关的配置属性,属性包括:请求调用失败的阈值、熔断器在打开状态时的持续时间、熔断器在半开状态下的Ring Buffer大小、熔断器在关闭状态下的Ring Buffer大小、是否记录请求调用失败的断言。Ring Buffer的原理在后面研究CircuitBreakerMetrics...原创 2018-12-28 18:09:01 · 652 阅读 · 0 评论 -
Resilience4j源码解析-2.3.1 CircuitBreaker模块之有限状态机
3,CircuitBreakerState(熔断器状态)从Resilience4j的logo就可以看出有限状态机的设计理念在Resilience4j项目中是多么重要。 图中的实心圆表示关闭状态,半心圆表示半开状态和空心圆表示打开状态。 1),熔断器的有限状态机CircuitBreaker的状态转换通过一个有限状态机来实现的,有3种常用状态: 关闭(CLOSED)、打开(OPEN...原创 2018-12-28 18:42:23 · 598 阅读 · 0 评论 -
Resilience4j源码解析-2.3.2 CircuitBreaker模块之有限状态机
3),有限状态机的实现状态建模完成,还需要建模一个状态机来驱动状态的变化,把状态机封装成类CircuitBreakerStateMachine。如图: CircuitBreakerStateMachine类实现了熔断器CircuitBreaker接口,除了实现状态转换机制,还实现了熔断机制和事件发布机制。所以CircuitBreakerStateMachine类是整个熔断器...原创 2018-12-30 15:03:48 · 453 阅读 · 0 评论 -
Resilience4j源码解析-2.5 CircuitBreaker模块之事件发布
5,CircuitBreakerEvent(熔断器事件) 1),事件机制框架Resilience4j的事件机制是采用观察者模式设计的。Resilience4j事件的框架代码在:关系如图:EventPublisher是事件发布者接口(被观察者),EventConsumer是事件消费者接口(观察者)。在EventPublisher中只有一个方法onEvent(Eve...原创 2019-01-05 18:10:48 · 390 阅读 · 0 评论 -
Resilience4j源码解析-2.4 CircuitBreaker模块之度量指标
4,CircuitBreakerMetrics(熔断器度量指标)上一篇文章我们分析了熔断器状态机的状态转换机制,这一篇文章我们分析一下熔断器度量指标,比如:包括触发状态转换的请求调用失败率是如何计算的。 相关联的类,如图: 1),CircuitBreaker.Metrics是一个度量指标接口,定义了一系列获取度量指标的方法,包括获取失败率的百分比、获取请求调用总数量,获取请...原创 2019-01-02 18:41:58 · 423 阅读 · 0 评论 -
Resilience4j源码解析-2.7 CircuitBreaker模块之总结
熔断器模块总结 通过前面几篇文章分析了熔断器模块的6个主要组成部分,这篇文章我们来分析这6个部分是如何协同工作的。 1,熔断器初始化时的状态:一般创建熔断器的代码: 这2行代码产生了一系列的调用关系,如图:这时熔断器的状态是关闭状态(ClosedState),度量指标实例及事件处理器实例都已经准备好。我们这时可以用CircuitBreaker.Metri...原创 2019-01-14 14:03:21 · 738 阅读 · 0 评论 -
Resilience4j源码解析-2.6 CircuitBreaker模块之熔断
6,CircuitBreaker(熔断器)通过前面几篇的讲解,现在终于可以来看一看熔断功能是如何实现的了。与熔断器相关的有CircuitBreaker接口和CircuitBreakerStateMachine实现类。 在CircuitBreaker中: 1)声明了与状态相关的枚举类State和与状态转换相关的枚举类StateTransition:有限状态机的5种...原创 2019-01-09 20:12:20 · 943 阅读 · 0 评论 -
Resilience4j源码解析-3 RateLimiter模块介绍及限流算法
一,RateLimiter(限流器)模块总体介绍Resilience4j的RateLimiter主要由5个部分组成:管理限流器对象的容器、限流器的相关配置、限流器可监控的指标、限流器行为变化产生的事件以及限流器本身。 它们之间的基本调用关系如下图:RateLimiterRegistry、RateLimiterConfig和RateLimiterEvent的实现逻辑与熔断器对...原创 2019-01-16 17:16:23 · 2231 阅读 · 0 评论 -
Resilience4j源码解析-3.1 RateLimiter模块之实现令牌桶限流
一,Resilience4j的限流器设计理念当限流器启动时,以当前JVM启动时间为起点,JVM结束时间为终点,每经过一个固定时间段(cycle),记录为一个周期,每个周期设置固定的可访问的次数(permissions)。当有线程请求访问时,首先计算经历到了那个周期,该周期的可访问次数是否大于零,如果大于零则允许请求调用;如果小于零,则等待、被拒绝或者进行降级处理。如图:根据这种设计理念...原创 2019-01-22 17:29:05 · 1239 阅读 · 0 评论 -
Resilience4j源码解析-3.2 RateLimiter模块之实现固定并发数限流
一,固定周期的固定并发数限流固定并发数限流相对于令牌桶限流就简单多了。Resilience4j的限流器是通过java.util.concurrent.Semaphore 信号量的方式实现的。当请求线程获取到信号量时执行业务逻辑方法,如果获取不到信号量,则在超时时间内阻塞,等待信号量被释放。系统会启动一个线程按固定周期(cycle),释放已经获取到信号量的线程。如图: 下面我们来看源...原创 2019-02-04 20:47:06 · 908 阅读 · 0 评论 -
Resilience4j源码解析-1 介绍及环境搭建
一,简介Resilience4j是受Hystrix启发而做的新一代轻量级熔断器,基于Java8的函数式编程开发。resilience4j只依赖一个Vavr包(函数式库),不需要再引入其他包,所以相对于Hystrix是轻量级的。同时resilience4j的模块化程度更好,很容易的扩展附加模块。目前Resilience4j包括熔断(CircuitBreaker)、限流(RateLimiter...原创 2018-12-26 13:55:48 · 853 阅读 · 0 评论